Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
xufei committed Jan 2, 2014
1 parent 88ddd41 commit 885b095
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions temp/05.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,23 @@ Web应用的组件化开发(三)

开发一个大型系统,最重要的是什么呢?是可控性。大系统最害怕开发过程失控,首先就要求整体架构是良好的,如果部件出问题,比较容易调整,整体出问题就麻烦了。所以,作为大型系统的架构师,最重要的感觉就是一切尽在掌控之中。那么,如何解决可控性的问题呢?

高手下棋,首重棋势。什么是棋势呢?这是整个一盘棋的灵魂,起手数子,布出全盘脉络,从此金角银边,皆不出掌握矣。对软件而言,一个好的系统,必定先有好架构,把架构掌控住,也就控制了整个开发过程。

Web前端这个领域有些像很多年前的客户端软件开发,最开始,大家先搞各种基础框架,从API的层面完善底层建筑,近几年,就纷纷在谈论模块和组件了,然后各种模式层出不穷,令人目不暇接。

之前这些,一般都是小规模的团队开发,如果是很大规模的团队,比如50人以上共同做一套东西呢?这一阵我想了很多,如果产品规模扩大,怎样让多个团队进行协同编程呢?他们共享一些组件,一起完善整个系统,让代码变得可控,变更成本可预测,重构风险尽可能降低,自动化的测试和发布过程。

这个方面,目前关注的人还不是很多,但在一些大公司,比如阿里和百度,已经很多有识之士看到了这里面可做的事情,并且有一些成功的案例了,比如百度的FIS。

JavaScript本身是一个比较松散的语言,这样的语言来做大型系统,可靠性方面需要做很多事情来保障。传统的构建大型系统的语言,比如Java和C#,都有很多反向工程的工具,比如根据代码生成UML图,这就从一个方面让架构师能随时了解自己项目的结构和依赖关系,有机会去调整一些不合理的地方,而这些调整又可以反过来作用到代码上,这些过程很大程度上能让项目的整体稳定,因为它的重构成本是比较小的,这些重构可以不太打断开发过程,在一次项目开发过程中,能够有机会多次重构,从而降低了很多风险,消除掉绝大多数隐患。
#1. JavaScript代码的架构

Web应用系统中,JavaScript是一切交互的核心,但JavaScript本身是一个比较松散的语言,这样的语言来做大型系统,可靠性方面需要做很多事情来保障。传统的构建大型系统的语言,比如Java和C#,都有很多反向工程的工具,比如根据代码生成UML图,这就从一个方面让架构师能随时了解自己项目的结构和依赖关系,有机会去调整一些不合理的地方,而这些调整又可以反过来作用到代码上,这些过程很大程度上能让项目的整体稳定,因为它的重构成本是比较小的,这些重构可以不太打断开发过程,在一次项目开发过程中,能够有机会多次重构,从而降低了很多风险,消除掉绝大多数隐患。

想要达到这样的效果,就必须在“拼装性”上做文章。一个大型系统,整体结构如何,模块关系如何,事件如何交互,这些都可以预先设计,在此之前,人们通常关注到的一般都是逻辑单元的隔离和依赖关系的定义。就如AMD这类规范所定义的,JavaScript代码按模块定义,并指定各自的依赖关系,这就有了良好架构的基础。

想要达到这样的效果,就必须在“拼装性”上做文章。一个大型系统,整体结构如何,模块关系如何,事件如何交互,这些都可以预先设计,在此之前,人们通常关注到的一般都是逻辑单元的隔离和依赖关系的定义
但同时我们也看到,如果仅以此种方式进行开发,在过程中,架构师难以直观地了解整个代码的逻辑关系,更难做逻辑上的重构

如果在构建一个大型系统之前就有机会把它的模块依赖关系和交互都描述出来,并且以图形的方式展现,每个开发人员都有机会看到系统的全貌,然后从这些图形化的描述再生成代码的基本骨架,填充内容,逐渐看着这个系统有血有肉,活泼生动起来,每个人的成就感都会非常强烈。

想要达到这些目的,我们的难处在哪里呢?需要把真实的代码和抽象的描述建立这么一种对应关系,能够实时反映彼此的变化。这种对应关系很难在代码中体现,因为代码是一个线性的东西,难以表达立体的结构。所以,我倾向于把这些关系放到外面,逻辑结构跟代码的物理文件分离,互相有联系。

那么,从

0 comments on commit 885b095

Please sign in to comment.