javascript - 在 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 所指出的,当视图和视图模型的数量增加时,事情将很快失控,您将不得不手动跟踪获取/设置。
3)单元测试也可能变得更加复杂!
推荐阅读
- java - 如何安排延迟的任务
- intellij-idea - 如何在不使用右箭头的情况下在 IntelliJ 中展开菜单
- java - Spring Boot:实体字段''在持久化时没有默认值
- bigdata - 谓词下推与布隆过滤器
- android-studio - 为内置 Play 商店的 Android 模拟器覆盖 RAM
- java - 流中出现故障时如何重新连接?
- javascript - 将文件扩展图标添加到表格列---col 仅将扩展名显示为字符串
- swift - ADMob 测试广告没有出现 IOS
- dart - 定位的小部件导致孩子消失/异常
- javascript - 如何获取包含样式名称的 word 文档的标题?