上面两张图片描述了我对洋葱架构的理解。它们与网上找到的图纸略有不同,因为它们解决了我找不到答案的议程。
据我所知,基础设施是诸如持久性、日志记录等之类的东西。我已经用斜体写了它们的示例。然而,很多时候,基础设施组件以及 UI 往往需要相互通信。UI 可能想要审计或记录一些东西,持久性项目可能需要记录一些东西。日志是洋葱架构中最难适应的项目之一,我的理解是,很多人对应该在哪里登录和不应该在哪里登录有不同的看法。
在我的第一幅图中,我在图表中放置了一个基础设施接口层,以允许在没有任何一个组件知道另一个组件的实现的情况下进行交叉通信。这是我在几个例子中看到的。
第二张图是我的偏好,它使用中介在基础设施、UI 之间进行交叉通信,它基本上是一种允许核心服务与基础设施间接通信的方式(假设服务接口在右图中称为核心服务)。记录器将自己订阅某些事件,数据库等也是如此。
第一个图只允许除外层(不包括依赖解析器)的所有层中的 pocos 和接口。第二个允许核心服务层中的域和业务逻辑,并允许基础设施层独立地完成工作。
我通过确保它们具有某种输出来证明基础设施组件的合理性。审计和日志记录通常会使用某种数据库,缓存通常会存储在内存中,而数据库可能应该被称为持久性。但是,有一个名为 AutoMapper 的库。我已经看到它在某些情况下被包装,因此它的接口可以进入核心以用于几乎任何基础设施,但对我来说似乎过于抽象。Automapper 有点像 Events 对象,因为所有基础设施都使用它在自身和域之间进行转换,但我不确定它是否适合该层,因为它不是服务。
问题:两者中哪一个最接近洋葱架构的定义,你会在哪里使用像自动映射器这样的工具,你认为尝试包装这样的东西是否过于抽象?
谢谢!