【问题标题】:DDD Model Updates from Webservice来自 Web 服务的 DDD 模型更新
【发布时间】:2012-10-21 08:08:48
【问题描述】:

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

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

  • 产品编号
  • 姓名
  • 说明
  • 价格

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

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

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

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

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

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

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

    这个门面屏蔽了领域层——模型、服务、存储库—— 出于对用户界面和远程处理等方面的担忧。

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

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

    【讨论】:

    • 谢谢。不知道你提到的项目。我会仔细看看。但据我了解,如果它是一个用例,那么任何方法都可以更新?
    • 如果它们在概念上相似就可以了。在我看来,拥有两种不同的方法并不会增加模型的丰富性。
    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多