5. 结论
我们开发了以下客户端/服务器应用程序:

为了最终确定代码版本,我们不得不详细讲解了 AngularJS 和 Spring 4 框架的许多方面。因此,本文档可用于学习如何使用这两个框架。第 1.3 节说明了代码的获取途径及其使用方法。
我们已证明该客户端/服务器应用程序可在多种环境中使用:
- 作为传统的 Web 应用程序;
- 作为Android模拟器上的可执行二进制文件;
需要再次强调的是,本教程对这两个框架的介绍并非面面俱到。对于 Angular,我们当然需要介绍其配套的测试工具。测试是编写应用程序时不可或缺的一步。Angular 相关的工具能够实现这些测试的自动化,并将其整合到持续集成流程中。
通过本次研究,我总结出两个关键要点:
- 编写 Spring Web 服务相对复杂。从一开始,我就熟悉 Spring 的概念。我仅在 Web 服务的安全配置以及后续的 CORS HTTP 头部管理方面遇到了困难——这两个领域我此前并不熟悉;
- 编写 Angular 客户端则复杂得多,原因包括:
- 我对 JavaScript 语言及其功能缺乏充分的了解;
- 我难以理解浏览器中的异步编程机制。我原本将其视为服务器端场景,在那里异步性是通过同时使用多个线程来实现的。而在浏览器中,仅有一个线程,异步任务是顺序处理而非并行处理的。更具体地说,异步任务可以并行运行(例如多个 HTTP 请求),但它们完成后触发的事件却是顺序处理的。 因此,无需管理并发执行及其伴随的诸多问题;
- Angular 是一个功能丰富的框架,包含众多概念(MVC、指令、服务、模型作用域等)。学习起来需要很长时间;
- Angular 并未强制规定特定的开发方法。因此,要实现相同的结果,可以使用不同的架构。这令人困惑。 我更习惯于封闭式框架,其中所有人都遵循相同的设计模式。因此,我一直致力于复现我在服务器端使用的设计模式。我对结果感到满意,因为我相信它是可复现的。这正是我所追求的。但我完全不知道自己是否偏离了 Angular 的“最佳实践”;
Serge Tahé,2014年7月。