【发布时间】:2016-11-28 20:28:56
【问题描述】:
我在另一个网站上already asked this question,但由于它几乎没有引起任何关注(更不用说答案),我希望它可能适合这里。
我正在使用带有 Knockout.js 的 Model-View-ViewModel 方法开发 Web 应用程序。在阅读了 John Gossman 的 original introduction of MVVM 之后,我意识到我的 ViewModel 始终包含应用程序的所有逻辑,不仅是 UI 逻辑,而是所有内容。
我在某处读到,使用 Knockout,模型被认为是数据库,或者通常是服务器上的数据。但根据 MVC,该模型还包含对数据进行一些处理且与 UI 无关的函数。
所以我想知道拥有一个独立于 ViewModel 对象的单独模型对象是否合理?这背后的想法是 ViewModel 将仅包含 UI 逻辑(如 Gossman 所期望的那样),而 Model 将仅包含业务逻辑(如在 MVC 中),这与实际 View 无关。示例:
var viewModel = {
hint: ko.observable("idle"), //text visible in the View
buttonClicked: function () {
this.hint("doing stuff");
model.doStuff();
this.hint("done");
}
};
var model = {
doStuff: function () {
//business logic, UI independent
}
};
是否有可以从 MVVM 模式定义中得出的建议或“最佳实践”?
【问题讨论】:
-
我不知道它是否被认为是最佳实践,或者它是否源自任何模式,但您描述的这种“架构”非常方便,尤其是在大型项目中,因为模型本身的逻辑只为模型做特定的功能,可以在多个视图模型中重复使用,用于不同的目的。分离模型和视图模型的逻辑肯定没有坏处
-
对我来说这不是最佳实践,它几乎是一个要求。当您的逻辑变得复杂时,如果您不拆分业务逻辑和 UI 逻辑,您的视图模型就会变得不可读。此外,它使错误管理更容易,因为它分离了层
标签: javascript model-view-controller mvvm knockout.js