我几个月来一直在摸不着头脑,而且我仍然能够令人满意地说服自己,我有正确的答案。我们有一个非常典型的情况,我们在应用程序的多个层之间存在依赖关系,其中每个层都在自己的程序集中。作为示例,我们的应用程序层使用存储库层来检索非常标准的数据。我的问题是,抽象(在这种情况下是接口)会在哪里生存?为什么?在给出的示例中,它应该在Application层或Repository层还是单独的抽象程序集中进行?
根据The Clean Architecture description中的图表和说明(不是我们特别坚持的内容),我已将它们放在应用层中,以便所有依赖项都指向内部,但我&# 39;我不确定这是否正确。我已经阅读了很多其他文章并查看了无数的例子,但是关于抽象应该在哪里进行推理的方式很少。
我已经看过this question但我不相信它会回答我的问题,除非当然实际的答案并不重要。
答案 0 :(得分:2)
它被称为依赖性倒置原则,因为从较高级别模块到较低级别的经典依赖性方向反转如下:
| HigherLevelClass -> RequiredInterface | <= LowerLevelClassImplementingTheInterface |
因此,反向依赖关系从较低级别模块指向较高级别模块的必需抽象。 由于客户端模块(您的应用程序层)需要某个较低级别的功能,相关的抽象(您的存储库接口)将放置在客户端模块附近。
我所知道的所有描述都使用包构造来解释这一点。 但是,我认为没有理由为什么模块或层不应该这样。
详情请参阅见:http://en.wikipedia.org/wiki/Dependency_inversion_principle