JS MVC frameworks MVC (模型-视图-控制器) 是一套设计模式,可以分层设计应用. 将数据(模型) 与用户视图 (视图)解耦, 通过中间控制器 (Controllers) 处理业务逻辑, 用户输入以及相应的逻辑跳转. 现代JS框架提供了简易的操作以及SoC (业务分离) 更好的实现了MVC . MVC 对于JS有很多好处— 提高了高可靠性的代码. 已被很多语言大量测试验证过,具有高可靠性. MVC 实现的三层结构: 模型: 是应用程序中用于处理应用程序数据逻辑的部分。 通常模型对象负责在数据库中存取数据. 视图: 是应用程序中处理数据显示的部分。 通常视图是依据模型数据创建的. 控制: 是应用程序中处理用户交互的部分。 通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据.
JavaScript ‘MVC’可以帮助构建我们的代码,但尽信书不如无书. 有些框架把控制器放在视图模式(比如 Backbone.js) 有些框架全部混在一起使用. 除此外还有其他的MVC模式,像是 MVP (Model-View-Presenter) and MVVM (Model-View ViewModel). 即便是MVC设计模型, 不同的语言也有不同的实现方式. 像是, 有些MVC实现会有自己的视图变更控制器亦或是控制器视图. 这些框架被称为 MV* 框架, 意味着你会有模型,视图但更会有其他的部分.
很长一段时间 AngularJS 是很标准的 MVC (或者说在客户端实现这一块),但在后来一段时间内随着代码重构和API的重写,现在更是 MVVM模式了 – $scope 对象被认为是视图模型然后被称为控制器的功能模块包装. 这样分配到MV模式中是有些好处的.它会帮助开发者使用简易的API开发基于框架的代码. 也能统一开发的共识。 使用MVC的初衷就是分解结构, 然后通过设置参数决定具体使用哪种 MV* 框架, Igor Minar (核心 AngularJS团队)宣称AngularJS 是 MVW 框架- Model-View-Whatever. whatever就是定制化的需求.
为什么使用 JS MVC 框架 再来看看使用MVC和传统开发模式的区别 传统Web应用 传统模式处理业务请求全部放在服务端,前段只是页面交互 (瘦客户端, 胖服务端). 这会有以下问题: 分布式处理能力弱 – 服务器处理大量业务,性能堪忧. 相应压力 – 传统应用的响应速度是个硬伤. 开发复杂度 –C/S结构的应用开发是比较复杂的. 由于每次请求响应都涉及到交互设计,很容易出错。未解决该问题的框架也是层出不穷,可惜易用性有待考究. 被攻击危险 – 混编业务代码和交互代码,增加了代码受攻击的概率.在复杂度很高的应用中更是不容易控制安全性。 服务端的负载过大 – 所有客户端的请求都需要经由服务端处理,这意味着所有的session都要等待30分钟后才能被释放,这时客户请求早已处理完毕,但还在占用系统资源,大大降低了系统性能和伸缩性. 离线处理 – 拥有离线处理能力是web应用的竞争力,尤其在处理大量客户端请求的应用中,离线处理部分业务更是不可或缺. 互操作性弱– 由于混杂编写,代码逻辑很难分割,扩展功能变得复杂.
JSMVC Web 应用程序 JS MVC web应用程序架构主要致力于将服务端的逻辑处理转移到客户端和实现瘦客户端web应用程序。client/server模型的处理逻辑和代码被委托给浏览器的好处是: 可扩展性:很容易看到利用客户端处理在可扩展性方面的优势。服务器处理能力保持不变的前提下,应用被越多的客户使用,那么越多的客户端机器可以被使用(直到你购买更多的服务器)。 实时的用户响应:客户端代码可以立即对用户的输入作出反应,而不需要等待网络传输。 结构清晰的编程模型:用户界面可以有效地分离应用程序的业务逻辑。这样的模型为安全提供了一个更加简洁方法。所有通过用户界面的发出的请求,我们可以在数据通过各种接口前进行安全检查。使用复杂的分析流程会让安全分析变得更加复杂。另一方面,用清晰的web服务接口,有明确的网关安全工作和安全分析更简单直观,漏洞可以快速发现并纠正。 客户端状态管理:在客户端维护临时会话状态信息可以减少服务器上的内存负载。这也允许客户利用更多的RESTful交互,可以进一步提高可伸缩性和使用缓存的时机。 离线应用-如果大部分应用程序的代码已经在客户端上运行,那么创建一个离线版本的应用程序可以肯定将会变得更加容易。 互操作性:通过使用结构化数据和最小限度的api进行交互,这样更容易连接额外的消费者和生产者与现有系统进行交互。 为了开发实现一个客户端web应用程序,需要组织我们的项目结构,这样更易于后期的管理和维护。一个应用程序的脚本超过几十行的时候,如果它的组件之间的功能没有分开处理,这样应用会变得越来越难管理。我们一开始开发一个web应用程序的时候,可能会觉得简单地通过一个DOM操作库(如jQuery)和一些实用的插件就可以完成了。这样我们很容易就被应用里面jQuery的嵌套回调函数和没有任何组织结构的DOM元素给搞蒙了。为了避免前面说到的问题,我们采用spaghetti code (一个描叙代码的术语,用来形容代码难以阅读和因为缺乏组织结构难以维护)。像使用jQuery这样的DOM操作库和一些其他的实用库我们可以更加容易使构建一个网页。但是,这些库在我们构建web应用程序时失去作用。
|