上一文主要讲了DDD体系架构以及每一层主要的做用,这篇主要描述各层之间如何进行交互,以及交互的最佳实现方式。数据库
1.应用层某个应用层服务被界面层调用,开始启动。架构
2.对于须要新增领域对象的状况,应用层调用领域层中某个领域对象(聚合根)的构造函数或工厂建立出领域对象,而后调用领域对象的某些方法进行相关的业务操做,操做完成后,应用层服务将新建立的领域对象添加到仓储中。函数
3.对于须要修改领域对象的状况,应用层服务经过仓储获取领域对象,而后调用领域对象的某些方法进行相关的业务操做,操做完成后,应用层服务将新修改的领域对象添加到仓储中。设计
4.若是一个操做设计到多个领域对象,则应用层服务调用领域层的某个领域服务完成操做。对象
5.最后通知工做单元将仓储中的领域对象以事务的方式持久化到数据库中。接口
在实际的开发经验中,有如下几点须要特别说明:事务
1.通常经过应用层访问仓储,并且是使用领域层定义的仓储接口,具体仓储的实现调用能够经过IOC的机制在应用层经过服务定位器模式找到。开发
2.通常不要再领域层访问仓储,若是领域层中的领域对象或领域服务的业务逻辑处理确实须要访问仓储,建议不经过服务定位器的方式在领域层进行服务解析,而是应该在领域对象或领域服务的构造函数中传入仓储接口,具体是哪一个仓储实现仍然在应用层经过服务定位器模式找到,这样可以保证领域层只关注业务,而不关注其余的方面。构造函数
3.一些界面须要获取的查询信息,不该该经过领域对象直接返回给应用层服务,而后应用层服务返回给界面。一般界面须要的信息可能来源于领域对象的一部分状态,也有可能来源于多个领域对象的组合,这时应该在应用层实现DTO。DTO定义的就是界面所须要显示的状态,应用层服务应该可以将DTO与领域对象间做映射、组合或转换,以更好的实现界面信息的展现。方法
欢迎加入QQ讨论群:309287205