网站大量收购闲置独家精品文档,联系QQ:2885784924

聚合仓库与工厂傻分不清楚海量资源.pdfVIP

聚合仓库与工厂傻分不清楚海量资源.pdf

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

本文由简悦SimpRead转码,原文地址

上一讲,我们知道了,要将领域模型最终转换为程序设计,可以到3种类型的对象设计,即服务、

实体与值对象,然后进行一些贫血模型与充血模型的设计思路。但这远远不够,还需要有聚合、仓库与

工厂的设计。

聚合的设计思路

聚合是领域驱动设计中一项非常重要的设计与概念,它表达的是真实世界中那些整体与部分的关系,比

如订单与订单单与表单明细、与明细。以订单为例,在真实世界中,订单与订单明细

本来是同一个事物,订单明细是订单中的一个属性。但是,由于在关系型数据库中没有办法在一个字段

中表达一对多的关系,因此必须将订单明细设计成另外一张表。

尽管如此,在领域模型的设计中,我们又将其还原到真实世界中,以“聚合”的形式进行设计。在领域模

型中,即将订单明细设计成订单中的一个属性,具体代码如下:

publicclassOrder{

privateSetItemsitems;

publicvoidsetItems(SetItemitems){

this.items=items;

}

publicSetItemgetItems(){

returnthis.items;

}

……

}

有了这样的设计,在创建订单的时候,将不再单独创建订单明细了,而是将订单明细创建在订单中;在

保存订单的时候,应当同时保存订单表与订单,并放在同一事务中;在查询订单时,应当同时查

询订单表与订单,并将其装配成一个订单对象。这时候,订单就整体在进行操作,不需

要再单独去操作订单明细。

也就是说,对订单明细的操作是封装在订单对象的设计实现。对于客户程序来说,去使用订单对象

就好了,这就包括了作为属性去订单对象中的订单明细,而不再需要关注它是如何操作的。

按照以下思路进行的设计就是聚合:

当创建或更新订单时,在订单对象中填入或更新订单的明细就好了;

当保存订单时,只需要将订单对象作为整体去保存,而不需要关心订单数据是怎么保存的、保存到

哪几张表中、是不是有事务,保存数据库的所有细节都封装在了订单对象;

当删除订单时,删除订单对象就好了,至于如何删除订单明细,是订单对象的实现,外部的程

序不需要关注;

当查询或装载订单时,客户程序只需要根据查询语句或ID查询订单对象就好了,查询程序会在查

询过程中自动地去补填订单对应的订单明细。

聚合体现的是一种整体与部分的关系。正是因为有这样的关系,在操作整体的时候,整体就封装了对部

分的操作。但并非所有对象间的关系都有整体与部分的关系,而那些不是整体与部分的关系是不能设计

成聚合的。因此,正确地识别聚合关系就变得尤为重要。

所谓的整体与部分的关系,就是当整体不存在时,部分就变得没有了意义。部分是整体的一个部分,与

整体有相同的生命周期。比如,只有创建了这张订单,才能创建它的订单明细;如果没有了这张订单,

那么它的订单明细就变得没有意义,就需要同时删除掉。这样的关系才具备整体与部分的关系,才是聚

合。

譬如:订单与用户之间的关系就不是聚合。因为用户不是创建订单时才存在的,而是在创建订单时早就

存在了;当删除订单时,用户不会随着订单的删除而删除,因为删除了订单,用户依然还是那个用户。

那么,饭店和菜单的关系是不是聚合关系呢?关键要看系统如何设计。如果系统设计成每个饭店都有各

不相同的菜单,每个菜单都是隶属于某个饭店,则饭店和菜单是聚合关系。这种设计让各个饭店都有

“宫保鸡丁”,但每个饭店都是各自不同的“宫保鸡丁”,比如在描述、或价格上的不同,甚至在数据

库中也是有各不相同的记录。这时,要查询菜单就要先查询饭店,离开了饭店的菜单是没有意义的。

但是,饭店和菜单还可以有另外一种设计思路,那就是所有的菜单都是公用的,去每个饭店只是选择有

还是没有这个菜品。这时,系统中有一个菜单对象,“宫保鸡丁”只是这个对象中的一条记录,其他各个

饭店,如果他们的菜单上有“宫保鸡丁”,则去这个对象,否则不。这时,菜单就不再

文档评论(0)

182****0328 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档