数据加载中……

2011年9月20日

分享 - 小问题大道理

 1 public class Order {
 2     
 3     private String name;
 4     //
 5     private Set<OrderLine> orderLines = new HashSet<OrderLine>();
 6 
 7     public String getName() {
 8         return name;
 9     }
10 
11     public void setName(String name) {
12         this.name = name;
13     }
14 
15     /**
16      * 因为这是一个domain对象,贯穿你整个项目,不知你是否在意过这样的设计。
17      * 这样的设计对你是否有用呢?
18      * 用户:表示API调用者。 
19      */
20     
21     public Set<OrderLine> getOrderLines() {
22         /*
23          * 1.防止用户任意修改订单行的内容,强制要求用户使用当前类提供的API修改订单行
24          * 2.getOrderLines()绝对不为null,有可能getOrderLines().isEmpty()为true
25          * 用在你的程序中不会出现if(getOrderLines() == null && getOrderLines().isEmpty()),
26          * 只会出现if(getOrderLines().isEmpty())
27          */
28         return Collections.unmodifiableSet(orderLines);
29     }
30 
31     //-----------------------提供API修改Order by OrderLine----------------------------//
32     public void addOrderLine(OrderLine orderLine) {
33         //
34         orderLines.add(orderLine);
35     }
36 
37     public void removeOrderLine(OrderLine orderLine) {
38         // 
39     }
40     //-----------------------提供API修改Order by OrderLine----------------------------//
41     
42     public void setOrderLines(Set<OrderLine> orderLines) {
43         // this.orderLines = orderLines;
44         // 为什么没有向上面来做,是因为如果是这样赋值的话那么两个对象就是同一个引用了。
45         // 用户修改orderLines,this.orderLines也同样会被修改。
46         // 而提供这个类期望用户通过该类提供的接口来修改orderLines。
47         orderLines.addAll(orderLines);
48     }
49 
50 }

posted @ 2011-09-20 12:45 目绘艺术2 阅读(144) | 评论 (0)编辑 收藏