洋葱建筑

我正在为即将到来的内部应用程序设置一个项目结构,该应用程序试验了Palermo提出的Onion Architecture( http://jeffreypalermo.com/blog/the-onion-architecture-part-3/ )。

我遵循他的指导方针,但到目前为止我需要对项目结构进行一些validation。

在图表之前,问题:

  1. 我认为参考文献都是正确的(根据图表设置,箭头表示’有参考’),但有些validation会很好。

  2. 我应该在依赖性解析层中添加什么? 这是帮助者去的地方吗? 这引用了所有其他项目?

  3. Web服务和UI如何与DAL通信? (通过核心?怎么样?)

  4. 应该去哪里? [我知道的广泛问题……]

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

在此处输入图像描述在此处输入图像描述

我认为参考文献都是正确的(根据图表设置,箭头表示’有参考’),但有些validation会很好。

1它看起来不错,但我不确定将依赖项解析插入到图表中是个好主意。

我应该在依赖性解析层中添加什么? 这是帮助者去的地方吗? 这引用了所有其他项目?

2我相信dependency injection的东西会在这里。

Web服务和UI如何与DAL通信? (通过核心?怎么样?)

3根据巴勒莫的图表,它是核心。 在核心,您将拥有与DAL和域模型以及处理存储库和域模型的服务(而不是Web服务)的存储库。 UI / Web服务将主要与服务进行通信。

应该去哪里? [我知道的广泛问题……]

4同样,我认为答案在巴勒莫的图表中。 但在我看来,当对架构有充分的了解时,组织项目可能会有所不同而且微不足道。

一旦我理解了DDD和必要的设计模式,如MVC,dependency injection,存储库/服务,ORM,洋葱架构就变得很明显了。

  1. 是的,他们期待依赖性解决方案。 这些依赖应该是另一种方式。
  2. 正如名称(和更正的参考文献)暗示它的目的是托管某种IoC容器解决方案。 它不是Helper类的地方,期望帮助类用于解决目的。
  3. Core定义了DAL或域服务的接口。 DAL和WebServices实现了这些接口。 在UI中,您将通过定义的接口使用DAL或Service实现。 通过依赖性解析组件的帮助可以解决正确的实现(查看“控制反转”或“dependency injection”的概念)。
  4. 如3.中所述,主要的是,在Core中,您将放置将在DAL和Web Services中实现的接口。 在Core中,您将实现您的真实业务模型。 此模型可以通过定义的接口(在依赖关系解析组件的帮助下)使用DAL和Web服务。