【问题标题】:Understanding onion architecture了解洋葱架构
【发布时间】:2014-10-15 18:42:19
【问题描述】:

Onion Architecture Mockups

上面是两张图片,描述了我对洋葱架构的理解。 它们与网上找到的图纸略有不同,因为它们解决了我无法找到答案的议程。

据我所知,基础设施是诸如持久性、日志记录等之类的东西。我已经用斜体写了它们的示例。然而,很多时候,基础设施组件以及 UI 往往需要相互通信。 UI 可能想要审计或记录一些东西,持久性项目可能需要记录一些东西。日志是洋葱架构中最难适应的项目之一,我的理解是,很多人对应该在哪里登录和不应该在哪里登录有不同的看法。

在我的第一幅图中,我在图表中放置了一个基础设施接口层,以允许在没有任何一个组件知道另一个组件的实现的情况下进行交叉通信。这是我在几个例子中看到的。

第二张图是我的偏好,它使用中介者在基础设施、UI 之间进行交叉通信,它基本上是一种允许核心服务与基础设施间接通信的方式(假设服务接口在右图中称为核心服务) .记录器将自己订阅某些事件,数据库等也会订阅。

第一个图只允许在除外层(不包括依赖解析器)的所有层中的 pocos 和接口。第二个允许核心服务层中的域和业务逻辑,并允许基础设施层独立完成工作。

我通过确保它们具有某种输出来证明基础架构组件的合理性。审计和日志记录通常会使用某种数据库,缓存通常会存储在内存中,而数据库可能应该被称为持久性。但是,有一个名为 AutoMapper 的库。我已经看到它在某些情况下被包装,因此它的接口可以进入核心以用于几乎任何基础设施,但对我来说似乎过于抽象。 Automapper 有点像 Events 对象,所有基础设施都使用它在自身和域之间进行转换,但我不确定它是否适合该层,因为它不是服务。

问题:两者中哪一个最接近洋葱架构的定义,您将在哪里适合像 auto mapper 这样的工具,您认为尝试包装这样的东西是否过于抽象?

谢谢!

【问题讨论】:

    标签: automapper onion-architecture


    【解决方案1】:

    我使用过 Auto Mapper 和 Onion Architecture。我们在 MVC Global.asax 文件中配置了 AutoMapper,该文件通常调用 App Start 目录中 AutoMapperConfig 类中的 Config 方法。

    关于您的图形,其中一个似乎有一个单独的层用于中介者和观察者模式。它们不一定是必需的,但这完全取决于您的方法。就像您可以在 Onion 架构或 Model-View-Presenter 或 Model-View-ViewModel 中使用模型-视图-控制器模式一样。他们只是耦合了不同的模式来合并一些额外的好处。

    这是我第一次遇到the Onion Architecture Jeffery Palermo。如果您想看到更纯粹的图形表示。

    【讨论】:

    • 你说得对,在我的第二张图中,我将设计模式嵌入到我的架构图中。事件只是另一个基础设施问题。我想我在这里问了两个问题:1)我如何保持基础设施代码分开,同时确保在数据库上运行时进行审计等事情而不使其成为业务问题。我认为基本上,这可以通过组合来实现。或者更好的是,使用面向方面的模式并允许在一个地方定义技术要求:组合根。 2)像automapper这样的工具适合哪里?
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 2014-06-22
    • 2013-01-31
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    相关资源
    最近更新 更多