【问题标题】:Can I shape data into ViewModels in my Service Layer?我可以在我的服务层中将数据塑造成 ViewModel 吗?
【发布时间】:2012-12-28 22:26:27
【问题描述】:

我有一个逻辑布局难题,但从这里开始是我的应用层:

  1. 表示/UI 层(Web API 或 MVC,真的可以是任何东西)
  2. 服务层(该层总体上很精简,充当域模型和存储库层的导体)
  3. 领域模型(这一层不乏味,模型类中既有数据又有行为)
  4. 存储库

就目前而言,图层设计得很好,流程也很直观。但是,我需要将纯模型数据塑造成几个特定的​​ 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


    【解决方案1】:

    恕我直言,我会说您将这些 XML 整形类放入您的服务层的直觉似乎是正确的,它绝对不属于 UI 层,因为您需要它可用于不同类型的 UI。为它们创建一个单独的层似乎是一种矫枉过正。将它们放在您的数据访问类旁边似乎也不正确。

    我认为你应该按照自己的直觉去做这个。如果您在某个地方查看此代码并且认为它不合适,那么您可以简单地将其移动到您认为合适的地方。事先好好考虑一下很好,但我会说不要挂断电话。开始编码,时不时退后一步,寻找看起来不合适的东西。 随着项目的形成,您必须不断地重构代码!

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 2018-05-20
      • 2017-10-21
      • 1970-01-01
      • 2011-02-05
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      相关资源
      最近更新 更多