![领域驱动设计(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=1739272690-QR8hBilhkMaTTUnLo7wLzI7RkAfOmGCO-0-eaac1a56fc2d17b8b262476e1413fa67)
Domain是不依赖于任何的其它对象的。Repositories是依赖于Domain的,实现如下:引用了model.h。
![](https://epubservercos.yuewen.com/3E9DC1/17069897204642706/epubprivate/OEBPS/Images/Figure-P21_11533.jpg?sign=1739272690-4erSzaJBVefgjmBKZGnAgO881UJ4q371-0-f5953e457ec313d159de3a64d46440b9)
Services是依赖于Domain和Repositories的,实现如下:引用了model.h和repository.h
![](https://epubservercos.yuewen.com/3E9DC1/17069897204642706/epubprivate/OEBPS/Images/Figure-P21_11534.jpg?sign=1739272690-kDv88zm1Irgsf8rV59fxCIRqYDRipmb0-0-c368b4dd61c14e7707c040f9b99acf52)
![](https://epubservercos.yuewen.com/3E9DC1/17069897204642706/epubprivate/OEBPS/Images/Figure-P21_11535.jpg?sign=1739272690-V9cUIhHq0i4A8V5YeuZYlW7j2uXCcrSc-0-8b27920516788b017c36fc6fd594d5d5)
为了维护合理的依赖关系,依赖注入(Depedency Injection)是需要经常采用的实现模式,它作为解耦合的一种方法相信大家都不会陌生,具体定义参见这里。
在测试构建时,我们利用了一个IoC框架(依赖注入的实现)来构造了一个Api,并且把相关的依赖(如CargoService)注入给了这个Api。这样既没有破坏Interface和Service的单向依赖关系,又解决了测试过程中Api的实例化要求。