到现在为止我主要是用Struts 2
, Spring
, JQuery
技术堆栈构建Web应用程序。 点是,提到的栈使用服务器侧MVC
模式。 的网络浏览器的主要作用被限制在请求/响应循环(+客户端验证)。 数据检索,业务逻辑,布线和验证,主要是在服务器端的责任。
我有一个关于那个被下面我读过行情启发AngularJS框架几个问题:
从AngularJS教程 :
对于角度的应用程序,我们鼓励使用模型 - 视图 - 控制器(MVC)设计模式来解耦代码和分离关注。
从维基百科的模型-视图-控制器 :
模型 - 视图 - 控制器(MVC)是分开的,从用户与它相互作用信息的表示的架构。 该模型包括应用数据和业务规则的,并且控制器介导输入,将其转换为命令的模型或视图
AngularJS使用客户端MVC
模式。 所以我想,没有其他选项,然后包括验证逻辑也以某种方式的客户端?
什么是写一个强大的AngularJS应用程序的最佳方法是什么? MVC对服务器端的客户端和某种MC的(模型,控制器)?
这是否意味着,模型和控制器都以某种方式复制(客户端/服务器)?
我知道我的问题是有点怪异,但我认为原因是,我莫名其妙地acustomed传统的服务器端MVC模式。 我相信有一个人,是已经做了相同的过渡。
Answer 1:
根本不是一个奇怪的问题 - 我一直在试图角出售给了很多的Java开发人员,他们问这个。 我问我自己,当我学习(我还在学习,顺便说一句)
如果你把一个“传统”的Java web应用程序如你所描述和角IZE它,你得先取你的服务器,并使其一个RESTful API。 取出的JSP等,这其实是最困难的部分,国际海事组织,写一个角度应用程序 - 获取REST API的权利。 对我来说,在决定进入服务器就在想它作为一个纯粹的API和遗忘的,它将有一个前端的时刻需要什么样的逻辑的关键。
这个问题真的帮了我 - 如果有人试图挽救一个给定的资源和资源没有有效的数据没有前端,告诉他们 - 他们直接击中API让API需要拒绝。 因此,后端负责深验证。 这适用于您的业务逻辑。 假设有人只使用API和你的服务器需要做到这一点会变得清晰。
服务器需要还为贩卖的(可能)JSON格式(我使用Spring MVC + Jackson)的数据,所以它负责公开模式角度,沟通与数据库。
那么什么是MVC然后在角边?
- 型号 :那来自REST API的数据。 如果API被贩卖JSON,那么这些对象将已经是第一类JavaScript对象。
- 查看 :HTML,当你需要操作DOM指令
- 控制器 :(你已经排除你的控制器和定制服务。)
- 查询的REST API,并提出什么是必要的视图上的$范围
- 提供用于指示对事件则可能需要回调到服务器响应的回调。
- 验证:通常通过回调到一个指令。 可能会有些重叠,你已经把服务器验证的 ,但你不希望你的用户等待服务器来验证一切-客户应该知道一些有关验证给用户的即时反馈。
- 商业逻辑:几乎相同的故事验证。
但是,为什么逻辑在客户端和服务器的重复? 这主要是因为你不是在写一个应用程序,你写两个独立的事情:
- 一个REST API需要将没有了前端健壮和可用
- 需要立即给予反馈给用户,并且不一定等待服务器的GUI。
所以,简单的答案 - 向右忘了,会有一个UI获得的REST API,并且什么进入角会更加清晰。
Answer 2:
我觉得“经营逻辑”是有点用词不当这里。 在一个客户方应用程序的“业务”是处理用户界面业务。 它不会是喜欢的东西的安全规则和专有逻辑或其它敏感的知识产权。
因此,在角分工(通常情况下):
- 控制器 (Controller):为您的UI背后操纵数据(范围)。
- 指令 :用于建立DOM经由范围与控制器进行通信, 以及用于操纵所述DOM。
- 模板 (视图):要分配指令到DOM的元素。
- 范围 (模型或视图模型):用于系统的所有部件之间携带数据。
- 服务 :代码注射,可重复使用的位。 通常像处理阿贾克斯,Cookie或其他I / O依赖关系。
这真是几乎MVVM,而不是MVC。
至于你的“业务”逻辑或规则...任何需要安全必须始终在服务器级别保护。
Answer 3:
要明白,在MVC模式的某些版本中, 数据以及操纵数据的逻辑都驻留在“模型”层(与“控制器”层做什么,但结合)是很重要的。 在AngularJS,然而,数据($范围)单独存在于“模型”层,而操纵数据($范围)的逻辑驻留在“控制器”层。
![](https://www.manongdao.com/static/images/pcload.jpg)
Answer 4:
我喜欢什么@Roy纯爱说。 但是,让我说,这是使用angularjs的最终出路。 当然,你必须要学会做你的应用程序这样,如果你想获得的角最大的利益。 我祈祷在那里的一天。
在此期间,你的学习过程中,并在转换过程中,充分利用angularjs为您的客户端做事情的主要方式,你就可以开始使用它的一些小的任务在这里和那里,并慢慢习惯它,并给它的方式思维。
我鼓励逐步拥抱它,去慢慢慢慢,但肯定的是,我保证,确保万无一失。
Angularjs旨在服务于这种方法,因为它可以为好,因为它可以做的最大的一个最小的任务工作。 例如,这个我第一次用角只是为了显示在用户类型的ID名。
Answer 5:
我同意在这里的答案。 一些更多的评论。 当你写一个applicacion,你首先需要把注意力集中在问题领域。 并创建一些真正的业务的软件模型。 例如,如果您的问题域是一个集购物,一些你需要建模的要求可能包括:
- 信用卡应该是有效的。
- 如果您有X品牌的信用卡支付,您将收到优惠的10%。
- 这家商店购物车应至少包含一个项目来执行结账
- 该项目必须有股票之前,允许用户将其添加到店内购物车
这些要求的实施,将您的问题域模型,这是你的业务逻辑。
角是一个前端框架和工具包。 这是一个网络前端。 如果实施该在Web前端,你将错过oportunity从其他前端或接口,像移动或桌面应用程序中重用模型。 因此,理想情况下,你的业务逻辑的实现需要从任何用户界面框架分离,并从任何持久性框架也分离。 然后,你将有将处理用户界面问题,你的界面对象,将与你的业务逻辑对象comunicate。 这可以是一个弹簧MVC的控制器,和/或角控制器或服务。
有一个示例应用程序 ,你可以看看,下面这里提到的原则。
Answer 6:
我似乎有这个问题还有,一些机构只是热潮的新技术 - “我想云......等等,我想轻量级”的,它很难证明它是否值得交换机到lighther框架。
我开发使用Spring / JBoss Seam的/ JSF和MVC框架,所有的时间web应用。 大多数时候,Java脚本的将驻留在表示层验证和主要动作类/实体和业务逻辑将驻留在Java代码。 经过一些基本的动手对角,我开始他们所说的MVC,因为它们抽象表现层,在这里我们可以对前端我们自己的视图和控制器在另一个层面上。 要回答你的问题,就像其他人的评论最好的办法是奠定其表现层。
至于安全的角度来看,我认为重或敏感的业务规则应该驻留在服务器端,因为我们不想把它暴露在世界各地。 如果业务逻辑不发达,人们可以很容易找到我们的代码的弱点,并利用它。
这是我的想法像角框架就像一个小商店/ SOHO处理客户,他们有几个人真正有效和fast.They迎合以及面临的业务和交付/高效地接收货物(REST,JSON)的客户。 他们也有指定的角色和任务,但有些工人执行比任务的更多。 这家商店也容易受到窃贼或强盗因为通常他们不强调重安全。
至于像Spring / Struts 2的服务器端框架,想象一个现代公司(CMM 5级)不同的管理水平和能够处理更大的业务(批处理作业,Web服务,企业总线)。 他们这样做处理客户,但不是直接的,经常去通过经纪人甚至零售店。 安全明智的公司更强劲,而且经常证券前门,或重要信息的安全保护(加密/登录)。
Answer 7:
我的做法是始终是自下而上的方法。 从数据库设计开始,用正确构造/相关表,存储过程需要时,再加入实体框架来解决,或者使用ADO.Net如果EF是不是一种选择。 然后开发业务逻辑,而模型进出数据库获取数据。
与模型建立,我们现在可以走两条路线:开发MVC控制器和/或开发的WebAPI控制器。 两个控制器可以访问的模型,它只是一个实例化类和调用方法的问题。
你现在有建立了由MVC控制器,或者完全独立的组HTML页面或SPA的控制MVC意见的选项(单页应用程序托管在的NodeJS)。
随着完全独立的一组HTML页面,你将需要使用的WebAPI控制器,用GET,POST,PUT和DELETE方法,并确保令牌包括来回,以确定您的客户端,并启用CORS(跨起源请求)
随着MVC视图,您可以使用控制器属性识别你的客户,和/或会议,并没有必要担心CORS,和,你甚至可以在需要时您浏览的强类型。 不幸的是,如果你有一组UI开发人员,他们将不得不在同一个MVC的解决方案工作。
在这两种情况下,你可以使用AngularJS传输数据从/来回控制器。
IMHO AngularJS控制器的概念是不与C#MVC或C#的WebAPI控制器相同。 AngularJS控制器房子里所有的JavaScript逻辑,以及通过“ApiFactory”的呼叫端点,而C#控制器却都终点在服务器端接受和UI响应请求。
文章来源: AngularJS client MVC pattern?