洋葱建筑

时间:2011-07-21 05:32:10

标签: c# design-patterns domain-driven-design onion-architecture

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

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

在图表之前,问题是:

  1. 我认为引用都是正确的(根据图表设置箭头表示'引用') 但有些验证会很好。

  2. 我应该在依赖关系解析层中添加什么?这是在哪里 帮手走了吗?这引用了所有其他项目?

  3. 网络服务&用户界面,与DAL沟通? (通过核心?如何?)

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

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

    enter image description here enter image description here

2 个答案:

答案 0 :(得分:7)

  

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

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

  

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

2我相信依赖注入的东西会在这里。

  

网络服务&用户界面,与DAL沟通? (通过核心?如何?)

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

  

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

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

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

答案 1 :(得分:6)

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