我们需要顶层设计
 
背景:

    某公司,建立的程序又被推倒,外人觉得很奇怪,这个程序的主管非常敬业,关注到了程序每一个细节,甚至包括每一个按钮的文字和位置。
    这个主管很委屈,他说,他完全是按照客户需求制作的,客户怎么说的,他就怎么做了,难道有错?!
    但是,这个程序还是被推倒了,当然也有其公司派系斗争的因素在里面。但是,不得不引起我们的注意,这个程序败就败在了太拘泥于细节,而忽略了顶层设计被客户牵着鼻子走,想知道客户自己说什么吗?
    |
    |
    | 
    |
    客户说:<我说的就一定对吗?>
 
 
 
顶层设计——规划。
 
当提到这个词的时候,很多程序员很不屑,规划?不就是需求吗?和架构设计有啥区别?就写写PPT有那么重要吗?
我们说一个好的程序开发的设计应该包含如下层次,如下图所示:
 
 
一、设计分为三个层次
 
1、第一层次,信息系统规划(项目或产品规划)

 
  我们称之为规划,这个层次是对整个系统在宏观中的地位的把握。如果从一个大型企业的高度看,应该包含整个企业的时间与空间的集合体。

什么是空间?
空间就是涵盖到企业中的各个数据环节以及保证关键的数据流走向的合理,并确保调度优化。顶层模块设计需要研究需要关注的各个业务块之间的结构关系,研究业务框架的整合模式。
行业内比较有名的业务框架,如:eTom业务框架,ITIL等。

什么是时间?
时间就是,企业未来发展以及企业所处行业的整体发展的预期,要兼顾发展才可以从规划的角度使应用系统不过时。
只有从时间和空间的三维角度进行思考,才可以得出合理的规划。
 
2、第二个层次,是架构设计
 
架构设计是从程序架构的设计方式角度出发,建立一种合理的程序逻辑的构架方式,也是时间与空间的集合体。
空间:
满足设计会话,利用架构设计适应各个模块的构建方法,使程序逻辑运行于程序的各个模块中而游刃有余,尽可能避免超出架构设计模块无法构建的应用需求。
时间:
满足顶层设计规划,同时兼顾程序未来发展,好的架构设计构造出的程序可能会用很多年不会变。
 
3、第三层,是微观设计
 
这个是程序员在处理具体应用程序编写程序时的创新与设计,当然其首要前提是满足上面两个层次的设计。
 
二、架构设计与规划的区别
 
架构设计是程序框架构建方式作为其关注点,更多的探讨的是改程序如何满足规划需求的结构健壮性。

而作为顶层设计的规划,更多的是从产品、系统、业务,整体宏观的角度考虑整体的模块地位与框架,并不关注其具体实现方法。
 
比如,业务逻辑分为几个层次这个问题是规划,这几个层次或模块之间的数据关联方式用EAI还是EDI还是WebService还是什么方式的问题就是架构设计。

三、忽略架构设计和规划设计的危害

业内相当一部分人都认为,找几个会编程序的程序员,就可以做出产品,就可以接活儿了。

可能可以,然而,如果是一个需要若干年持续进行的产品或系统,没有架构设计是短视的,其前期很快搭建后期捉襟见肘。

还有想当一部分人认为,有了架构设计和几个会编程的程序员就可以做出产品和搭建应用系统了。

这也确实可以,但是如果面对一个更复杂的系统,缺乏顶层设计就会陷入关注细节关注需求,被需求牵着鼻子走的路上去。
 
 
钟声,《Java程序员,上班那点事儿》作者
2012-4-18
 
谢谢大家!!