【发布时间】:2017-09-15 12:35:22
【问题描述】:
我是否违反了“得墨忒耳法则”? 例如,我创建了一个包含姓名、电话和 ID 的班级人员,它与我的数据库中的列匹配。 当我想使用人的身份填写我的订单信息时。我喜欢这样。
public static void fill(Order order) {
DatabaseComponent databaseComponent = new DatabaseComponent();
Person person = databaseComponent.getById(order.getUserId());
order.setName(person.getName());
order.setPhone(person.getPhone());
}
我使用由 databaseComponent 返回的 getName 和 getPhone。这是中断 LoD。 有人建议我可以这样做
public void fill(Order order) {
DatabaseComponent databaseComponent = new DatabaseComponent();
Person person = databaseComponent.getById(order.getId());
fillOrder(order,person);
}
private void fillOrder(Order order,Person person){
order.setPhone(person.getPhone());
order.setName(person.getName());
return;
}
但我认为在公共方法中它仍然会破坏 LoD。有些人使用这种方法。
public class Util {
public static void fillOrder(Order order,Person person){
order.setPhone(person.getPhone());
order.setName(person.getName());
return;
}}
是的,也许它不会破坏 LoD。但是为什么呢?可能是Client 没有耦合到Person 类。但是它耦合到了Util。 LoD在这个场合有什么优势。
【问题讨论】:
标签: java law-of-demeter