信息专家模式与服务层模式相矛盾吗



在阅读GRASP模式时,我在Information Expert上停了下来,它指出类状态上的行为应该在同一个类中。但这与我多年来使用的服务层模式完全相反。服务具有域对象状态的行为。这让我很困惑

如果能给我一个深思熟虑的答复,我将不胜感激。

好问题。

信息专家是关于包含数据的对象(聚合、实体、值对象(,操作主要取决于它们所拥有的数据。

一个简单的例子:假设您有一个Customer类,并且您想要生成客户的全名。而不是有一个这样的类:

class SomethingService {
String customerFullName(Customer customer) {
return "${customer.firstName()} ${customer.lastName()}";
}
}

一个更好的方法是在customer类本身中包含该方法,因为customer类具有所需的所有数据。在某种程度上,这与功能嫉妒反模式相反。

关于服务层,这可以被视为GRASP术语中的纯制造。需要注意的是,在DDD这样的东西中,有应用程序服务(非常类似于《四人帮》中的Facade或《端口和适配器体系结构》中的端口(和域服务(域的内部服务,这些服务实际上不适合任何其他类(。我对后者的看法是,如果我需要添加一些功能,但没有明确的位置,它最终会出现在一个新的域服务中。我希望这是清楚的!

最新更新