在线存储与内容平台 Box 最近推出了一个开源的前端 JavaScript 框架,名为 T3 。这个框架的目标是通过将代码分解为小型的独立片段,从而解决在大型应用程序开发中所遇到的各种问题。
Box 的首席架构师 Nicholas Zakas在一篇介绍 T3 的博客帖子中说道,他的团队中有多个开发者共同在一个巨型的代码库中工作,因此最初开发这个框架的目的是解决开发过程中的一些内部问题。在 InfoQ 与 Zakas 进行的一次访谈中,他表示:“现有的任何选择都无法实现我们的需求”。
现有的大多数解决方案都是面向基于 MVC 的架构所创建的,而我们打算走一条不同方向的路。虽然市面上也有产品使用不同的抽象概念,但它们都不足以实现我们在 T3 中所包含的功能。
T3 中的组件共包括以下三种类型:
- 服务
- 模块
- 行为
在使用 T3 所编写的一个典型的 ToDo 列表示例中,该项目不仅展示了示例的源代码,同时也详细解释了每一段代码的功能。举例来说,在一段关于维护列表项状态的代码中,其描述是这样写的:
虽然所有的模块都是独立的,但每个模块都会与一个维护着 todo 状态的服务进行交互。todos-db 这个服务将负责在整个应用的生命周期中管理任务的添加、删除和标记为完成等工作。
T3 中服务的概念与 Angular 中的概念非常接近,比方说,开发者可以以这种方式在 Application 中注册某个服务:
Application.addService('router', function(application) { return { route: function(url, state) { history.pushState(state, '', url); } }; });
但与 Angular 中使用的依赖注入方式不同,在 T3 中的服务是通过对全局 Application 对象的请求获得的:
var router = Application.getService('router'); router.route('/home', {});
与 React 类似,T3 并不排除与其它框架共同使用的可能性。Zakas 说道:“T3 完全能够与 Backbone、React 或任何框架一起使用,它只是帮助我们更好地组织个别的代码片段,并且允许工程师们以他们所希望的任意一种方式将这些片段拼接在一起,成为一个完整的客户端功能。”
在 Hacker News 上的某个讨论中,开发者们普遍表示了对该团队工作成果的赞誉,但同时也对 T3 的组件和 Ember、Angular 和 Meteor 中的组件进行了对比。用户 DigitalSea 对此抱怨说,T3 中并没有提供任何具有新意的东西:
我实在看不出为什么 Box 需要开发一套新的 JavaScript 框架,是不是我漏掉了些什么?作为一个前端开发者,我确实对 T3 这个产品感到兴奋,但我实在看不出 T3 到底实现了哪些其它框架中缺少了的东西。
Zakas 表示,T3 尤其适合于某种类型的应用。“T3 当然也能够用于其它途径,包括 MVC 架构以及单一页面应用,但它的长处特别体现在于渐进式增强这一点上。”Box 在它们的桌面应用与移动 Web 应用中都使用了 T3 进行开发。
可以在 GitHub 上找到 T3 项目的详细信息。
评论