asp.net mvc - 几乎相同的ViewModels

时间:2017-06-01 09:48:10

标签: c# asp.net-mvc asp.net-mvc-viewmodel

我正在使用ASP.NET MVC构建一个Web应用程序,我仍然是这项技术的初学者。

我了解到最佳做法是为每个View配备一个ViewModel。我能理解为什么这是一个好主意。然而,在我的情况下,它似乎创造了许多额外的工作。

我有一个名为Rule的模型。 它包含Id,Title,Description,LastModifiedDate,CreatedDate以及其他字段。

我有规则模型的编辑,创建和详细信息视图。

根据最佳实践,我必须为上述每个视图创建一个ViewModel。但上面视图的ViewModel几乎完全相同。唯一的区别之一是Create-ViewModel没有Id,但是Details和Edit ViewModel没有。除此之外,ViewModel几乎完全相同。也就是说,它们包含相同的属性和相同的DataAnnotation验证字段。

为什么我认为这很麻烦?假设我想要更改一些数据注释。例如。 chaneg a string属性的最大长度。如果我希望这样做,我必须在Rule模型,Create ViewModel和Edit ViewModel中这样做。同样,如果我想添加新属性,我必须在所有模型中这样做。

我这样做是对,还是可以简化?

4 个答案:

答案 0 :(得分:3)

这更像是一个实施决策而不是最佳实践规则。你必须考虑一些利弊:

每个视图的不同ViewModel

  • 仅修改与视图关联的ViewModel
  • 灵活性
  • 难以维护非常大的应用程序

重复使用ViewModel以获取不同的观看次数

  • 立即修改所有ViewModel
  • 更容易维护
  • 灵活性有限

我的建议是创建没有ID属性的基本RuleViewModel,并且编辑和详细信息操作会继承模型并添加其他列。

答案 1 :(得分:2)

从来没有规则为每个View创建ViewModel。这完全取决于您的架构。根据您的要求,如果您认为两个视图完全相同,则使用相同的ViewModel。

IMO不使用数据注释,如果可能,请使用Fluent Api。

答案 2 :(得分:0)

对于所有操作:添加,更新,删除 - 您可以使用一个视图模型 - Rule。你完全可以使用这个单个对象进行操作,对吗?

唯一的区别是显示多个Rule对象 - 列表视图页面,在这里你可能想要创建一个额外的视图模型,如RuleListViewModel,它将包含一个集合(IEnumerable<Rule>)对象和可能还有一些用于过滤的属性等。

答案 3 :(得分:0)

听起来您正在混合视图模型和业务对象。我通常会尝试将它们分开,因为它们用于不同的目的。

您的业务对象可以使用CRUD方法。您的视图模型可以具有公开对象的属性,并且实际上可以在需要时公开其他对象。

这样做可以保留一次性使用规则并使其非常易于维护。

但是,这实际上是一种设计选择,而不是“最佳实践”(让我们诚实地说)随风而变。