【问题标题】:Can I shorten PersonViewModel to PersonModel?我可以将 PersonViewModel 缩短为 PersonModel 吗?
【发布时间】:2015-03-07 23:29:26
【问题描述】:

在 MVC 理论中,模型是业务领域类。例如,我们可以有一个Person 类:

public class Person
{
    public int Id { get; set; } 
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

在 ASP.NET MVC 中,经常使用 ViewModel 类。这个类可以定制以适应特定的视图:

public class PersonViewModel 
{
    public int Id { get; set; } 
    public string Name { get; set; }
    public bool Deactivate { get; set; }
}

在此示例中,FirstNameLastName 将组合为一个字符串 (Name),并且表单上还会有一个“停用”复选框,这将导致此人停用。

在 Controller 中,我们从 Person 对象填充 PersonViewModel 对象。但是,在 View 的第一行,我们声明这个 View 的 ModelPersonViewModel

@model PersonViewModel

Model 实际上不是绑定到 View 的类吗(至少就 ASP.NET MVC 而言)?

如果我的模型实际上是 PersonViewModel 类,我可以将这个类称为 PersonModel 吗?或者这是错误的和误导性的?

在我看来,这更容易编写(和阅读),而且向刚开始使用 ASP.NET MVC 的开发人员解释起来也更容易。完全省略 ViewModel 术语不是更好吗,它会与 MVVM 模式中的 ViewModel 混淆?

【问题讨论】:

  • 当您使用“PersonViewModel”时,这是 100% 确定您正在将此模型用于视图,而 PersonModel 可能会误导
  • 我认为PersonViewModel 在定义意图方面比PersonModel 更清晰(可能与数据/域模型混淆)。最重要的是保持一致。
  • @StephenMuecke - 我同意“PersonViewModel”毕竟是更好的方法。如果您将您的评论重新发布为答案,我会将其标记为已接受。
  • @ZivWeissman - 如果您还想重新发布您的评论作为答案,我会投票或标记为已接受。

标签: asp.net-mvc


【解决方案1】:

当然,这个问题没有绝对的答案, 约定“说”的是“PersonViewModel”是一个基于“Person”类的类,但要在 MVC 视图中使用。 即使在基本的 MVC 项目中,您也有 LoginViewModel 等......所以对于新的 mvc 开发人员来说也应该是可以理解的。

仅仅使用PersonModel,因为“Person”已经是一个模型,所以为什么要命名一个类PersonModel呢?没有意义。 如果你想缩短它,你应该使用 PersonView。 (但同样,约定是 PersonViewModel)

【讨论】:

    【解决方案2】:

    我认为这个问题没有好的答案。您提供的两个名称都是不言自明的,可以使用。

    正如 Robert C. Martin 在他的书中所写,在这种情况下,最重要的是一致性和标准化。如果您在少数开发人员的团队中工作,您应该使用通用方法来解决此类问题,并始终使用相同的代码模式以避免混淆。因为这种混乱是在浪费开发人员的时间。

    我会向您推荐这本 Clean Code: A Handbook of Agile Software Craftsmanship 关于干净代码的精彩书籍,您可以在其中找到许多此类问题的答案和建议。


    在我目前的团队中,我们会使用这样的约定:

    PersonDom - 人物数据对象模型
    Person - 人物视图模型

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 2011-07-22
      • 2020-11-05
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      相关资源
      最近更新 更多