我正在使用Jeffrey Palermo 描述的Onion Architecture设计一个 ASP.NET MVC 应用程序。
这是一个 ASP.NET MVC 2.0 项目,我要求使用专用视图模型对所有视图进行强类型化——我们不会将域模型传递给我们的视图。我们正在使用 AutoMapper 进行翻译——AutoMapper 在基础设施中是孤立的,Web 不知道也不关心 AutoMapper 正在被使用。
目前,我正在 Web 项目中定义 IViewModelMapping 接口——仅仅是因为该服务将由控制器使用,并且它可以直接访问自己的视图模型。通过这种方式,界面可以访问域模型(在核心中)和视图模型(在 Web 中)。
为了提供 IViewModelMapping 接口的实际实现,我在 Infrastructure 项目中创建了一个 ObjectMapping 命名空间,它将实际映射实现隔离到 onion 的 Intrastructure。为此,这将要求基础架构同时依赖于核心和 Web。
我的问题是:因为这两个项目在技术上都位于洋葱的郊区(在同一层)——是否允许一个项目依赖于该层中的另一个项目?有没有人注意到这种设计有任何潜在的缺陷?
另一种设计是将 IViewMapper 接口移动到 Core 中——但这是不可能的,因为 Core 无权访问 ViewModel 类。我也可以将视图模型移动到 Core,但我觉得它们不属于那里,因为它们特定于 UI 层。
提议的架构如下——注意基础设施依赖于Core AND Web。Web 保持隔离,只能访问核心业务逻辑。