视图模型的版本控制



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

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

这很好用。

用例 2:视图保持不变,但底层逻辑发生变化要理解这一点,假设当软件连接到固件版本(1.0.0)时,它应该显示一个带有复选框和文本框的视图,并且只有在选中复选框时才需要启用文本框。现在,如果软件连接到不同版本的固件(1.2.0),它应该显示相同的视图,但现在不应该根据复选框检查启用/禁用文本框。

我的问题是,

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

这可能归结为不同的版本 1、1.2 和理论上的 1.3 将如何运作和/或外观。 如果真的像"版本 1.2 不应该根据复选框的状态禁用文本框"这样简单,那么 ViewModel 中一个简单的属性来指示固件的版本,再加上视图中的一些简单逻辑(if ( Model.Version >= 1.2 ) {...})可能是要走的路。

但是,如果它比这更复杂(甚至没有那么复杂),我怀疑您最好为每个固件版本创建自定义视图模型和视图。否则,随着版本的增加和自定义逻辑的增加,您将陷入真正的纠结。 你最终会得到

if ((Model.Version >= 1.2 && Model.Version <= 1.3) || Model.Locale == EnglishSpeaking) 
{
...
} 
else if ( Model.Version > 1.3 && Model.Locale == EnglishSpeaking ) 
{ 
... 
} 
else if ....

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

最新更新