Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Domain driven design 来自Webservice的DDD模型更新_Domain Driven Design - Fatal编程技术网

Domain driven design 来自Webservice的DDD模型更新

Domain driven design 来自Webservice的DDD模型更新,domain-driven-design,Domain Driven Design,我正在写一个网上商店,当我对这个领域进行建模时,我想到了一个问题:如何对不同系统中不同粒度的对象进行建模 例如,假设我们有一个具有某些属性的产品实体: 产品编号 名字 描述 价格 等等 我们从两个系统接收新产品和产品更新:库存管理系统(通过webservice)和集成在电子商务产品中的管理web ui 从库存管理中,我总能获得产品所有属性的完整更新(即使没有全部更改)。管理ui更新单个属性(crud) 那么,我应该如何在产品实体上建模(并命名)与业务案例相关的变更方法呢 比如UpdateFr

我正在写一个网上商店,当我对这个领域进行建模时,我想到了一个问题:如何对不同系统中不同粒度的对象进行建模

例如,假设我们有一个具有某些属性的产品实体:

  • 产品编号
  • 名字
  • 描述
  • 价格
  • 等等
我们从两个系统接收新产品和产品更新:库存管理系统(通过webservice)和集成在电子商务产品中的管理web ui

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

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


比如UpdateFromms(价格、描述、名称等),或者我应该为每个属性编写一个setter(它破坏了“不可修改”的实体)

当我有疑问时,我通常会查看示例装运DDD应用程序是如何做到这一点的。C#中的示例应用程序可以找到:

因此,在您的情况下,这类似于处理货物实体的方式,它有一个构造函数来创建实体,然后它有公共方法,如SpecifyNewRoute,由BookingService用于更改目的地或BookNewCargo。BookingService由负责以下工作的BookingFacade使用:

这个外观屏蔽了域层——模型、服务、存储库- 从用户界面和远程处理等方面考虑

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


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

谢谢。我不知道你提到的那个项目。我会仔细看看。但据我所知,如果是用例的话,updateanywhere方法就完全可以了?如果它们在概念上是相似的,就可以了。在我看来,拥有两种不同的方法并不会给您的模型带来太多的丰富性。