【问题标题】:Should ViewModels stay in UI layer or move it to another layer?ViewModel 应该留在 UI 层还是移动到另一个层?
【发布时间】:2014-06-20 15:52:50
【问题描述】:

我有 UI 层(使用 ASP.NET MVC)、BLL 层、DAL 层和模型层。模型层有 POCO 类,代表数据库中的表。

UI、BLL 和 DAL 层都有对模型层的引用。

在 UI 层中,我经常使用模型层中的 POCO 类来向用户展示一些东西。但是当用户可以使用表单做某事时,我通常会创建带有验证属性的 ViewModel。

我应该将 ViewModel 放在 UI 层还是将 ViewModel 移到 Model 层?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    这确实是一个偏好问题,但我更喜欢将我的模型类(映射到数据库)与 ViewModel 分开。这样我就不会混淆哪些映射到数据库,哪些不映射。

    【讨论】:

    • 我同意。我几乎总是将 ViewModel 放在我的解决方案的 UI 项目内的一个文件夹中——因为它们确实被那个特定的 UI 消耗了。同样,正如瑞恩所说,这是一个偏好问题。如果这些 ViewModel 在多个 UI 之间共享,那么为了组织起见,将它们放在模型项目中是有意义的。
    • Ok thx - 你说得对 - 我的 ViewModel 仅适用于 UI 项目,所以我会将它们放在 UI 项目中,而不是单独的项目中。 :)
    【解决方案2】:

    我个人在不同的项目中创建我的视图模型,并将它们包含在需要访问它们的所需层中。这样我就可以在其他项目中重用视图模型。

    我通常有这样的项目设置:

    MVC 项目 (UI)
    MVC 视图模型(UI/服务层) 服务层 + 逻辑层(存储库) 数据库模型(ORM(Telerik DataAccess)层)

    这样我可以将我所有的数据库模型隐藏在服务层之后,并且只在 UI 和服务层之间传递视图模型。

    但这是我喜欢的工作方式。我确信还有其他人可能不同意我的项目设置,但这对我来说似乎是合乎逻辑的。

    这真的取决于您的需求。如果您发现您正在将 DB 模型转换为 UI 层中的视图模型,那么我建议您将它们移出,以便您可以在服务层中进行所有这些转换。

    【讨论】:

      【解决方案3】:

      我将视图模型作为 UI 背后数据的转换器。我为每个页面制作了一个视图模型,以便该页面中的所有控件都可以绑定。对我来说,用各自的视图模型对页面进行分组是有意义的。它看起来像这样:

      或者更好的是,使用NestIn 之类的工具嵌套视图和视图模型文件:

      【讨论】:

        猜你喜欢
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 2023-04-07
        • 2011-01-18
        • 1970-01-01
        • 1970-01-01
        • 2018-12-30
        相关资源
        最近更新 更多