我正在写一个在线商店,当我在建模领域时,脑子里出现了一个问题,即如何对不同系统中不同粒度的对象进行建模。
例如假设我们有一个具有一些属性的Product实体:
我们从两个系统接收新产品和产品更新:库存管理系统(通过网络服务)和集成在电子商务产品中的管理网络。
从库存管理中,我总是获得具有所有属性的产品的完整更新(即使并非全部更改)。管理ui更新单个属性(crud)。
那么我应该如何在产品实体上建模(和命名)与业务案例相关的变更方法?
有些像updateFromIms(价格,描述,名称......),或者我应该为每个属性写一个setter(打破'不可修改的'实体)
答案 0 :(得分:0)
如果有疑问,我通常会查看示例Shipping DDD应用程序是如何做到的。可以找到C#中的示例应用程序:http://code.google.com/p/ndddsample/
所以在你的情况下,这类似于 Cargo 实体的处理方式,它有一个构造函数来创建实体,然后它有公共方法,如 SpecifyNewRoute BookingService 用于ChangeDestination或BookNewCargo。 BookingService由 BookingFacade 使用,负责:
这个门面屏蔽了域层 - 模型,服务,存储库 - 从对用户界面和远程处理等问题的关注。
因此,在您的情况下,您的UI和WebService可以调用名为UpdateProduct的单一Facade方法(我不认为从服务或UI更新之间存在概念差异,因此您不需要像ChangeDestination这样的单独方法但这是你的电话)。 facade方法将调用 ProductService :: UpdateProduct 方法,该方法将调用 ProductModel :: UpdateProduct
现在我不知道你的应用程序的范围,所以这可能太多了但DDD无论如何都不适用于小型应用程序。就我个人而言,我把Eric Evans的书和NDD样本作为指导,但我没有看到摆脱一些复杂性的问题(例如忽略了外观),没有人比你更了解你的应用程序。