Asp.net mvc Asp.net MVC-视图模型设计

Asp.net mvc Asp.net MVC-视图模型设计,asp.net-mvc,Asp.net Mvc,我的控制器上有一个创建和编辑操作 每个动作都有一个viewmodel。两个ViewModel都有大约15个属性。10是两种车型的共同点,其余车型则有所不同 我的问题是:我应该创建一些具有共同属性(保持干燥)的基础模型,还是我不在乎这里?你们肯定应该在乎。编写好的、干净的代码对灵魂有好处,此外,我们都知道,每次你编写坏代码,上帝都会杀死一只小猫(我们不希望这样 将通用代码/属性移动到一个基类,然后有两个子类,这样做很好、干净,而且维护起来更容易。我个人会选择基类选项,这样你就必须在多个地方重复数据

我的控制器上有一个创建和编辑操作

每个动作都有一个viewmodel。两个ViewModel都有大约15个属性。10是两种车型的共同点,其余车型则有所不同


我的问题是:我应该创建一些具有共同属性(保持干燥)的基础模型,还是我不在乎这里?

你们肯定应该在乎。编写好的、干净的代码对灵魂有好处,此外,我们都知道,每次你编写坏代码,上帝都会杀死一只小猫(我们不希望这样


将通用代码/属性移动到一个基类,然后有两个子类,这样做很好、干净,而且维护起来更容易。

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

我的观点是,如果我正在创建或编辑某个东西,它本质上就是sam事实上,核心数据结构应该没有任何区别


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

这几乎肯定会归结到您所处的实际情况。要问自己的最重要的问题是:这些共享属性是否形成某种基实体?如果答案是肯定的,那么您是拥有一个基类可能是安全的。如果不是,我会远离它,只把属性放在各个模型上


如果您在“创建视图模型”中遗漏了一些在“编辑视图”中可编辑的属性,则共享属性可能不会构成某种类型的基类,您应该避免使用“基类视图模型”方法。如果额外属性只是辅助属性,如“选择列表”,则您可以安全地拥有一个具有e公共属性。

您可以通过在单独的类中声明数据批注并在每个视图模型上使用
MetadataType
属性来重用数据批注。如果您正在创建或编辑某个对象,它可能本质上不是同一个对象。例如,您可以通过从外部服务导入值来创建某个对象,在这种情况下您的创建模型具有足够的属性,您可以访问该服务并找到要导入的对象。一旦导入,您的编辑模型几乎肯定与您的创建模型无关。嗯,我不确定是否完全同意尼克,如果我有一个汽车模型,无论我创建还是编辑它,它的属性都是相同的,它都有一个nu车门数量、车轮数量、座位容量等。我如何获取数据以创建汽车实例的机制与模型的实际实现无关。@SimonLee:这个问题专门询问视图模型,而不是实体模型本身。