《上篇博客》我写出了我一直指望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优点。博客完成以后,我又花了一天时间试用 TS,用它来重构以前编写的一个 JS 游戏:《Javascript 坦克游戏》。html
源码下载ide
源码我已经上传到 CSDN 了,无需资源分,下载地址:http://download.csdn.net/detail/zgynhqf/8565873。this
源码使用 VS 2013 +TypeScript 1.4 进行开发。打开后,显示以下图:spa
JsTankGame 1.0:老的使用 JS 编写的坦克游戏。.net
JsTankGame 2.0:新的使用 TS 直接翻译过来的游戏。翻译
JsTankGame:在 2.0 的基础上,对类型进行了重构后的新游戏。设计
重构步骤3d
因为老的 JS 游戏是采用 MS Ajax Client Library 构建,而且采用了 OOD 的方式来进行设计,再加之 TypeScript 能够兼容 JS 的所有代码。因此使用 TypeScript 来移植的工做也比较简单,主要是替换类型设计的代码:类、继承、接口等。指针
完成以上工做后,也就获得了使用 TS 编写的 2.0 版本。过程当中体会到了强类型语言的诸多好处,固然也有一些 TS 目前并不完善的地方(后面会说)。调试
获得了强类型的 2.0 版本后,并无结束。为了体验强类型对于重构的好处,我决定在这个版本之上作代码结构上的重构。
有了强类型编写的代码,我能够很方便地分析出每个类型、每个方法,具体在哪些地方被使用。这样,我就能很快地知道类型之间的依赖关系。不看不知道,一看吓一跳。以前一点一点随心写的代码,本觉得类型设计得还不错,之间耦合性应该不是很高。可是图画完以后,才发现与想象中差点很远,这就是没有画图直接编写代码的结果,见下面两张图:
能够看出各精灵类型之间的关系是比较乱的,双向依赖随处可见。(其实图中由于把 SpriteManager 画到了另一张图,因此没有显示出更复杂、更乱的关系。)
据此,我绘制了新的关系图,而后按照此关系来重构了全部的代码。这样就获得了最新的 3.0 版本。
新版本的类型关系图以下:
分层:
精灵:
管理器:
代码层面,主要是把各精灵之间耦合的代码,都移植到了上层的管理器中。同时,为精灵定义事件来解除精灵与管理器的直接耦合。
TS 首次体验中感觉的优缺点
其它:
总结
整体说来,通过试用,我感受 TS 到目前的 1.4 版本,已经能够用于正式的大型 JS 项目开发。可是还有不少地方须要改进!
附 Chrome、IE 调试 TS 截图: