2017-04-05 56 views
0

您有一個包含一個列表的對象:有什麼更好? MyPojo.getList()。add(Object)或MyPojo.add()?

public class MyPojo { 
    private List<Object> list; 
} 

而且要增加一個項目到該POJO的名單。
有什麼更好?

1)你添加一個getter,獲取列表和對象添加到它

public class MyPojo { 
    private List<Object> list; 
    public List<Object> getList() { 
     return list; 
    } 
} 
// and then use 
new MyPojo().getList().add(Object); 

2)插入對象到列表

public class MyPojo { 
    private List<Object> list; 
    public void addItem(Object item) { 
     list.add(item); 
    } 
} 
// and then use 
new MyPojo().addItem(Object); 
你寫的addItem()在你的POJO的

這種情況下代碼質量的最佳實踐是什麼? 謝謝!

回答

1

如果您可以自由選擇,則始終更喜歡第二種方式,即調用內部修改實例字段的方法。

在第一個中,您清楚地暴露了List<Object>實例字段,這是一種非常糟糕的編碼方式。你永遠不應該接受這一點。

0

所有的答案都會被評論。我認爲#1打破封裝,所以我會去#2。但是,我只會爲域對象執行此操作,即我不會爲數據傳輸對象(DTO)或任何其他數據值執行此操作。

0

假設您選擇了第一種方法,它在不知情的情況下修改了類的內部表示。編寫了許多修改列表的客戶端代碼。

後來,您需要更改該類,以便知道該列表是否已被修改。或者,也許你想改變內部表示。但現在有所有這些違反封裝的外部代碼。根據您是否可以修改外部代碼,這將變得更加昂貴或不可行。

第二種方法封裝數據。您可以改變內部表示或監控變更。