ASP.NET MVC - 视图模型设计

3

我在我的控制器上有一个创建(Create)和编辑(Edit)的操作。

我为每个操作都有一个视图模型(viewmodel),这两个视图模型大约有15个属性。其中10个属性对于两个模型都是相同的,其余的则不同。

我的问题是:我应该创建一些具有共同属性的基本模型(保持DRY),还是我不需要关心这个?

4个回答

4
这几乎肯定要取决于您所处的实际情况。最重要的问题是:这些共享属性是否形成了某种基本实体?如果答案是肯定的,那么使用基类可能是安全的。如果不是,我会避免使用它,并将属性放在各个模型上。
如果您在创建视图模型中省略了一些在编辑视图中变得可编辑的属性,则共享的属性可能不构成某种基类,因此应避免使用基视图模型方法。如果额外的属性只是辅助属性,例如选择列表,则可以安全地使用具有公共属性的基本模型。

1

你一定要关注这个问题。编写良好、干净的代码不仅有益于灵魂,而且我们都知道每当你编写糟糕的代码时,上帝就会杀死一只小猫咪。:( 我们可不想这样。

将常见的代码/属性移动到一个基类中,然后再有两个子类继承它,这样做既美观又干净,而且使维护变得更加容易。


0

个人而言,我会选择基类选项,这样你就不必在多个地方重复数据注释属性。


1
您可以通过在单独的类中声明它们并在每个视图模型上使用“MetadataType”属性来重用数据注释。 - Nick Larsen

0

我的观点是,如果我正在创建或编辑某些东西,本质上它们是相同的。实际上,在核心数据结构上不应该有任何区别。

但是假设存在差异,我会像在其他任何地方一样使用基类来共享公共属性。


1
如果你正在创建或编辑某些内容,它可能并不完全相同。例如,你可以通过从外部服务导入值来创建某些内容,在这种情况下,你的创建模型具有足够的属性,让你访问该服务并定位你想要导入的对象。一旦导入,你的编辑模型几乎肯定与你的创建模型无关。 - Nick Larsen
嗯,我不确定我完全同意尼克的观点。如果我有一个汽车模型,无论是创建还是编辑,它的属性都是相同的,例如车门数量、轮子数量、座位容量等等。如何获取数据以创建汽车实例的机制与模型的实际实现无关。 - Simon Lee
@SimonLee:这个问题特别询问的是视图模型,而不是实体模型本身。 - Nick Larsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接