2012-08-28 58 views
0

根据现有视图(如创建,更新,获取,删除),我拥有一个客户实体多个视图模型。这些视图模型与实体共享高达75%的相同属性。将一个实体映射到一个视图模型或许多视图模型

我应该更好地将所有客户视图模型合并为一个大视图模型吗?

所以我必须只映射,总是从一个实体到一个视图模型和回来的路? 您是否看到我现在还不记得的某些场景在灵活性方面有什么缺点?

+0

如果我错了,请纠正我,您的问题是关于MVVM的ViewModel – HatSoft

回答

0

从长远来看,保持它们分开会更好,因为虽然每个ViewModel中包含的数据可能相似甚至完全相同,但意图是不同的。例如,创建和更新视图模型肯定是相似的,但有一些重要的区别。首先,创建视图模型通常不具有实体的身份,因此它可能会令人困惑,因为它没有意义。其次,如果应用程序支持部分更新,则更新ViewModel可能是对现有实体的更改集合,而不是整个实体。

如果您正在努力寻求DRY,您可以通过共享整个ViewModel类以外的方式实现重用性。相反,您可以创建更小的可重用组件,并通过组合来重用,而不是继承。试图强制一个ViewModel类来满足所有需求将会出错,因为代码更难推理。很多时候,简单的复制粘贴&可以比OOP提供的更好地完成工作。

0

一方面,按照您所描述的方式拆分ViewModel可以让您的代码库真正清晰,因为您可以确保每个ViewModel完全符合目的并且没有不必要的属性。另一方面,这意味着你有更多的代码需要维护 - 对实体的更改可能意味着对几个ViewModel的更改。另一方面,一个大的ViewModel方法基本上具有完全相反的优点和缺点代码来维护,但ViewModel不太适合用途。

这里没有真正的对错答案,你已经对每种方法的优缺点做了太多的权衡,并决定哪些方法最适合你。

一种中途办法是为创建/更新提供一个ViewModel,一个用于检索,一个用于删除,因为创建/更新可能非常相似。

0

你另一个,最OO选项在于良好的旧的继承:在MyVM一个类中定义动作之间共同的功能和扩展它(继承它),你认为合适的不同的操作:MyVMEditMyVMDeleteMyVMCreate,`MyVMList ”。

这是两个世界中最好的:你只保留一次事物,并且将它们扩展为适合每个视图。

这里没有正确的方法,因为它不是一个数学,任何完成工作的方法都会完成工作:)但是... 有时我们离开我们的根源太远了 :)其纯粹的古老的面向对象的方法。

如果继承(或扩展)造成任何问题(出于任何原因),则可以在每个MyVM<Action>模型中嵌入MyVM部分,并达到相同级别的抽象/功能平衡。

像往常一样 - 正确的工作的正确工具。

希望这会帮助你。

相关问题