说我已经定义了一组项目。这些项目必须分组到不同的集合中。 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推出了更多以服务为中心的方法,但最近有很多关于避免贫血模型的嗡嗡声。
答案 0 :(得分:1)
这完全取决于您的使用案例和粒度,因此很难明确回答您的问题。丰富模型可能是一件好事,但你也不想走下那个滑坡。
如果我 在高度耦合的意大利面条代码“丰富”模型和无聊的贫血模型之间做出选择,我就不得不选择贫血模型。但是在这里使用 reductio ad absurdum 并没有解决任何问题,所以我们回到原来的观点:它取决于你的用例。有时您希望/需要模型具有行为。有时候你没有。大部分时间你都处于中间位置。
作为开发人员和架构师,您需要找出真正需要的行为模型。
我想补充说,如果你正在处理的是分发的,我会建议不要使用有状态模型 - 在节点之间共享状态(避免死锁和竞争条件)是不平凡的。