首页 > 解决方案 > 在 ViewModel 中使用 getter 而不是订阅 Model

问题描述

那一周我了解到我们可以在 javascript 中使用 getter/setter。所以我尝试在我当前的代码中使用它。

现在我的 ViewModel 注册到 Model 以便在 Model 发生变化时得到通知。

使用 getter 我可以得到 RID 并简单地将模型中字段的值返回给 viewModel。

前任:

Model = {
field: aValue
}

ViewModel = {}
 Object.defineProperty(ViewModel , aField{
      get: function () {
        return Model.field;
             });
         }
    });

我对吗?可以吗?

标签: javascriptdesign-patternsmodelviewmodel

解决方案


SynchroDynamic 很好地说明了代码的可读性以及系统开发时可能出现的复杂性。

大概您正在使用某种提供数据绑定机制的框架。数据绑定通常是基于更改事件的自动过程。对于双向绑定,如果数据更改,绑定对的目标都必须触发事件,并且目标还必须响应这些事件(通过注册它们),以便数据保持同步。

Am I right?

是的,您是对的,您可以(在可能的意义上)使用 get/set 等并禁用框架数据绑定机制。

is it ok?

可能不是,除了最微不足道的情况。

1) 如果您使用支持数据绑定的框架,那么当有一个非常好的(并且记录在案的)机制可用时,您的代码的其他读者将会对您采用这种方法的原因感到困惑。

2) 正如 SynchroDynamic 所指出的,当视图和视图模型的数量增加时,事情将很快失控,您将不得不手动跟踪获取/设置。

3)单元测试也可能变得更加复杂!


推荐阅读