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