【问题标题】:Is method duplication inevitable when SOA / WCF is used with DDD?SOA / WCF与DDD一起使用时方法重复是否不可避免?
【发布时间】:2016-01-21 14:28:32
【问题描述】:

有一个客户端服务应用程序使用 WCF 构建面向服务的架构,并使用 DDD 在服务内部构建域层。

在域层中有一个域对象Customer 和方法:

  1. 更改电话和地址Customer.Relocate(Phone, Address)
  2. 将销售经理分配给客户Customer.Assign(SalesManager)
  3. 给客户打折Customer.Make(Discount)

由于此域层在 WCF 服务中使用,CustomerService 是使用服务方法创建的:

  1. CustomerService.Relocate(CustomerID, PhoneDTO, AddressDTO)
  2. CustomerService.Assign(CustomerID, SalesManagerID)
  3. CustomerService.MakeDiscount(DiscountDTO)

这些方法验证参数、请求域对象并调用域对象方法以应用业务逻辑。

问题在于它看起来像大量的代码重复,因为 WCF 服务方法几乎 (90%) 与具有参数的域层方法相同,以 ID 和 DTO 表示。

  1. 当 WCF / SOA 与 DDD 一起使用时,这种方法重复是否总是发生?
  2. 有没有办法让这个瘦 WCF 服务层从域层自动构建?
  3. 还有其他想法吗?

【问题讨论】:

  • 你的服务方法签名和客户类方法签名不同。所以这当然是不可避免的。将您的服务类想象成 Adpater,它对输入进行一些操作并向 Adaptee 提供兼容的输入。

标签: wcf architecture domain-driven-design soa


【解决方案1】:

这是设计使然。 通过 DDD,领域逻辑应用逻辑分离。因此,没有代码重复,因为两层的职责不同。 p>

可能重复的代码是验证规则:它们通常用于域层以强制执行不变量,并用于服务层执行输入验证。如果您的应用程序是这种情况,您应该重构代码以删除重复项并使验证规则可重用。另见this answer

如果您的软件解决的问题如此简单,以至于上面的内容仍然感觉像是重复性的工作,那么 DDD 可能不是正确的方法。

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多