为了账号安全,请及时绑定邮箱和手机立即绑定

ViewModels的版本控制

ViewModels的版本控制

C#
潇潇雨雨 2021-04-02 14:10:52
我有一个View和一个ViewModel。ViewModel不仅负责与View相关的表示,而且还启动业务逻辑(在我们的案例中为工作流)。我的软件可以与设备固件的不同版本进行通讯。用例1:视图布局经过修改 在连接到不同版本时,可能需要显示稍微不同的视图,在这种情况下,我将创建一个新视图并将其与新视图模型挂钩。这很好。用例2:视图保持不变,但逻辑进行了底层更改为了理解这一点,假设软件连接到固件版本(1.0.0)时,它应该显示带有复选框和文本框的视图,并且仅需要启用文本框选中该复选框时。现在,如果软件连接到不同版本的固件(1.2.0),则应该显示相同的视图,但是现在不应该基于复选框选择启用/禁用文本框。我的问题是我需要创建一个新的视图模型吗?我是否应该在数据库(1.2.0)中创建某种标记并使用相同的视图模型,所以视图模型中的逻辑首先检查该标记是否存在,然后可以决定启用/禁用控件。
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

它可能归结为不同的版本1、1.2和理论上的1.3的功能和/或外观。如果确实很简单,例如“ 1.2版不应该基于复选框的状态禁用文本框”,则ViewModel中的一个简单属性可以指示固件的版本,而视图(if ( Model.Version >= 1.2 ) {...})中可能包含一些简单的逻辑要走的路。


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


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

{

    ...

else if ( Model.Version > 1.3 && Model.Locale == EnglishSpeaking ) 

    ... 

else if ....

这将很快失去控制。如果发生这种情况,您最好希望针对所有必需的版本方案中的所有必需功能进行一些非常具体的验收测试,否则没人会因为担心无意间破坏了该逻辑而不想修改该代码。 。


查看完整回答
反对 回复 2021-04-10
  • 1 回答
  • 0 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信