有一个客户端服务应用程序使用WCF构建面向服务的体系结构,DDD用于在服务内部构建域层 .
在域层中有一个域对象 Customer
,其方法如下:
-
更改电话和地址
Customer.Relocate(Phone, Address)
-
将销售经理分配给客户
Customer.Assign(SalesManager)
-
向客户打折
Customer.Make(Discount)
由于此域层在WCF服务中使用,因此使用服务方法创建 CustomerService
:
-
CustomerService.Relocate(CustomerID, PhoneDTO, AddressDTO)
-
CustomerService.Assign(CustomerID, SalesManagerID)
-
CustomerService.MakeDiscount(DiscountDTO)
这些方法验证参数,请求域对象和调用域对象方法以应用业务逻辑 .
问题是它看起来像巨大的代码重复,因为WCF服务方法几乎(90%)与带有参数的域层方法相同,用ID和DTO表示 .
-
当WCF / SOA与DDD一起使用时,是否总会发生此方法重复?
-
有没有办法让这个瘦WCF服务层自动从域层构建?
-
还有其他想法吗?
1 回答
这是设计的 . With DDD, domain logic is separated from application logic. 因此,没有代码重复,因为这两个层有不同的职责 .
可能重复的代码是验证规则:它们通常在域层中用于强制不变量,在服务层中用于执行输入验证 . 如果您的应用程序出现这种情况,则应重构代码以删除重复并使验证规则可重用 . 另见this answer .
如果您的软件解决的问题非常简单,以上仍然感觉像重复工作,DDD可能不是正确的方法 .