Angular 1 框架组件理解

Round-Trip 和 Single-Page应用程序
Web应用程序都是遵从着round-trip模式开发的。
浏览器从服务器上请求获取初始的HTML文档,用户操作交互,浏览器响应提交请求获取新的HTML文档并接收服务器回复,然后在浏览器渲染接收到的内容。
所有的业务逻辑处理和数据存储都是在服务器端进行的,客户端只负责制造一些无状态的http请求,然后渲染服务器返回的HTML文档。

Single-Page模式则是采用了完全不一样的方式,首先一个初始化的HTML文档被发送给浏览器,用户在客户端所有的操作都是通过Ajax请求发送给服务器,以获取
对客户端也没部分页面内容的更新或者数据载入。而初始化过的HTML文档永远不会被重新加载。即使提示了数据重新载入,也不会有页面整体重载发生。

而那些需要频繁刷新整个页面HTML文档的应用,采用jQuery等替代方案更加适合。
AngularJS擅长于复杂的回程应用以及单页应用程序。
而对于简单的回程应用,则采用jQuery等更好。


理解Model:
有两个广泛的类型:view models 和 domain models
VM:表示从Controller传递给View的数据。
DM:表示业务领域里的数据,包括相关操作,转换,创建,保存和操作的规则,通常称之为 model logic,也就是说DM包括业务数据和相关业务逻辑。

MVC框架的根本目的是将应用程序划分为三个功能区域,每个区域都包含自己的data和logic。目标并不是将数据和逻辑分离。而是要保证model只包含数据
和该数据创建和处理相关的逻辑。

比如如果我们要创建一个销售记账管理系统,那么我们的business domain将包含跟销售记账相关的流程。
而我们的domain model将包含账户数据和创建账户,保存账户,以及对账户进行管理的逻辑。

如果我们创建一个关于猫咪的视频网站,我们也应该有一个business domain,我们的domain model将包含猫咪视频和创建,保存,操作视频的逻辑。

大部分Angularjs会将这些domain model的业务逻辑放到服务器端去处理,而客户端通过调用一个RESTful web服务即可。
而在客户端存在的则是view model。

对于MVC框架中,model应该需要包含的定义内容:
domain data
创建,管理,修改域数据的逻辑
提供一个简捷的API暴露域数据和对其的操作方法

不应该包含的内容:
不应该暴露域数据是如何获取和管理的。
不应该包含跟用户交互的数据与域数据之间的转换逻辑
不应该包含如何显示给用户的逻辑

这样可以确保domain model跟controller和view 隔离。
Domain model包含的逻辑最好只有获取和持久化存储数据的逻辑,也就是常说的CRUD。


理解Controller:
扮演了连接Model和view的导管角色。
它能为作为Model的子集的Scope添加业务逻辑,以行为函数的方式展示。
定义Controller时应该包含初始化scope的逻辑
包含view展示数据需要的逻辑和行为方法
包含基于用户操作更新scope的逻辑和行为方法
不应该包含 :
处理DOM的方法和逻辑
管理数据持久化的方法和逻辑
处理scope以外的数据的方法和逻辑

理解视图数据 View Data
AngularJS应用程序中,domain model不是唯一的数据,Controller可以创建view data(或者view model data)来简化view的定义。
该数据不会被直接保存,它只是通过同步一些domain数据或者用户交互数据而创建。


理解视图 View
AngularJS的视图都是使用Html元素定义的,使用数据绑定技术和指令来增强Html。
视图只能包含需要展现给用户的数据和逻辑。
不能包含太复杂的逻辑
不能包含创建,存储和 操作域对象的逻辑。


理解RESTful服务:
在AngularJS应用程序中,Domain model的逻辑通常分为客户端和服务端两部分。
服务器端的DM逻辑是持久化存储,数据库操作管理等。
而客户端逻辑不能直接访问数据库,而是通过服务端的操作逻辑作为中介,而客户端逻辑只是负责从服务器端获取数据或者向服务器端发送用户提交数据。
不去关心服务器端是如何获取或者存储数据的。

在客户端和服务器端传输数据有很多种方式,最通用的是Ajax请求调用服务端代码,让服务端代码发送JSON数据,或者通过HTML 表单来修改数据。
RESTful web 服务是以其为基础,使用HTTP的原生请求来对数据执行create,read,update和delete(CRUD)操作。

REST是API的一种形式,通过组合HTTP方法和URL来完成定义:
http://myserver.mydomain.com/people/bob

尽量做到保持你的URL定义简单清洁,将URL格式和数据存储结构的映射保存在服务器端。
GET,PUT,POST,DELETE,读取,更新,创建,删除
其中,POST操作会在对象存在时执行更新动作,不存在时才创建,所以,PUT操作一般不会使用。
idempotent 幂等性
GET方法是nullipotent的,也就是说该方法返回的内容只能进行读操作而无法进行修改。
浏览器重复的执行该操作不会造成服务器上数据状态的改变。
PUT和DELETE是幂等操作,意味着多次请求跟单一请求效果一样,第一次执行后,后续的重复操作将不会有任何行动被执行。
当然,如果另外一个客户端在此期间创建了该对象的情况除外。
POST操作既非只读也非幂等,如果第一次创建了某对象后,后续的同一操作会更新该对象。

在设计过程中容易出现的问题:
将业务逻辑写在了视图定义里
将域逻辑写到了Controller里,而不是model里
在使用RESTful服务时,将数据存储逻辑定义在了客户端model里

应该记住:
视图逻辑只用于定义数据显示逻辑,永远不能定义model修改逻辑。
Controller不能直接对model进行CRUD操作
客户端不能直接访问数据存储。

转载于:https://my.oschina.net/u/924064/blog/901404

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值