Entity对象应该执行代码吗?

时间:2015-10-03 14:17:27

标签: java database hibernate

数据库的实体对象应该在其中执行代码吗?因为我听到了周围人的不同答案。有些人告诉我,是否应该只包含你设置的字段,而其他人说你可以做任何你想做的事情。

我在下面写了一个例子,所以你知道我的意思(假装我有所有适当的尝试捕获和抛出:

@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也是根据收到的数据计算出来的,而不是通过的。

在实体内做这种事情好吗?

1 个答案:

答案 0 :(得分:1)

长答案:

Martin Fowler在这里有关于Anemic Domains的精彩博文:http://www.martinfowler.com/bliki/AnemicDomainModel.html

他将它们定义为:

  

贫血领域模型的基本症状是乍一看它看起来像真实的东西。有许多对象,其中许多以域空间中的名词命名,并且这些对象与真实域模型具有的丰富关系和结构相关联。当你看到这个行为时会发现这个问题,并且你会发现这些物体几乎没有任何行为,这使得它们只不过是吸气剂和固定剂的一部分。实际上,这些模型通常都带有设计规则,表明您不要将任何域逻辑放在域对象中。相反,有一组服务对象捕获所有域逻辑。这些服务位于域模型之上,并使用域模型进行数据。

<强> TL;博士

是的,在域对象中添加比getter和setter更多的代码。

编辑修复拼写