ViewModels的版本控制

时间:2018-04-09 20:21:04

标签: c# design-patterns c#-4.0 mvvm

我有一个View和一个ViewModel。 ViewModel不仅负责View相关的演示,还启动业务逻辑(在我们的例子中是工作流)。我的软件可以与设备固件的不同版本通信。

使用案例1:视图布局经过修改 连接到不同版本时可能需要显示略微不同的视图,在这种情况下,我创建一个新视图并使用新视图模型将其连接起来。

  

这很有效。

用例2:查看保持相同但基础逻辑更改要理解这一点,假设当软件连接到固件版本(1.0.0)时,应该显示带有复选框的视图只有选中复选框时才需要启用文本框和文本框。现在,如果软件连接到不同版本的固件(1.2.0),它应该显示相同的视图,但现在不应该基于复选框检查启用/禁用文本框。

我的问题是,

  1. 我是否需要创建新的视图模型?
  2. 我应该在数据库(1.2.0)中创建某种类型的标志并使用相同的视图模型,因此视图模型中的逻辑首先检查标志是否存在然后它可以决定启用/禁用控件。

1 个答案:

答案 0 :(得分:1)

这可能归结为不同的版本1,1.2和理论1.3将如何运作和/或看起来。如果它真的很简单,“版本1.2不应该根据复选框的状态禁用文本框”,那么ViewModel中的一个简单属性用于指示固件的版本,以及视图中的一些简单逻辑({{1可能是要走的路。

然而,如果它比那更复杂(甚至更复杂),我怀疑你最好为每个固件版本创建自定义ViewModel和Views。否则,随着版本的增加和自定义逻辑的增加,你将陷入一种真正的纠结。你最终会得到

if ( Model.Version >= 1.2 ) {...}

这将很快失控。如果发生这种情况,您最好希望在所有必需的版本方案中围绕所有必需的功能进行一些非常具体的验收测试,否则没有人会想要修改该代码,以免无意中破坏该逻辑