gpt4 book ai didi

asp.net-mvc - Onion架构同层依赖: Infrastructure and Web communicating

转载 作者:行者123 更新时间:2023-12-03 07:35:08 24 4
gpt4 key购买 nike

我正在使用 Onion Architecture 设计一个 ASP.NET MVC 应用程序杰弗里·巴勒莫 (Jeffrey Palermo) 描述。

这是一个 ASP.NET MVC 2.0 项目,我要求所有 View 都使用专用 View 模型进行强类型化——我们不会将域模型传递给我们的 View 。我们使用 AutoMapper 进行转换——AutoMapper 在基础设施中是隔离的,Web 不知道也不关心 AutoMapper 正在被使用。

目前,我正在 Web 项目中定义 IViewModelMapping 接口(interface) - 只是因为该服务将由 Controller 使用,并且它可以直接访问自己的 View 模型。这样,界面就可以访问域模型(在 Core 中)和 View 模型(在 Web 中)。

为了提供 IViewModelMapping 接口(interface)的实际实现,我在基础设施项目中创建了一个 ObjectMapping 命名空间,它将实际的映射实现隔离到洋葱的内部结构。为此,这将要求基础设施同时依赖于核心和 Web。

我的问题是:由于这两个项目在技术上都位于洋葱的外围(在同一层中)——是否允许一个项目依赖于该层中的另一个项目?有人注意到这种设计有任何潜在的缺陷吗?

另一种设计是将 IViewMapper 接口(interface)移至 Core 中 —— 但这是不可能的,因为 Core 无法访问 ViewModel 类。我还可以将 View 模型移至 Core,但我觉得它们不属于那里,因为它们特定于 UI 层。

建议的架构如下 - 请注意,基础设施依赖于核心和 Web。 Web 保持隔离,只能访问核心业务逻辑。

http://www.matthidinger.com/images/onion-arch.png

最佳答案

您不希望基础架构依赖于 UI(Web),这是正确的,但我有时会违反该规则。

我想用 Map() 方法创建 IMapper,而不是 IViewModelMapping。然后,该接口(interface)可以具有可能与 View 模型映射有关的实现,或者可能只是常规映射。无论哪种方式,该接口(interface)都可以位于 Core 中,因为它在语义上不绑定(bind)到任何类型的模型。

很棒的图形。我希望我回答了你问题的实质。洋葱架构的总体理念是将业务逻辑和模型保留在应用程序的中间(核心),并将依赖项尽可能向外推。

关于asp.net-mvc - Onion架构同层依赖: Infrastructure and Web communicating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com