领域驱动设计之体系架构模式交互过程与最佳实践

上一文主要讲了DDD体系架构以及每一层主要的作用,这篇主要描述各层之间如何进行交互,以及交互的最佳实现方式。

1.应用层某个应用层服务被界面层调用,开始启动。

2.对于需要新增领域对象的情况,应用层调用领域层中某个领域对象(聚合根)的构造函数或工厂创建出领域对象,然后调用领域对象的某些方法进行相关的业务操作,操作完成后,应用层服务将新创建的领域对象添加到仓储中。

3.对于需要修改领域对象的情况,应用层服务通过仓储获取领域对象,然后调用领域对象的某些方法进行相关的业务操作,操作完成后,应用层服务将新修改的领域对象添加到仓储中。

4.如果一个操作设计到多个领域对象,则应用层服务调用领域层的某个领域服务完成操作。

5.最后通知工作单元将仓储中的领域对象以事务的方式持久化到数据库中。

在实际的开发经验中,有以下几点需要特别说明:

1.一般通过应用层访问仓储,而且是使用领域层定义的仓储接口,具体仓储的实现调用可以通过IOC的机制在应用层通过服务定位器模式找到。

2.一般不要再领域层访问仓储,如果领域层中的领域对象或领域服务的业务逻辑处理确实需要访问仓储,建议不通过服务定位器的方式在领域层进行服务解析,而是应该在领域对象或领域服务的构造函数中传入仓储接口,具体是哪个仓储实现仍然在应用层通过服务定位器模式找到,这样能够保证领域层只关注业务,而不关注其他的方面。

3.一些界面需要获取的查询信息,不应该通过领域对象直接返回给应用层服务,然后应用层服务返回给界面。通常界面需要的信息可能来源于领域对象的一部分状态,也有可能来源于多个领域对象的组合,这时应该在应用层实现DTO。DTO定义的就是界面所需要显示的状态,应用层服务应该能够将DTO与领域对象间作映射、组合或转换,以更好的实现界面信息的展示。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏草根专栏

.NET Core TDD 前传: 编写易于测试的代码 -- 缝

举个例子, 如果一辆汽车在产出后没完成测试, 那么没人敢去驾驶它. 代码也是一样的, 如果项目未能进行该做的测试, 那么客户就不敢去使用它, 即使使用了也会遇到...

1197
来自专栏喵了个咪的博客空间

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

#phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)# ? ##前言## 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这...

3715
来自专栏华章科技

600万密码泄露之后,我们该如何保护自己的密码?

近日,乌云网曝出大麦网(damai.com)用户密码数据库在网上公开售卖,涉及用户多达600余万!

742
来自专栏Java技术栈

其实学 Java 就这两样东西!

1753
来自专栏FreeBuf

pyMagic:用python控制的Geek入门神器

原创作者:comover 大学四年快要结束了,这几年也学习了一点新的姿势。最近一直在跟国外的micropython项目,这个项目是由剑桥大学的理论物理学家(th...

4155
来自专栏java架构师

Hadoop学习19--推测式执行

  所谓推测式执行,就是计算框架判断,如果有一个task执行的过慢,则会启动备份任务,最终使用原任务+备份任务中执行较快task的结果。产生原因一般是程序bug...

2969
来自专栏玄魂工作室

CTF实战21 CTF题目练习和讲解三(讲解部分)

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

942
来自专栏何俊林

Android 插件化和热修复知识梳理

本文来自IAM四十二授权发布,IAM四十二的简书地址:http://www.jianshu.com/u/c6f7cfa366d9 概述 在Android开发中...

4479
来自专栏FH云彩

全新云彩APIV2发布

原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明转载自:全新云彩APIV2发布

1862
来自专栏王清培的专栏

.NET应用架构设计—表模块模式与事务脚本模式的代码编写

阅读目录: 1.背景介绍 2.简单介绍表模块模式、事务脚本模式 3.正确的编写表模块模式、事务脚本模式的代码 4.总结 1.背景介绍 要想正确的设计系统架...

21410

扫码关注云+社区

领取腾讯云代金券