使用 MVVM 模式,我将视图绑定到的方法和属性设置为公共。
感觉这些应该只对视图公开,而不是其他任何地方。几乎就像一个受保护的概念。但是,您需要一些可供其他类使用的公共方法,因此它变得有点混乱。
我正在编写 TypeScript,所以我可以真正访问我想要的任何方法/属性,但在像 C# 这样的语言中,我猜你必须将视图属性公开为视图的公共属性,并且真正遇到这个问题。
视图模型:
class viewModel {
private mode = "Editable";
// this is only meant for the view. but it's public so it could be tampered with.
public items = ko.observableArray();
// this is meant to be used by other code.
public setMode(mode) {
this.mode = mode;
}
private _datasvc = new someDataService();
constructor() {
this.items = this._datsvc.getItems();
}
}
我只是不理解或正确使用 MVVM 吗?
我只是不理解或正确使用 MVVM 吗?
在 MVVM 核心概念中,视图模型公开了可由视图更改的内容。所以隐藏这不是 MVVM 规定的事情。
也就是说,事情要么是公共的,要么是私人的。有了public
,你就可以读写。
您可以做的是使用getter
但要小心,因为底层数组可能仍然是引用,因此您需要克隆它,但这是一个显着的性能影响 + 深度不变性可能无法保证,除非您克隆数组中的项目。