数据库的实体对象应该在其中执行代码吗?因为我听到了周围人的不同答案。有些人告诉我,是否应该只包含你设置的字段,而其他人说你可以做任何你想做的事情。
我在下面写了一个例子,所以你知道我的意思(假装我有所有适当的尝试捕获和抛出:
@Entity
public class Man {
private Long id;
private final String name;
private final double height;
private final double weight;
private final double bmi;
public Man(String name) {
ManData data = new ManData(name);
this.name = name;
this.height = data.getHeight;
this.weight = data.getWeight;
this.bmi = BMI.calculate(height, weight);
}
}
1)假设ManData
对象从互联网上获取其信息。
2)bmi
也是根据收到的数据计算出来的,而不是通过的。
在实体内做这种事情好吗?
答案 0 :(得分:1)
长答案:
Martin Fowler在这里有关于Anemic Domains的精彩博文:http://www.martinfowler.com/bliki/AnemicDomainModel.html
他将它们定义为:
贫血领域模型的基本症状是乍一看它看起来像真实的东西。有许多对象,其中许多以域空间中的名词命名,并且这些对象与真实域模型具有的丰富关系和结构相关联。当你看到这个行为时会发现这个问题,并且你会发现这些物体几乎没有任何行为,这使得它们只不过是吸气剂和固定剂的一部分。实际上,这些模型通常都带有设计规则,表明您不要将任何域逻辑放在域对象中。相反,有一组服务对象捕获所有域逻辑。这些服务位于域模型之上,并使用域模型进行数据。
<强> TL;博士强>
是的,在域对象中添加比getter和setter更多的代码。
编辑修复拼写