分享 - 小問題大道理
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 }
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 }