您有一个包含列表的对象:
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)你在Pojo中写一个addItem(),将对象插入列表
public class MyPojo {
private List<Object> list;
public void addItem(Object item) {
list.add(item);
}
}
// and then use
new MyPojo().addItem(Object);
在这种情况下,代码质量的最佳实践是什么? 谢谢!
答案 0 :(得分:1)
如果你有选择的自由,总是更喜欢第二种方式,即调用内部修改实例字段的方法。
在第一个中,您清楚地暴露了List<Object>
实例字段,这是一种非常糟糕的编码方式。你永远不应该采用它。
答案 1 :(得分:1)
所有答案都是固执己见的。我认为#1打破了封装,所以我选择#2。但是,我只会对域对象执行此操作,即我不会为数据传输对象(DTO&#39; s)或任何其他数据值执行此操作。
答案 2 :(得分:0)
假设您选择了第一种方法,它在不知情的情况下修改了类的内部表示。编写了许多修改列表的客户端代码。
稍后,您将更改类,以便您需要知道列表是否已被修改。或者您可能想要更改内部表示。但现在所有这些外部代码都违反了封装。修改外部代码会更昂贵或不可行,具体取决于您是否可以修改它。
第二种方法封装了数据。您可以将门打开以更改内部表示或监控更改。