我应该为数据库表使用多个viewmodel吗?

时间:2015-06-15 08:14:39

标签: c# wpf mvvm

有点混乱,我确信很容易被清除:)。

假设我们有一张名为" Contacts"的表格。 "指数"此表的视图将是一个数据表,列出表中的所有联系人姓名,电子邮件和电话。现在,这将包含一个包含名字,电子邮件和电话的视图模型。

接下来我们需要一个详细信息页面,其中包含完整,IE,全名,第一或第二联系人,其他电话号码,网站地址和备注等的每个联系人的详细信息。这应该是第二个Viewmodel吗?

然后我们有一个创建页面,其中包含要填写的所有字段。这会是另一个视图模型吗?

最后,这一切都会进入同一个类文件还是单独的文件?

由于

4 个答案:

答案 0 :(得分:3)

像往常一样,答案很常见,这取决于你真正想要实现它的方式。但是为了模式和有组织的代码,我建议你有:

  • 每个视图单独的Viewmodel:每个viewmodel应该只包含as 您希望在给定视图上显示/使用的许多数据。
  • 为了Separation of concern和单元可测试性:一个类 - 一个文件和一个 班级关注的每个任务的类。所以给定的类只需要改变一个原因。

答案 1 :(得分:2)

因此,您可以拥有Model和多个ViewModel。最好将每个ViewModel保存在不同的文件中。如果您使用与ViewModel相同的模型,那么您的应用程序应该非常小且简单,并且应该只包含CRUD操作。但是,如果您正在构建具有大型团队(具有两个或更多开发人员)的大型或企业应用程序,则应该具有依赖注入,服务,存储库,外墙,工作单元,数据访问对象等概念。

为了简化模型和ViewModel之间的映射需求,您可以使用AutoMapper https://github.com/AutoMapper/AutoMapper

或使用nuget Install-Package AutoMapper安装

答案 2 :(得分:1)

简短回答:是的。

答案很长:是的,在您的具体案例中似乎合乎逻辑。查看/编辑模型通常也有所不同 - 在数据类型中,包括的数据集,可编辑的字段与可查看的字段。另一方面,对于基于浏览器的现代前端,不太专业的视图模型可能会导致后端API和前端之间更松散的耦合,从而使UI更改变得更容易。

代码组织是一个主观问题。

答案 3 :(得分:0)

无需为视图创建多个视图模型。首先,您应该为数据库表创建模型(联系人,联系人详细信息等)。稍后根据您的视图要求,您可以使用模型创建视图模型。如果需要,甚至模型也可以直接用作视图模型。

最好为视图创建单独的视图模型。组合来自多个模型的数据非常有用,您也可以使用计算出的属性和方法。