23

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

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

在图表之前,问题:

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

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

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

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

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

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

4

2 回答 2

7

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

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

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

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

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

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

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

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

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

于 2011-07-21T07:55:01.233 回答
6
  1. 是的,他们是,期待依赖解决方案。这些依赖关系应该反过来。
  2. 正如名称(和更正的引用)所暗示的那样,它的目的是托管某种 IoC 容器解决方案。它不是帮助类的地方,期望帮助类用于解决目的。
  3. 核心定义了 DAL 或域服务的接口。DAL 和 WebServices 实现了这些接口。在 UI 内部,您将通过定义的接口使用 DAL 或服务实现。正确的实现将通过依赖解决组件的帮助来解决(看看“控制反转”或“依赖注入”的概念)。
  4. 如 3. 中所述,主要的是,在 Core 中您将要在 DAL 和 Web 服务中实现的接口。在 Core 中,您将实现您真正的业务模型。该模型可以通过定义的接口(在依赖解析组件的帮助下)使用 DAL 和 Web 服务。
于 2011-07-21T07:44:48.447 回答