1

我正在写一个在线商店,当我对域进行建模时,我想到了一个问题,如何对从不同系统以不同粒度更改的对象进行建模。

例如,假设我们有一个带有一些属性的 Product 实体:

  • 产品编号
  • 姓名
  • 描述
  • 价格
  • 等等

我们从两个系统接收新产品和产品更新:库存管理系统(通过 web 服务)和集成在电子商务产品中的管理 web ui。

从库存管理中,我总是能获得具有所有属性的产品的完整更新(即使不是全部改变)。管理 ui 更新单个属性(crud)。

那么我应该如何在产品实体上建模(和命名)与业务案例相关的更改方法?

像 updateFromIms(price, description, name, ...) 之类的东西,或者我应该为每个属性编写一个设置器(这会破坏“不可修改”实体)

4

1 回答 1

0

如有疑问,我通常会查看示例 Shipping DDD 应用程序是如何做到的。可以在 C# 中找到示例应用程序:http ://code.google.com/p/ndddsample/

因此,在您的情况下,这类似于Cargo实体的处理方式,它有一个构造函数来创建实体,然后它具有公共方法,如BookingService用于 ChangeDestination 或 BookNewCargo 的SpecifyNewRoute。BookingService 由BookingFacade使用,该 BookingFacade负责:

这个立面保护了领域层——模型、服务、存储库——免受对用户界面和远程处理等事物的关注。

因此,在您的情况下,您的 UI 和 WebService 可以调用一个名为 UpdateProduct 的单一外观方法(我认为从服务或 UI 更新之间没有概念上的区别,因此您不需要像 ChangeDestination 这样的单独方法,但它是您的称呼)。外观方法将调用您的ProductService::UpdateProduct方法,该方法将调用ProductModel::UpdateProduct

现在我不知道您的应用程序的范围,所以这可能太多了,但无论如何 DDD 不适合小型应用程序。就个人而言,我以 Eric Evans 的书和 NDD 示例作为指导,但我认为摆脱一些复杂性(例如忽略外观)没有问题,没有人比您更了解您的应用程序。

于 2012-10-21T09:08:15.337 回答