洋葱架构

24

我正在为即将到来的内部应用程序试验所提议的洋葱架构设置项目结构 (http://jeffreypalermo.com/blog/the-onion-architecture-part-3/)。

我遵循了他的指导方针,但是我需要对目前项目的结构进行一些验证。

在图表之前,有以下问题:

  1. 我认为引用都是正确的(根据箭头表示‘引用’的图表设置),但是需要一些验证。

  2. 我应该把什么放在我的依赖解析层?这里是 Helper 放置的地方吗?这个层参考了所有其他项目?

  3. Web 服务和 UI 如何与数据访问层(DAL)通信?(通过核心?如何?)

  4. 应该把什么放在哪里?[广泛的问题,我知道...]

简化后的概念图如下(文件夹代表命名空间):

enter image description here enter image description here


8
我认为将“接口(Interfaces)”放在“基础设施(Infrastructure)”里是不正确的。它应该是“核心(Core)”的一部分。 - Jaider
2个回答

7
我认为参考文献都正确(按照箭头表示“具有参考资料”的图表设置),但仍需进一步验证。看起来没问题,但在图表中插入依赖关系解析可能不是一个好主意。
2我认为这里应该放置依赖注入内容。
3根据Palermo的图表,它属于核心部分。在核心部分,您将拥有与DAL和领域模型交谈的存储库,以及处理存储库和领域模型的服务(而非Web服务)。UI / Web服务将主要与服务交流。
4同样,我认为答案在Palermo的图表中。但在我看来,当完全理解体系结构时,组织项目可以是不同且琐碎的事情。
一旦我了解了DDD和必要的设计模式,例如MVC,依赖注入,存储库/服务,ORM,洋葱架构就变得显然。

6
  1. 对于依赖关系的解析除外,它们是正确的。这些依赖关系应该反过来。
  2. 正如名称(和更正后的引用)所示,它的目的是托管某种IoC容器解决方案。这不是Helper类的地方,期望为解析目的提供Helper类。
  3. 核心定义了DAL或域服务的接口。DAL和WebServices实现这些接口。在UI中,您将通过已定义的接口使用DAL或Service实现。通过依赖关系解析组件(请查看“Inversion Of Control”或“Dependency Injection”的概念),将解析正确的实现。
  4. 如第3点所述,主要的事情是在Core中放置将在DAL和Web Services内实现的接口。在Core中,您将实现真正的业务模型。此模型可以通过已定义的接口(借助依赖关系解析组件的帮助)使用DAL和Web Services。

你确定依赖关系解析没问题吗?如果是这样,那不就意味着依赖关系在洋葱的内部而不是外部吗?这将意味着核心依赖于依赖关系解析程序集 - 这似乎不太对吧? - Darbio
对的,核心部分不应该依赖于 DR。但其他部分需要 DR 来获取核心接口的实现。例如在用户界面中:{ DR.Resolve<ISomeService>().CallserviceMethod(); } - rObiwahn
3
我不同意关于依赖项解析的观点,rObiwahn。DR 应该在外层,并引用内部层。通过说“DR.Resolve(ISomeService)”听起来像是服务定位器反模式。依赖项解析需要知道所有实现的位置,以便在需要时解析它们。 - Rowan Freeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接