
管理数据可以说是编写可维护应用最棘手的方面之一。有很多种方法可以将数据应用到你的应用之中:
●AJAX HTTP请求
●Websocket
●Indexdb
●LocalStorage
●LocalStorage
●Service Worker
●等等
数据架构涉及的问题如下。
●如何将所有不同的数据源聚合成一个完整的体系?
●如何防止意想不到的副作用导致bug?
●如何更好地构建代码以使其更容易维护并让新来的团队成员更容易上手?
●当数据发生变化时,如何让应用尽快作出反应?
多年以来,MVC一直是构建数据应用的标准模式:模型包含业务逻辑,视图负责显示数据,控制器将所有一切联系在一起。不过问题是,我们知道MVC模式并不能很好地直接转化到客户端的网络应用中。
目前,数据架构领域出现了复兴并有许多新理念涌现出来。
●MVW/双向数据绑定:Model-View-Whatever
是用来形容AngularJS中默认架构的一个术语。$scope提供数据双向绑定,整个应用都共用同样的数据结构,某个区域的一个变化会传达至该应用的其余部分。
●Flux
:它使用单向数据流。在Flux中,Store负责存储数据,View负责渲染Store中的数据,Action负责改变Store中的数据。虽然设置Flux有一点繁琐,但是因为数据只在一个方向上流动,所以很容易推断。
●可观察对象:observable给我们提供了数据流。我们订阅数据流然后执行操作对变化作出反应。RxJS
是当下最流行的响应式JavaScript库,给我们提供了强有力的操作符,用来在数据流上组合一系列操作。

还有很多关于这些理念的变种,例如:
Flux作为一种模式而并非具体实现,它有许多不同的实现方案(就像MVC有许多的实现方案一样);
●Immutability是以上所有数据架构的一个常见变种;
●Falcor
是一个强大的框架,可以帮你将客户端模型和服务端数据进行绑定。
●Falcor通常使用可观察对象类型的数据架构。
Angular数据架构
Angular在数据架构的选择上极其灵活。一种数据策略在一个项目中可行并不代表在另一个项目中也可行,所以Angular并未规定具体的技术栈,而是力图让你无论选择何种数据架构都能很容易使用(同时保持高性能)。
这样的好处是,你可以拥有足够的灵活性来让Angular适应几乎任何情况。只是有一点不太好:你将不得不自己选择适合项目的数据架构。
别担心,我们不会让你自己去作出这个艰难的决定!在接下来的几章里,我们将教你如何使用这里提到的某些模式来构建应用。