这是 AngularJS 页面的内容描述:
AngularJS 本来就是 HTML,如果它是为构建 web 应用程序而设计的。具有数据绑定、MVW、MVVM、MVC、依赖注入和出色的可测试性故事的声明式模板全部使用纯客户端 JavaScript 实现!
那么 MVW 代表什么?(考虑到 MVC、MVVW、MVP 等争吵,我猜“随便”,Model-View-Whatever =P)
它确实代表着任何东西,就像2012 年伊戈尔·米纳尔 (Igor Minar )对你有用的东西一样(强调我的):
MVC vs MVVM vs MVP。这是一个多么有争议的话题,许多开发人员可以花费数小时进行辩论和争论。
几年来+AngularJS 更接近于 MVC(或者更确切地说是它的客户端变体之一),但随着时间的推移,并且由于许多重构和 api 改进,它现在更接近于 MVVM ——$scope 对象可以被认为是 ViewModel,它是被我们称为控制器的函数装饰。
能够对框架进行分类并将其放入其中一个 MV* 存储桶具有一些优势。它可以帮助开发人员更轻松地使用它的 api,因为它可以更容易地创建一个代表正在使用该框架构建的应用程序的心理模型。它还可以帮助建立开发人员使用的术语。
话虽如此,我宁愿看到开发人员构建设计良好并遵循关注点分离的出色应用程序,也不愿看到他们浪费时间争论 MV* 废话。出于这个原因,我在此声明 AngularJS 为 MVW 框架 - Model-View-Whatever。凡代表“任何对你有用的东西”。
Angular 为您提供了很大的灵活性,可以很好地将表示逻辑与业务逻辑和表示状态分开。请使用它来提高您的生产力和应用程序的可维护性,而不是就一天结束时无关紧要的事情进行激烈的讨论。
MVW 代表Model-View-Whatever。
为了完整起见,以下是提到的所有首字母缩略词:
MVC -模型-视图-控制器
MVP -模型-视图-演示者
MVVM -模型-视图-视图模型
MVW / MV* / MVx -模型-视图-随便
还有更多:
HMVC -分层模型-视图-控制器
MMV -多用途模型视图
MVA -模型-视图-适配器
MVI -模型-视图-意图
话虽如此,我宁愿看到开发人员构建设计良好并遵循关注点分离的出色应用程序,也不愿看到他们浪费时间争论 MV* 废话。出于这个原因,我在此声明 AngularJS 是MVW 框架 - Model-View-Whatever。凡代表“任何对你有用的东西”。
AngularJS — 超级英雄的 JavaScript MVW 框架
我觉得 MWV(Model View Everything)或 MV* 在我看来是一个更灵活的术语来描述 Angularjs 的一些独特性。它帮助我理解它不仅仅是一个 MVC(模型视图控制器)JavaScript 框架,但它仍然使用 MVC,因为它有一个模型视图和控制器。
它也可以被视为 MVP(模型视图演示器)模式。我认为 Presenter 是 Angularjs 中用于视图的用户界面业务逻辑。例如,通过使用可以格式化数据以供显示的过滤器。这不是业务逻辑,而是显示逻辑,它让我想起了我在 GWT 中使用的 MVP 模式。
此外,它还可以是一个MVVM(Model View View Model),View Model部分是两者之间的双向绑定。最后,它是 MVW,因为它具有您可以使用的其他模式以及@Steve Chambers 提到的模式。
我同意其他答案,即在这些术语上学究气可能是有害的,因为关键是要从术语中理解概念,但出于同样的原因,在设计应用程序代码时,充分理解这些术语会有所帮助,知道什么去哪里以及为什么。