MVC 如何与 Onion 架构共存?

How can MVC coexist with the Onion architecture?

我看到有人建议将 MVC 与洋葱架构一起实施。 但两者如何共存呢?它们不是两种截然不同的架构吗?例如,洋葱设计中的控制器在哪里?

我了解不止一种设计模式的组合,因为它们服务于不同的目的(行为、创建等),可以在系统的不同模块中独立实现,但我不知道如何实现两种不同的架构。

MVC 将存在于洋葱的外部并负责视图/API 关注点,将任何域逻辑委托给洋葱中间的域。

想象一下有人访问您的主页 - 这将由控制器处理,该控制器将 return 视图 - 模型将是视图所需的任何信息。如果您需要一些域逻辑(假设主页上显示了一些特别优惠),控制器会将其委托给域——逻辑不会在控制器本身内部。类似地,域将 return 某种域对象,然后通常需要映射到模型以供视图使用。然后在响应中 return 编辑此视图。

如果您还没有读过,请阅读六边形架构,因为它的想法基本相同。

"onion architecture"主要适用于模型层及其包含的各种类型的结构(服务、存储库、域对象、映射器、工作单元等)。

你最终也会得到各种自定义结构,比如你最终调用 "adapters" 和 "generators" 的东西,或者与业务逻辑相关但不适合任何特定内容的东西的各种其他名称标准。但它们最终都处于(希望)不同的层中。

但这就是它的范围。控制器(应该)是非常简单的结构。并且视图只是稍微复杂一点......并且假设您实际使用 presentation objects.

TL;DR: 没有什么可以阻止 MVC 与洋葱架构共存,但 MVC 最终将成为最大规模的主要架构。