Why is Angular called MV* framework
从我读到现在(这个答案很精确),它更倾向于MVVM模式。将来自服务的数据视为模型,将角度控制器视为VM,将包含角度绑定的HTML视为视图。
Can we say that MVC is a pattern for server side and MVVM for client side?
Can someone explain with example (in context of Angular) how we can
implement MVC and MVVM.
我读过关于在角度控制器中使用var vm=this的概念。但这是否意味着我们只需使用控制器的别名,就可以将角度应用程序从MVC转换为MVVM。
首先,我认为最好对MVC和MVVM有所了解。
不仅仅是在更为理论的背景下描述。我宁愿用一个简单的例子来解释。我们去买个披萨吧。
MVC——就像你给比萨中心打电话,然后送上门来。
- 你呼叫呼叫中心的人(控制器)并下订单(输入)。
- 然后呼叫中心的人(管制员)安排一些厨师(模特)来做披萨,一个送货员(视图)来送披萨。
- 然后送货员(视图)从厨师那里得到披萨(模型),包装好(输出),然后送货给你。
MVVM——更像是,当你去商店向服务员点菜时会发生什么。
- 您向服务员(视图)下订单(输入)。
- 服务员(视图)向咖啡厅经理(视图模型)下订单。
- 咖啡馆经理(视图模型)安排一些厨师(模型)做比萨饼。
- 厨师(模型)准备好并将其传递给咖啡馆经理(视图模型)。
- 然后咖啡馆经理(视图模型)把它放进一个很好的盘子里,加上叉子/刀、调味汁分配器等(展示)。
- 服务员(视图)跟踪咖啡馆经理(视图模型)。一旦准备好了,服务生(视图)就会给你送来。
回到你的问题上,
Can we say that MVC is a pattern for server side and MVVM for client
side?
我能说的一般都是肯定的。(可能有一些角箱)。我希望你能用我上面的解释来更好地处理你的问题。
除此之外,因为您提到的是安古拉基,在体系结构中,它非常接近MVVM(我这样说是因为它更像是没有答案)。虽然我们在AngularJS中有控制器,但实际上它们确实完成了视图模型的工作。
-------使用AngularJS更新特定示例----------
因为我想保持我们的范围内的角度架构。我举一个一般的例子。
- 您有了将要使用AngularJS实现的组件的HTML模板。[视图]
- 该HTML模板绑定到一个控制器,在该控制器中,您可能拥有类似于
this.controllerAs = vm 的内容。实际上,这个术语vm 是指视图模型。[视图模型]
理想情况下,在这个控制器内部,我们不应该实现特定于业务的逻辑。如果您希望它们包含在客户机端,那么您应该有单独的工厂、服务(自定义)等来实现这一点。您可以做的是,您可以将这些(工厂、服务)包含在控制器中,并调用它们所需的函数/方法来执行所需的操作。否则,您可以考虑将业务逻辑放在服务器端,并使用内置服务(例如:$http)来调用它们。
因此,在控制器内部,我们只有绑定到视图逻辑(显示需求)的实现。
- 因此,正如我在第二点中提到的,您有自己的[自定义工厂、服务]或[一组REST服务+$HTTP],它构成了您的业务逻辑。[模型]
所以在交流流中,真正发生的是,
- 客户机(最终用户/另一个组件)调用/初始化HTML(视图),最好使用一些输入。
- 然后控制器(视图模型)获取输入并知道所需的任务是什么。
- 然后,控制器调用IT(模型)内部的工厂、服务等,以准备绑定到给定输入的所需的特定于业务的输出。
- 然后,该模型处理输入并向控制器提供所需的输出。
- 然后控制器进行一些显示特定的调整。
- 然后将显示HTML。
让我们来看看MVVM的历史:MVVM最初是由微软定义的,用于Windows演示基金会(WPF)和Silverlight,John Grossman已经在2005发布了一篇关于Avalon(WPF的代码名)的博客文章。它也在AdobeFlex社区中作为简单使用MVC的替代品得到了一些欢迎。近年来,MVVM以结构框架(如knockoutjs、kendo mvvvm和knockback.js)的形式在javascript中实现,得到了社区的总体积极响应。
同时,你是对的,AngularJS更接近MVC(或者更确切地说是它的客户端变体之一),但是随着时间的推移,通过许多重构和API改进,它现在更接近MVVM——
MVC、MVP和MVVM常见的软件行为包括:
1)数据层/业务逻辑(模型):这是将业务逻辑应用于应用程序数据的行为。
2)表示层/UI(视图):视图负责应用程序的可视化表示。
3)应用程序逻辑(控制器、表示或视图模型):此行为包含实现模型和视图之间交互的逻辑。
MVVM
MVVM在UI和应用程序逻辑之间提供了清晰的分离。
客户端库:knockout.js,kendo(mvvm)
服务器端库:sil verlight、win dows phone apps、adobe flex或tanuki,这是一个基于MVVM的Web框架,它的设计喜欢惯用的Ruby、Dry和可扩展性,或者另一个例子是WebCore 3 PHP框架,它是一个独立于平台的框架,使用MVVM模式。
所以我想说,如果说一个特定的模式只适用于客户端或服务器端,这是不正确的,它完全与我们正在使用的框架相关,或者可能与我们将为项目建立的环境相关,无论是在前端还是在后端开发中。
文档:此处
请看这篇文章
AngularJS MV的有趣文章*