![领域驱动设计(Thoughtworks洞见)](https://wfqqreader-1252317822.image.myqcloud.com/cover/627/31532627/b_31532627.jpg)
上QQ阅读APP看书,第一时间看更新
依赖关系
代码目录结构并不能表达分层体系中各层的依赖关系,比如Domain层是不应该依赖于其它任何一层的。维护各层的依赖关系是至关重要的,很多团队在实施的过程中都没有能够建立起这样的工程纪律,最后造成代码结构的混乱,领域模型也被打破。
根据分层架构的规则,我们可以看到示例中的代码结构如下图。
![](https://epubservercos.yuewen.com/3E9DC1/17069897204642706/epubprivate/OEBPS/Images/Figure-P20_5899.jpg?sign=1739260452-p0fyKvI2FMCzG7ElIYA0RVSx8lssi0kh-0-c1c2c098f87aa68f4f66641f1ef5d2ba)
Domain是不依赖于任何的其它对象的。Repositories是依赖于Domain的,实现如下:引用了model.h。
![](https://epubservercos.yuewen.com/3E9DC1/17069897204642706/epubprivate/OEBPS/Images/Figure-P21_11533.jpg?sign=1739260452-UGnnsGbgwRFIjACE0F0NxKgIkoXY82xI-0-c5adca3d1e2b6699da97ceb053ecf073)
Services是依赖于Domain和Repositories的,实现如下:引用了model.h和repository.h
![](https://epubservercos.yuewen.com/3E9DC1/17069897204642706/epubprivate/OEBPS/Images/Figure-P21_11534.jpg?sign=1739260452-UIjyMNm0tudSGRT3RPXx8tXa6D05bvBu-0-b7216ecf5e108fd028f1466ef2d58eb0)
![](https://epubservercos.yuewen.com/3E9DC1/17069897204642706/epubprivate/OEBPS/Images/Figure-P21_11535.jpg?sign=1739260452-w4AMk9VCIXGQ1UKkvglM4XsiS158pTEA-0-f851d8de60b7e966412183469cdebc5f)
为了维护合理的依赖关系,依赖注入(Depedency Injection)是需要经常采用的实现模式,它作为解耦合的一种方法相信大家都不会陌生,具体定义参见这里。
在测试构建时,我们利用了一个IoC框架(依赖注入的实现)来构造了一个Api,并且把相关的依赖(如CargoService)注入给了这个Api。这样既没有破坏Interface和Service的单向依赖关系,又解决了测试过程中Api的实例化要求。