MVVM WPF的ViewModels用于添加新实体(MVVM WPF ViewModels for

2019-09-18 13:04发布

我对MVVM在WPF的概念是,我们有一个视图模型的应用程序中每个模型。 这意味着,如果我们有Customer类(实体),那么我们将有CustomerViewModel。 该CustomerViewModel将所有这些是必要的,作为客户的属性。 该CustomerView用户控件将负责为客户创造模型的UI。

现在,让我们说,我们还添加了新的客户。 因此,我们有它由名字的形式,姓氏等,我们是否需要为这种情况一个视图模型。 我的意思是我必须做的是从文本框把所有的输入值,并创建一个Customer对象,然后将其保存到数据库中。 为什么要我招谁惹创造这种情况下一个视图模型?

Answer 1:

首先,这不是MVVM的主要目的,以“镜子”的一切。 该视图应当为用户提供输入的手段,肯定不会处理任何数据库层的调用。 该视图模型应该是一个GUI无关的应用骨干,并definetly应该处理客户的创建。

这就是说,你应该做的,是有一个视图模型表示为处理客户工作区,而不仅仅是客户视图模型。 如果你真的想保存上创建几个对象,添加到工作环境中创建并添加一个新的客户(不CustomerViewModel)的可能性。 通过这种方式,你可以有,并通过调用添加到工作区的ViewModel一些命令其对于客户的每一个相关的/必需属性元素的工作区的视图,你可以得到填补那些(绑定到视图模型数据)的当前值直接查看元素给客户的模式。

试想,如果你,如果你重构事情有点很可能下降特定客户(及其他型号)的ViewModels,这将是很好的做法,让事情一味坚持特定的模式没有明确的原因。



Answer 2:

让我们假设一秒钟,有没有商业模式。 你拥有的唯一一种观点。 如果你做到这视图模型,没有什么样的数据在系统中的其他地方是指任何知识,这是一个视图模型。

一个视图模型的目标是,好了,模型视图它背上。 这比在您的业务领域建模客户的想法不同的目标。 如果说你将有每个商家实体一个视图模型,然后,就是你必须每个业务实体,这将导致运行的设施,工厂数据为中心的UI一个视图。

你的具体情况,考虑客户的编辑视图。 它对应于客户的属性的字段,因此似乎是一个天生适合直接绑定到客户。 然而,当客户对象上的“提交”动作模仿? 哪里是“取消”动作模仿? 它在哪里建模的领域,X是从列表中选择一个枚举值?

怎么样的密码? 如果坚持为二进制散列值,并认为知道如何散列其文本? 如果系统有密码强度要求?

该视图模型是商业模式和UI之间的砂浆。 它从一个担忧,并将它们转换成其他的方面。 这是在所有上述问题得到解决的地步。 如果说一个ViewModel是没有必要的是无视它的必要性。



Answer 3:

你并不需要有单独添加视图模型,你只需要一个单一的视图模型应该做的编辑和添加场景。 如果你可以从编辑页面删除的记录比视图模型也应该有删除的能力。 您的视图模型应该反映你查看公开不管数据的功能。

我想你应该重新考虑其每个模型的单一视图模型。 我喜欢把作为的ViewModels插入数据的标准化行为。 由于具有视图模型为每个模型类,你迟早会遇到架构问题。 我看自上而下概述应用,什么是我的UI试图完成,并从那里我会得到视图模型,最终我会得到我的DataFactory和视图模型如何映射到数据几乎总是不是1比1,除了对于最简单的意见。 如果您尝试1映射到1,你将有不好的UI或您的数据不会被标准化很好。

我们这里的协议栈是:

  1. 视图
  2. 视图模型(控制一切,用户可以在视图中做的,从我们的POCO的包装性能)
  3. 的DataFactory(地图我们POCO的实体框架对象和CRUD)
  4. POCO的(业务逻辑,所有的规则和验证)
  5. 实体框架(模型,数据访问)

需要注意的一点是视图模型包含来自多个POCO的属性!

我们通过注入和StructureMap单元测试用的xUnit的的DataFactory以起订量一起。

要回答你的第二个问题我想创建一个单独的视图只能查看下降,因为用户控制。 但你还是应该有一个CRUD视图模型在你的应用程序,封装了所有这些功能在一个用户友好的方式。

谢谢。



Answer 4:

这个VM抽象的一个原因是可测性。 为什么你想有一个视图模型的另一个原因是因为它基本上可能是在一个容器,它更符合当前视图从多个模型场的组合的数据传输对象。 另一个理由,VM是采取WPF两种方式绑定功能的优势。

使用你的正常模式(纯POCO),你可以更新视图时模型的变化,但由于你的模型没有实现依赖属性(最有可能),你将不能够把更新模型的优势,当值WPF控件的变化。 这意味着你必须手动添加处理程序,并从该控件返回到模型类的话做复制此值。



文章来源: MVVM WPF ViewModels for Adding New Entity
标签: wpf mvvm