【发布时间】:2012-12-28 22:26:27
【问题描述】:
我有一个逻辑布局难题,但从这里开始是我的应用层:
- 表示/UI 层(Web API 或 MVC,真的可以是任何东西)
- 服务层(该层总体上很精简,充当域模型和存储库层的导体)
- 领域模型(这一层不乏味,模型类中既有数据又有行为)
- 存储库
就目前而言,图层设计得很好,流程也很直观。但是,我需要将纯模型数据塑造成几个特定的 XML 文档,以通过 .xsd 模式进行验证(模型类 not 为 XML 文档映射 1:1,或者我可以直接序列化对象到 XML)。对我来说,模型层应该不了解超出其当前设计的形状或结构;这是更高层的责任。
我的第一个想法是提供整形和逻辑,以通过 ViewModel 类从 Service 层中的域模型数据创建这些 XML 文档,以返回一个级别。我在这里使用术语“ViewModel”来纯粹表示用于更高层或表示的成形数据。但是,我读到的所有内容都说服务层不应包含 ViewModel:Should a service layer return view models for an MVC application? 和 How to pass complex ViewModel to Service Layer in ASP.NET MVC?
好的,请稍等片刻,让我的 MVC 层包含 ViewModel。我有这个问题。拥有服务层的全部原因是能够充当应用程序的外观或入口点,从而允许多种 UI 类型(WinForms、WPF、WebForms、MVC、WCF 等) .我需要 XML 整形逻辑可用于我连接到服务层的任何 UI。如果我把它放在 MVC/UI 层,如果我连接一个新的 UI,它就不再存在了。
现在我回到将 XML 整形类推回服务层。我也不认为这些类应该在域层上,因为这不是业务逻辑并且指示格式类型:XML,我不想要。最后,我不能在像基础设施层这样的垂直层中引入这个逻辑,因为现在这个层必须理解我的领域模型并且像行李一样随身携带。
根据Professional ASP.NET Design Patterns一书,在使用这种架构时有如下说明:“服务层的作用是充当应用程序的入口点; 有时这被称为外观。服务层为表示层提供强类型视图模型,有时称为表示模型。”我的服务层,因为这似乎是最合适的,我已经看到了这样的例子。
逻辑属于哪里?我想使用我的 1..n 个域模型类,使用各种数据构建一个 XML 文档,然后允许它对 UI/Presentation 层可用?谢谢!
【问题讨论】:
标签: asp.net-mvc architecture domain-driven-design