在ViewModel中使用getter而不是订阅Model

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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;
             });
         }
    });

我对吗?好吗?

答案

SynchroDynamic对代码可读性以及系统开发时可能出现的蠕变复杂性提出了一个很好的观点。

据推测,您正在使用某种框架来提供数据绑定机制。数据绑定通常是基于更改事件的自动过程。对于双向绑定,绑定对的源和目标必须在数据发生更改时触发事件,并且源和目标也必须响应这些事件(通过注册它们)以使数据保持同步。

Am I right?

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

is it ok?

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

1)如果您使用的是支持数据绑定的框架,那么当您使用完美的(并且已记录的)机制时,您的代码的其他读者将会对您采用该方法的原因感到困惑。

2)正如SynchroDynamic指出的那样,当视图和viewModel的数量增加时,事情将很快失控,你将不得不手动跟踪get / sets。

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

以上是关于在ViewModel中使用getter而不是订阅Model的主要内容,如果未能解决你的问题,请参考以下文章

JSR 303 Bean 验证 - 为啥使用 getter 而不是 setter?

JSR 303 Bean 验证 - 为啥使用 getter 而不是 setter?

将 IsEnabled 绑定到父 ViewModel 而不是 UserControl ViewModel

为啥 GSON 使用字段而不是 getter/setter?

Android - MVVM 中 ViewModel 状态的最佳实践?

vue2双向绑定原理