【问题标题】:Does Information Expert pattern contradict Service Layer Pattern?信息专家模式是否与服务层模式相矛盾?
【发布时间】:2021-11-22 19:31:29
【问题描述】:

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

我将不胜感激。

【问题讨论】:

    标签: design-patterns anti-patterns grasp


    【解决方案1】:

    好问题。

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

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

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

    更好的方法是在客户类本身中使用该方法,因为客户类具有所需的所有数据。在某种程度上,这与Feature Envy Antipattern相反。

    关于服务层,在 GRASP 术语中可以看作Pure Fabrication。需要注意的是,在 DDD 之类的东西中,有应用程序服务(非常类似于 四人帮 中的门面或端口和适配器架构 中的端口)和域服务(不真正适合任何其他类的域的内部服务)。我对后者的看法是,如果我需要添加一些功能但没有明确的地方应该去哪里,它最终会出现在一个新的域服务中。我希望这很清楚!

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      相关资源
      最近更新 更多