无状态服务中心方法与有状态丰富模型

时间:2012-02-20 19:33:39

标签: java oop anemic-domain-model

说我已经定义了一组项目。这些项目必须分组到不同的集合中。 E.g项目可以像

public Item {
    public int id;
    public String name;
}

和集合有自己的设置,比如属于这个集合的项目,集合的名称等等。现在所有的东西都存储在xml结构中。

我的第一个想法是写下面的元素:

  • xml解析器获取set的数据并转换为MySet pojo

  • xml解析器获取所有项目并转换为Item pojos列表

  • 无状态服务类说ItemSetCreator计算最终ItemsSet对象,包含基于MySet的set定义和项目列表

    class ItemsSetCreator {
    
         public ItemsSet createItemsSet(List<Item> items, MySet set) {
             // ...
         }
    }
    

但另一种方法是稍微丰富一下模型并编写如下:

  • MySet类能够获取所有项目,根据xml-data将内部逻辑应用于它们,并提供最终的ItemsSet作为结果

我不知道哪个更好。我知道,例如Spring推出了更多以服务为中心的方法,但最近有很多关于避免贫血模型的嗡嗡声。

1 个答案:

答案 0 :(得分:1)

这完全取决于您的使用案例和粒度,因此很难明确回答您的问题。丰富模型可能是一件好事,但你也不想走下那个滑坡。

如果我 在高度耦合的意大利面条代码“丰富”模型和无聊的贫血模型之间做出选择,我就不得不选择贫血模型。但是在这里使用 reductio ad absurdum 并没有解决任何问题,所以我们回到原来的观点:它取决于你的用例。有时您希望/需要模型具有行为。有时候你没有。大部分时间你都处于中间位置。

作为开发人员和架构师,您需要找出真正需要的行为模型。

我想补充说,如果你正在处理的是分发的,我会建议不要使用有状态模型 - 在节点之间共享状态(避免死锁和竞争条件)是不平凡的。