现在的位置: 首页 > 综合 > 正文

设计Java程序的经验

2013年01月16日 ⁄ 综合 ⁄ 共 2574字 ⁄ 字号 评论关闭

 以下是回复一位系统设计师的邮件,关于组件和子系统间接口设计,文字略有改动。

*************************

谢谢您的信任,您发的文档我读了,接口设计的要点都涵盖了,我个人觉得不错!!

我是从技术层面提一下我个人的一些不成熟的看法,仅供参考:

===
值对象属性的类型。在资源结果接口的资源结果集属性RsHashMap,是名/值对的集合。文档中定义为HashMap类型,HashMap是已实现的Class,这里我建议改为Map接口(Interface)类型。RsHashMap(或者RsMap)可能会被调用者(Caller)所访问和使用,使用接口或更级别的超类,能降低Caller和Callee(RsMap)之间的耦合级别,这是面向对象设计的基本原则,降低耦合级别在面向过程设计里也是很重要的。对于Callee来说,它可以把Map的真实对象类型实现为HashMap,也可以实现为LinkedHashMap,实现时选择余地就大了。这个问题不是致命的,其实不改也是可以接受的,只是改了后代码质量看起来稍好一点。

Java语言为开发员提供面向对象开发的基础,具体把资源结果类实现为JavaBean,为RsMap属性定义Getter/Mutator方法,实现代码如下:

package com.acme.test;

import java.util.Map;
import java.util.HashMap;

public class Resource{
 //... 其他属性
 private Map resourceMap = null; //资源结果集合
 
 public Map getResourceMap(){
  
  if (resourceMap == null)
   resourceMap = new HashMap(); //实现为HashMap
  
  return this.resourceMap;
 }
 
 public void setResourceMap(Map resourceMap){
  this.resourceMap = resourceMap;
 }
}

===
子系统间接口设计的表达形式。用表格来表达接口设计也是经典选择,这里我结合以前的开发实践和从事UML/OOA&D培训的经验,提出另一种表达方式作为补充,仅供开拓思路。因为已经达到详细设计水平,它可以用UML的类图来表示,或者用Java代码表示,二者是等价的,并且可以相互转换。子系统间设计的关键是接口定义和接口实现分离开。

请参考附件的Java代码示例。因为要看的东西太多,时间紧张,不能展开来写,见谅!

*************************
package com.acme.test;

public interface CRMQuery {

 //查询客户信息
 public Customer queryCustomer(String custId);
 
 //查询用户信息
 public User queryUser(String userId);
}

*************************
package com.acme.test;

public class CRMQueryImp implements CRMQuery{
 
 //查询客户信息实现代码
 public Customer queryCustomer(String custId){
  Customer customer = new Customer();
  
  //TODO: 查询实现代码
  
  return customer;
 }
 
 //查询用户信息实现代码
 public User queryUser(String userId){
  User user = new User();
  
  //TODO: 查询实现代码
  
  return user;  
 }  
}

*************************
package com.acme.test;

public class Customer {
 private String custId ;
 private String custName;
 //其他属性
 
 public String getCustId() {
  return custId;
 }

 public void setCustId(String custId) {
  this.custId = custId;
 }

 public String getCustName() {
  return custName;
 }

 public void setCustName(String custName) {
  this.custName = custName;
 }
 
}

*************************
package com.acme.test;

public class User {
 private String userId ;
 private String userName;
 //其他属性
 
 public String getCustId() {
  return userId;
 }

 public void setCustId(String userId) {
  this.userId = userId;
 }

 public String getUserName() {
  return userName;
 }

 public void setUserName(String userName) {
  this.userName = userName;
 } 
}

*************************
package com.acme.test;

import java.util.Map;
import java.util.HashMap;

public class Resource{
 //... 其他属性
 private Map resourceMap = null; //资源结果集合
 
 public Map getResourceMap(){
  
  if (resourceMap == null)
   resourceMap = new HashMap(); //实现为HashMap
  
  return this.resourceMap;
 }
 
 public void setResourceMap(Map resourceMap){
  this.resourceMap = resourceMap;
 }
}

抱歉!评论已关闭.