洋葱建筑

Dar*_*bio 22 c# design-patterns domain-driven-design onion-architecture

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

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

在图表之前,问题:

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

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

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

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

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

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

Tae*_*hin 7

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

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

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

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

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

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

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

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

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


小智 6

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

  • 我不同意依赖解决方案rObiwahn.DR应位于外层并引用内层.通过说"DR.Resolve(ISomeService)",它听起来像服务定位器反模式.依赖性解析需要知道所有实现的位置,以便它可以在需要时解决它们. (3认同)