在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; }
}
在此示例中,FirstName
和LastName
将合并为一个字符串(Name
),并且还会有一个"停用"表单上的复选框将导致此人失效。
在Controller中,我们从PersonViewModel
对象填充Person
对象。但是,在视图的第一行,我们声明此视图的模型为PersonViewModel
。
@model PersonViewModel
模型实际上是绑定到View的类(至少就ASP.NET MVC而言)?
如果我的模型实际上是PersonViewModel
类,我可以只调用此类PersonModel
吗?或者这是错误和误导?
在我看来,这更易于编写(和阅读),并且从ASP.NET MVC开始向开发人员解释也更容易。完全忽略ViewModel术语是不是更好,这可能与MVVM模式中的ViewModel混淆了?
答案 0 :(得分:1)
我认为这个问题没有好的答案。您提供的两个名称都是自解释的,可以使用。
罗伯特·C·马丁(Robert C. Martin)在他的书中写道,在这种情况下,最重要的是一致性和标准化。如果您在少数开发人员的团队中工作,您应该使用常见的方法解决此类问题,并始终使用相同的代码模式以避免混淆。因为这种混乱是浪费开发人员的时间。
我会向您推荐这本关于清洁代码的Clean Code: A Handbook of Agile Software Craftsmanship精彩书籍,您可以在这里找到许多问题的答案和建议。
在我目前的团队中,我们会使用这样的约定:
PersonDom
- 人员数据对象模型
Person
- 人物视图模型
答案 1 :(得分:1)
当然这个问题没有绝对的答案, 会议的内容""那是" PersonViewModel"是一个基于" Person" class,但是要在MVC视图中使用。 即使在基本的MVC项目中,你也有LoginViewModel等......所以对于新的mvc开发人员来说也应该是可以理解的。
仅仅使用PersonModel,会让人感到困惑,因为" Person"已经是模型了,为什么要命名一个PersonModel类?没有意义。 如果要缩短它,则应使用PersonView。 (但同样,约定是PersonViewModel)