【问题标题】:use getters in ViewModel instead of subscribing to Model在 ViewModel 中使用 getter 而不是订阅 Model
【发布时间】:2018-08-30 21:36:26
【问题描述】:

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

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

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

例如:

Model = {
field: aValue
}

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

我说的对吗?没事吧?

【问题讨论】:

  • 这是一个有趣的想法。当页面加载时,页面所需的所有 javascript 都会被加载并公开查看。当 javascript 变得更加复杂时,您在本例中的理论会变得混乱和困难。它仍然可以工作,但将来可能更难修改。总的来说,当你把事情分开时,它就不会那么混乱了。另一方面,如果我们谈论的是编译语言,情况就不是这样了。

标签: javascript design-patterns model viewmodel


【解决方案1】:

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

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

Am I right?

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

is it ok?

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多