gpt4 book ai didi

javascript - AngularJS 客户端 MVC 模式?

转载 作者:IT王子 更新时间:2023-10-29 02:49:50 25 4
gpt4 key购买 nike

到目前为止,我主要使用 Struts 2SpringJQuery 技术栈来构建 Web 应用程序。重点是,提到的堆栈使用服务器端 MVC 模式。 Web 浏览器的主要作用仅限于请求/响应周期(+ 客户端验证)。数据检索、业务逻辑、连接和验证是服务器端的主要职责。

我有几个关于 AngularJS 框架的问题,这些问题的灵感来自于我读过的以下引述:


来自AngularJS tutorial :

For Angular apps, we encourage the use of the Model-View-Controller(MVC) design pattern to decouple the code and to separate concerns.

来自 Wikipedia Model–view–controller :

Model–View–Controller (MVC) is an architecture that separates therepresentation of information from the user's interaction withit. The model consists of application data and business rules,and the controller mediates input, converting it to commands for themodel or view


AngularJS 使用客户端 MVC 模式。所以我想没有其他选择可以以某种方式将验证逻辑也包含到客户端吗?

编写健壮的 AngularJS 应用程序的最佳方法是什么?客户端的 MVC 和服务器端的某种 MC(模型、 Controller )?

这是否意味着 MODEL 和 CONTROLLER 以一种方式重复(客户端/服务器)?

我知道我的问题有点奇怪,但我认为原因是,我以某种方式习惯了传统的服务器端 MVC 模式。我确定有人已经完成了相同的转换。

最佳答案

这根本不是一个奇怪的问题——我一直在尝试向许多 Java 开发人员推销 Angular,他们会问这个问题。学习的时候自己问的(我还在学习,btw)

如果您采用您所描述的“传统”java webapp 并对其进行 Angular 化处理,则必须首先采用您的服务器并将其设为 RESTful API。删除 JSP 等。这实际上是编写 Angular 应用程序的困难部分,IMO - 正确使用 REST API。对我来说,决定将什么逻辑需要进入服务器的关键是将其视为一个纯 api 并暂时忘记它会有一个前端

这个问题对我很有帮助——如果有人试图保存给定资源,而该资源没有有效数据,则没有前端可以告诉他们——他们直接访问了 API,因此 API 需要拒绝它。因此,后端负责深度验证。这也适用于您的业务逻辑。假设某人只是使用 API,那么您的服务器需要做什么将变得很清楚。

服务器还需要以(可能)json 格式提供数据(我使用 Spring MVC + Jackson),因此它负责将模型暴露给 Angular,并与数据库通信。

那么 Angular 方面的 MVC 是什么?

  • 模型:来自 REST API 的数据。如果 API 出售 JSON,那么这些对象将已经是第一类 javascript 对象。
  • View:HTML,以及需要操作 DOM 时的指令
  • Controller :(以及您从 Controller 中分离出来的自定义服务……)
    • 查询 REST API 并将 View 所需的内容放入 $scope
    • 为指令提供回调以响应随后可能需要回调服务器的事件。
    • 验证:通常通过对指令的回调。 可能会与您已经放入服务器的一些验证重叠,但您不希望您的用户等待服务器验证所有内容 - 客户端应该知道一些事情 关于为用户提供即时反馈的验证。
    • 业务逻辑:与验证几乎相同。

但为什么客户端和服务器中的逻辑重复呢?主要是因为您不是在编写一个应用程序,而是在编写两个独立的东西:

  1. 一个 REST API,需要在没有前端的情况下健壮且可用
  2. 需要向用户提供即时反馈而不必等待服务器的 GUI。

所以,简短的回答 - 通过忘记会有一个 UI 来获得正确的 REST API,并且进入 Angular 的内容会更加清晰。

关于javascript - AngularJS 客户端 MVC 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13067607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com