我正在写一家在线商店,当我在这个领域建模的时候,我想到了一个问题,那就是如何建模来自不同系统、不同粒度的对象。
例如,假设我们有一个具有某些属性的Product:
我们接收来自两个系统的新产品和产品更新:一个库存管理系统(通过webservice)和一个集成在电子商务产品中的管理web。
从库存管理,我总是得到一个产品的所有属性的全面更新(即使不是所有的改变)。管理ui更新单个属性(crud)。
那么,我应该如何在产品实体上建模(并命名)与业务案例相关的变更方法呢?
有点像updateFromIms(价格,描述,名字,.)还是应该为每个属性编写一个setter (这会破坏“不可修改的”实体)
发布于 2012-10-21 09:08:15
当有疑问时,我通常会查看示例航运DDD应用程序是如何做到这一点的。在C#中的示例应用可以找到:http://code.google.com/p/ndddsample/。
因此,在您的示例中,这类似于如何对待SpecifyNewRoute Cargo实体,它有一个创建实体的构造函数,然后它有一些公共方法,比如BookingService to ChangeDestination或BookNewCargo使用的公共方法。BookingService由BookingFacade使用,负责:
这个外观屏蔽了域层--模型、服务、存储库--不受用户界面和远程处理等问题的影响。
因此,在您的示例中,您的UI和WebService可以调用一个名为UpdateProduct的facade方法(我不认为从服务或UI进行更新之间有概念上的区别,因此您不需要像ChangeDestination这样的单独方法,但这是您的调用)。facade方法将调用您的ProductService::UpdateProduct方法,后者将调用ProductModel::UpdateProduct
现在我不知道您的应用程序的范围,所以这可能太多了,但DDD并不适合小型应用程序。就我个人而言,我以Evans的书和NDD示例作为指导,但我认为摆脱一些复杂性(例如忽略外观)没有问题,没有人比您更了解您的应用程序。
https://stackoverflow.com/questions/12996076
复制相似问题