领域驱动设计的实践经验分享之分层架构.docVIP

领域驱动设计的实践经验分享之分层架构.doc

  1. 1、本文档共6页,可阅读全部内容。
  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文档。上传文档
查看更多
领域驱动设计的实践经验分享之分层架构

以前做了个简单的论坛但是之前的版本都没有考虑过架构设计。所以想在第三个版本中应用分层架构DDDEDA架构重新设计一下我的论坛。经过半年的努力终于整出了一个让自己比较满意的架构了但是也仅仅是一个Demo还不能真正使用但对于说明架构设计已经足矣。源代码下载地址/netfocus/ProductName.rar 由于本人接触领域驱动设计的时间还很短对于如何设计领域对象还没有丰富的经验。所以我希望大家看了我的源代码中的领域层中的领域对象后不要笑话我呵呵。因为我本文主要想向大家展示的是我对分层架构的思考和自己的想法我想大家自己的想法才是最重要的吧我本人也很注重思想、思考不要老是讨论别人的老外的架构有多好多好我们要有自己的思想。所以大家在看我文章和源代码时不能过分专注于一点上而应该从总体上来看待。 开发工具Visual Studio 2010 项目结构图 说明 1关于项目的命名规则。假设现在有一个公司要做一个项目我觉得比较好的项目命名方式为以CompanyName.ProductName作为前缀基础类库命名为Common产品中的某个子应用模块则可以命名为CompanyName.ProductName.Modules.ForumCompanyName.ProductName.Modules.Blog等。然后每个模块还可以根据模块的分层设计分出不同的Project比如论坛的应用层可以命名为CompanyName.ProductName.Modules.Forum.ApplicationService等。由于我做的只是一个展示架构的Demo所以没有用具体的CompanyNameProductName。我觉得在开发阶段我们可以不使用最后的名字到了最后项目快完成时再做统一全局替换即可。 2架构设计介绍。 一个经典的基于领域驱动设计Domain Driven Design 的应用分为下面的层次 我的项目也同样采用上面的分层架构对于上面每一层的功能和职责我想大家应该都比较清楚了。我主要想和大家分享一下基于这样的分层架构下我的实现方式 先来看一下各个层中包含的主要元素。 说明 界面层User Interface or Presentation Layer没有什么特别的因为我是采用ASP.NET MVC来最为界面层所以会包含Page、Control、Controller、View ObjectVO。前三个大家都很熟了至于View Object相当于Page或Control的Model负责提供数据给界面以及保存界面录入的数据。View Object还有一个很重要的功能就是会对界面提交的数据做简单的数据有效性验证但不会包含任何的业务逻辑验证。任何业务逻辑验证会由领域层来完成。界面层只会和应用层或基础层打交到不会和领域层有任何关系。界面层的任何查询或行为都通过应用层实现界面层通过构建应用层中的某个Request然后发送到应用层应用层完成相应操作或查询后返回一个Reply给界面层。如果是查询的操作则Reply中会包含一个或多个DTO界面层将DTO转换为VO然后显示。 应用层Application Layer真正意义上的非常薄的一层该层由一些应用服务来完成所有功能。为了性能方面的考虑在学习了命令查询职责分离Command Query Responsibility SeparationCQRS的思想后我觉得应该将查询和命令的实现分离这样可以对这两部分更好的进行单独设计。因此在我的实现中对于查询的Request会委托给一个专门负责查询的服务去完成对于命令的Request会委托给一个专门负责处理命令的领域服务去完成。另外只要是有命令处理的请求就会最终用事务的方式来提交所有的修改 领域层Domain Layer我设计的最具特色的一层。大家知道经典的领域驱动设计领域层会包含领域服务、实体、值对象、聚合根、工厂仓储这些概念。但是在我看了一些资料和自己独立思考后发现用这样的方式来组织领域逻辑在我看来不是太好因为1整个模型没有体现出事物的相互协作的特性也就是没有消息机制2用不太自然的方式来组织相互作用的各个实体比如Aggregate的概念在我看来就是一个不该有的概念。在真实的世界中我认为最好的软件就是我们自己那就是“人类”。想想看人类是亿万年才进化出来的地球上最高级的生物他的内部结构绝对是一个非常好的”软件“。大家都知道人有大脑、皮肤、细胞、神经元。如果把人和一个领域模型想比较那么人的皮肤相当于领域模型暴露给外面的Domain Service人的细胞相当于领域模型中的各个Domain Entity人的大脑相当于领域模型的一个”中央事件处理器“Event Bus人的神经元相当于领域模型中的各种消息Domain Event也就是说一个真正的符合客观实际的领域模型应该包含Domain S

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档