【问题标题】:Onion Architecture洋葱架构
【发布时间】:2011-10-09 22:38:19
【问题描述】:

我正在为即将推出的内部应用程序设置项目结构,以试用 Palermo (http://jeffreypalermo.com/blog/the-onion-architecture-part-3/) 提出的 Onion 架构。

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

在图表之前,问题:

  1. 我认为参考资料都是正确的(按照图中箭头表示“有参考资料”的图表进行设置) 但一些验证会很好。

  2. 我应该在我的依赖解析层中添加什么?这是哪里 帮手去?这对所有其他项目都有参考?

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

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

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

【问题讨论】:

  • 我认为将Interfaces 放在Infrastructure 内部是错误的。它应该是Core 的一部分。

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


【解决方案1】:

我认为参考资料都是正确的(按照图中箭头表示“有参考资料”的图表进行设置),但进行一些验证会很好。

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

我应该在我的依赖解析层中添加什么?这是Helper去的地方吗?这对所有其他项目都有参考吗?

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

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

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

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

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

一旦我了解了 DDD 和必要的设计模式(例如 MVC、依赖注入、存储库/服务、ORM),洋葱架构对我来说就变得显而易见了。

【讨论】:

    【解决方案2】:
    1. 是的,期待依赖解决方案。这些依赖关系应该反过来。
    2. 顾名思义(和更正的引用)暗示它的目的是托管 某种 IoC 容器解决方案。这不是帮助者的地方 类,期望帮助类用于解析目的。
    3. 核心定义了 DAL 或域服务的接口。 DAL 和 WebServices 实现了这些接口。在您将使用的 UI 内部 通过定义的接口实现 DAL 或服务。 正确的实施将通过 依赖解析组件(看看概念 “控制反转”或“依赖注入”)。
    4. 如 3. 中所述,主要的是,在 Core 中,您将要在 DAL 和 Web 服务中实现的接口放入其中。在 Core 中,您将实现您真正的业务模型。该模型可以通过定义的接口使用 DAL 和 Web 服务(借助 Dependency Resolution 组件)。

    【讨论】:

    • 你确定依赖解析吗?如果是这样,这是否意味着依赖关系将在洋葱的内部,而不是外部?这意味着核心依赖于依赖解析程序集——这似乎不对?
    • 对,核心应该不依赖于DR。但其他人需要 DR 来实现核心接口:UI 中的示例:{ DR.Resolve().CallserviceMethod(); }
    • 我不同意依赖解决方案,rObiwahn。 DR 应该在外层并参考内层。说DR.Resolve(ISomeService) 听起来像是服务定位器反模式。依赖解析需要知道所有实现在哪里,以便在需要时解析它们。
    猜你喜欢
    • 2014-10-15
    • 1970-01-01
    • 2014-06-22
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 2023-04-02
    • 2013-06-30
    相关资源
    最近更新 更多