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

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