TypeScript 强类型 JavaScript – Rafy Web 框架选型

今天看到了 AngularJs 2.0 版本将基于 TypeScript 构建 的消息。与同事们对 TypeScript 展开了讨论。本文记录一些个人的想法。

 

理想的 JavaScript 开发模式


其实早在 TypeScript 发布早期的时候,我就已经开始关注这个语言。因为在2012年初时,我需要为 Rafy/OEA 平台选型编写 Web 端自动界面生成框架:Rafy.js。而这个客户端框架需要基于一些流行的 JS 库来进行开发,当时选型的重点就是选择哪一个基础框架。

当时,我期望能找到一种可以编写大型 JavaScript 框架程序的开发模式。理想情况下,这种开发模式需要:

  • 支持面向对象设计。无疑,面向对象设计方法依然是当下最重要的设计方法。.NET、Java、C++ 等都是面向对象的语言。封装、继承、多态,大大的提高了程序的可重用性、可维护性、灵活性。所以,支持面向对象是大规模框架开发的必要条件。
  • 支持快速重构。我认为重构是高级开发者必备的一个非常重要的能力。没有不变的完美设计,只有不断进步的设计。框架中的依赖关系、调用关系往往比较复杂,虽然外部的接口要尽量保持稳定、兼容,但是框架内部的接口却会经常变动。而框架中动辄上万行、不重复的代码,如果没有对重构的支持,很难想象如何维护好这么多的代码。
  • 编译时错误检查、程序包管理、高效的代码提示……一说到代码的可维护性,可能我们都是在说程序本身的设计。但是开发工具的提升,也能大大提升开发者的开发效率,以及对程序代码的维护成本。所以上述的这些提升开发效率的功能,对于开发大型程序来说,也是必要的。

上面说的这些要求,对于强类型的 .NET、Java 开发来说,其实都是最基本的。但是,对于弱类型的动态语言 JavaScript 来说,却不是易事。弱类型、动态的特性,导致如果不到运行时,就很难确定一个变量的具体类型,所以也就很难提供代码提示、重构等。从我开发 JavaScript 的第一天开始,我就一直被这些问题困扰,希望未来有一天能有技术解决它们。

 

Rafy.js 的基础框架选型


当时在编写 Rafy Web 前端框架时,为了解决上述的问题,我挑选了几个方案。其中一个就是 TypeScript!我经过试用后发现,强类型的 JavaScript,确实可以解决这些困扰。但无奈的是,当时的 TypeScript 只是一个刚出生的婴儿,版本号 0.8,连第一个正式版本都没有发布,实在不敢用在真实项目上,由于项目的时间要求,所以不得不放弃了这个语言。

此外,我也考察了几个 JS 框架,最终选定了 ExtJs 4。一是因为我要做的是 SinglePageApplication 的 Web 界面框架,而 ExtJs 4 中带了大量的界面控件,非常方便使用;其次,ExtJs 4 提供了客户端的实体模型,这可以与 Rafy 服务端实体可以更好地结合起来。更重要的是,ExtJs 4 带来了全新的面向对象类型系统,这解决了面向对象设计的基础设施问题。虽说如 prototype.js 等其它框架也或多或少地支持了部分的面向对象设计,但是 ExtJs4 的类型系统,无疑是支持得最全面的:命名空间、封装、继承、接口、静态、单例、类型引用管理。所以,Rafy.js 最终是基于 ExtJs4 来构建的。

下面是当时 Rafy.js 开发完成后的框架类截图:

注意到,为了更好地解决开发过程中的上述问题。我们不得不人为地添加了一个《Javascript 类库开发规范》。该文档中的内容其实还是约定了一些封装、继承、多态的编写约定(ExtJS 给出的面向对象类型系统同样不完美)、以及一些代码的规范。这些问题,其实完全可以从语言、工具的角度解决,但是我们不得不人工约定、人工检查!

虽然 ExtJs4 大体上解决了面向对象设计的问题。但是由于重构困难,编写低效,导致 Rafy.js 的第一个版本只写了几千行,就已经感觉到维护起来很吃力了。

 

TypeScript


上面说了这么多,无非就是想表达:强类型很重要、重构很重要、工具很重要。而这些正是 TypeScript 语言设计的主要目标:“As we look to the 2.0 release, we ‘re focusing on two goals in addition to our main goal of bringing good tooling to JavaScript development.  The first is to align with ES6…….“

 

先来说明一下,TypeScript(强类型 JavaScript)的优势:

  • 更好的开发工具:支持重构、代码自动完成、代码导航、编译检查(静态代码分析:显示警告和错误)、程序包管理……
  • 更好的语言特性:类型指定、泛型、面向对象支持。
  • 兼容原生的 JavaScript 。

这正是我想要的东西,也是开发大型 JS 项目的利器。

 

但是,TypeScript 并不适应于所有的开发人员、所有的项目,下面是 TypeScript 适应的场景:

  • 适应较大、复杂的项目。例如 SinglePageApplication、大型 JS 框架、前端游戏。
  • 需要支持面向对象设计、高可重用性、组件化开发的 JS 代码。

下面是 TypeScript 不适应的场景:

一些简单的、不需要 OOD、灵活性高、动态性高的代码就不适合选择 TypeScript。例如一般性的 Web 应用或站点的前端开发,这种页面级的逻辑往往编写在页面中,即简单,也不需要 OOD;再如,JQuery 框架的开发,这种框架的目标是灵活、方便、动态,而不是面向对象,所以也不太适合,所以 JQuery 框架应该不会使用 TypeScript 来重写。

 

目前,TypeScript 已经发布了 1.4 版本。打开 Visual Studio 2013 的扩展管理器,即可安装:

 

接下来的计划


接下来,我将使用 TypeScript 来把 Rafy.js 重新编写。在正式改 Rafy.js 之前,我还会把之前做的这个 Web 游戏《Javascript 坦克游戏》改造一下试试。

敬请期待。

 

 

相关文章:

TypeScript MSDN Blog

TypeScript 官网

TypeScript 在线试用

Dart、CoffeeScript、TypeScript 和 JavaScript 哪种最适合专门学习?

为何TypeScript是任何事情的答案?

Type入门(JavaScript的超集)-译

时间: 2024-10-07 19:54:19

TypeScript 强类型 JavaScript – Rafy Web 框架选型的相关文章

no java web 框架选型 + web 前端框架选型 实践

以前,觉得web框架的唯一选择是 java spring 全家桶,但用起来踊实比较重,配置文件比较重,开发起来比较重,在专注于写业务核心代码时,已经要做不少框架配置的事; 后来用了下python ,比java自由,但又不想js那么太目由,而且也支持类,把python当成java用很好用; 又去查了一下python能开发什么,web也是支持的,试了flask ,开发很简单,可以很快专注于业务逻辑; python性能比不上java ,又查到了tornado ,性能要好些,而且是面向对象的封装,用着比

Atitit.js javascript的rpc框架选型

1. Dwr1 2. 使用AJAXRPC1 2.2. 数据类型映射表1 3. json-rpc轻量级远程调用协议介绍及使用2 3.1. 2.3.JavaScript客户端调用示例2 3.2. 2.4.直接GET请求进行调用2 4. atiri3 1. Dwr Dwr要自己一个method挑选了,麻烦的.. 2. 使用AJAXRPC 在调用RPC方法时,如果没有传递回调函数,则是同步调用:如果传递回调函数,则是异步调用. 2.1.1.1. 同步调用 2.1. 数据类型映射表 AJAXRPC支持基本

探讨后端选型中不同语言及对应的Web框架

在进行后端选型的时候,实际上我们要选择的是一个框架.后端领域所使用的技术和框架已经趋于稳定,我们只需要按我们的需要选择所需要的框架.当存在多个框架适合时,我们再选择适合的语言.不得不指出的是,当我们喜爱一个语言的时候,我们可能会偏爱于在这门语言里寻找可用的方案.这自然是有好有坏,好的一点是:我们可以成为这门语言的专家,不好的一点是:我们可能选择的不是最合适的方案. 让我们先来探索一下可用的语言,以及它们对应的 Web 框架(以下内容均为个人观点): JavaScript 按照当前的流行趋势来看,

web前端技术框架选型参考

一.出发点 随着Web技术的不断发展,前端架构框架.UI框架.构建工具.CSS预处理等层出不穷,各有千秋.太多的框架在形成初期,都曾在web领域 掀起过一场技术浪潮,可有些却仅仅是昙花一现,随着他们用户量的逐渐减少,社区也越来越不活跃.如:meteor.backbone.ember.knockout. 不禁感叹技术的更新换代来的太突然.为了追赶技术更新的脚步,保证技术实施的高性能,强兼容性,并且不会再短时间内被时代所遗弃.以下为目 前常见的主流技术参考,根据github关注度排名: 架构框架 框

[转]全 Javascript 的 Web 开发架构:MEAN

引言 最近在Angular社区的原型开发者间,一种全Javascript的开发架构MEAN正突然流行起来.其首字母分别代表的是:(M)ongoDB——NoSQL的文档数据库,使用JSON风格来存储数据,甚至也是使用JS来进行sql查询:(E)xpress——基于Node的Web开发框架:(A)agular——JS的前端开发框架,提供了声明式的双向数据绑定:(N)ode——基于V8的运行时环境(JS语言开发),可以构建快速响应.可扩展的网络应用. MEAN的支持者宣称,如果整个开发栈均能使用JS,

2017年要学习的JavaScript的顶级框架和主题

JavaScript的流行促进了一个非常活跃的由相关技术,框架和库组成的生态圈的发展.整个生态圈的多样性和活跃性越来越强,这让许多人变得越来越困惑. 你应该了解些什么技术呢? 我们应该将时间花费在哪里才能获得最大的收益? 现在公司招聘要求的技术栈包括哪些?哪项技术的发展潜力最大? 当前需要掌握的最重要的技术是什么? 这篇文章高度概括了你需要了解的技术,并附上了每个技术对应的链接,通过链接中内容你可以详细了解该技术. 记住,在学习的过程中一定要多动手写代码. 你可以通过 Codepen.io 网站

最好的6个Go语言Web框架

原文:Top 6 web frameworks for Go as of 2017 作者:Edward Marinescu 译者:roy 译者注:本文介绍截至目前(2017年)最好的6个Go语言Web框架.以下为译文: GO 语言爱好者的最佳Web框架 如果你是自己写一个小应用程序,那你可能不需要Web框架.但是如果你要做产品,那么你肯定需要一个好的框架. 如果你认为你有相应的知识和经验,你会自己编写所有的这些代码么?你有时间找到一个产品级的外部包来完成工作吗?你确定这与你应用程序的其它部分一致

自己动手写web框架----2

在上一节,我们自己写的web框架,只能运行显示一个HelloWorld.现在我们对其进行一次加工,让他至少能运行一个登陆程序. 首先看login.jsp <%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %> <%@ page import=" java.u

web框架之Tornado

Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本. 这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化. Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快. 得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以