系统设计之道
系统设计可谓是软件系统的灵魂,对软件的编码以及后期的运行维护都参生了很大的影响。好的系统设计不但要满足系统的基本要求,还应该考虑系统以后的扩展性并留下相应的接口。同时还要符合业界标准和规范,使程序员可以根据设计文档很快的了解系统功能需求进而做出编码。而这一切,需要一个很优秀的系统设计师。那么怎么样才能成为优秀的系统设计师吗?这里我根据自己的经历加上小小的智慧来谈谈自己的一些看法和认识。
从2003年开始做系统分析和设计到现在,期间也走了不少弯路。有时不知道应该学什么以提高自己的分析设计水平,用的工具也很杂。到现在觉得有了自己的认识:分析设计最主要的是自己的思想,对项目的认识。而工具只是将设计思想表现出来而已。下面我将顺序说明怎么样从一个程序员走向系统设计师,为了清楚的表述,将会拿作家和建筑设计师的例子:
1. 作家写一部小说,前提是总要会一种语言,不管是汉语或是英语,否则将无穷谈起,一种语言都不会说明他是一个文盲,一个文盲是不可能写出一部小说的。同样一个建筑设计师在做一栋大厦的设计图纸时,设计师必须要会画线,直线、曲线、圆等,不然他也不可能画出一栋大厦的设计图纸。那么一个软件系统设计师首先要熟练掌握一种语言。VB、VC、Delphi、Java等都可以,并且参与过实际的项目开发。也就是说要做一个成功的设计师首先你要先成为一个程序员。
2. 熟练掌握一种语言,并实际参与项目的开发后,会对系统设计有一个大体的认识。特别是国内,大多数公司没有将分析设计和编码分开,往往是一个项目从需求分析开始一直到实施都是同样一组人在做,而在这个过程中,几乎所有的人都参与了系统的设计。我们这里不去讨论这种方式是否合适,要说明的是一个国内的程序员基本了都参与过系统的分析设计工作。那么这时对系统设计就会有一个基本的认识,但还没有形成理论化、系统化。就像一个作家,在写一篇文章之前已经读过很多名著和别人写的文章。当他决定自己写一篇文章之前,根据他自己的读书体会和要写的文章内容,会先有一个大致的提纲,来描述这篇文章的重点和先后顺序,也就是一篇文章的框架。一个建筑设计师在做一栋大厦的设计图纸时,已经清楚了大厦大致的高度、外观、占地面积、内部结构等,这时他需要将这些设计思想表达出来并且逐步的完善和细化,为了这个目的,可以在纸上画出来、也可以做一个立体模型。而一个程序员要独立开始设计一个项目时,已经对项目要完成的功能有了一个清楚的了解,需要设计这个系统的框架并逐步的细化,而在这个过程中,需要有一种方式来表达这种设计思想,就像一篇文章的提纲一样,可以按顺序写出来,也可以在纸上画出来。我这里建议去使用UML(Unfied Modeling Language),借助UML的各种视图可以很清晰的表达你的设计思想并有助于完善这种设计思想。这里没有必须谈UML的优势和劣势,在没有一个新的设计表达方式被另一个天才提出来以前,UML无疑是最好的。这个阶段的核心就是将设计思想表达并完善,所以我建议去学习并精通UML,而且在使用的过程中能够扬长避短,取其精华。也可以在网上找一些成熟的设计案例来读,吸取别人的经验。同时,自己在做设计的过程中,学会总结,积累经验,找出自己最喜欢的设计表达方式。
3. 当作家列好了提纲,确定了文章的重心以后,在开始写文章以前,会确定采用一定的书写手法,比如倒述、第一人称、从故事的中间或者结尾开篇等;就像2003年网络写手慕容雪村的小说《天堂向左,深圳往右》,完全打乱了时间顺序,可以用一句话跨越时间和空间,我很欣赏这种写作方式。或者在写作的过程中,在某一些重要的环节和段落,要采用一些精彩的词句、华丽的语言,提出深邃的思想等,以完美的表达方式来突出整篇文章的重心和亮点。同样一个建筑设计师在做设计图纸的过程中,对于大厦的整体外观、风格、楼层的内部设计等,都要根据整栋大厦的整体要求做出完美的选择或者自己根据现有的设计风格结合自己的思想进行创新。那么一个软件系统,在做设计的过程中,不管是为了解决特定的问题,还是提升系统的性能或者完成系统自身的功能,在系统中的一些环节中或者一些模块中,都要采用一些设计方案,也就是设计模式。设计模式也可贯穿整个系统,也可以局限于一个模块;整个系统可以采用一种设计模式也可以多种模式相结合。同样在一个模块内部也是如此,这要根据系统的要求而定。就像建筑设计师可以将一栋大厦的外观设计成十八世纪的法国风格,将里面的某一个楼层内部根据需要设计成美国现代风格,将一个房间设计成中国的古典风格。设计模式可以参照目前已经成熟的23种设计模块,但这不是绝对的,可以根据自己的经验进行总结,也可以从网上找一些成熟的设计方案做参考。这个阶段的核心就是确定系统内部各种关系,设计模式无疑是最好的解决方案。这个阶段也可以称为是详细设计。
4. 到目前为止,我们的建筑图纸已经做完了,需要用一种方式去完整的表现出来,可以用CAD做多维图形,也可以从不同的层面做成平面图形,也可以做出实际的物理模型或者效果图。在一个软件系统,我们的设计思想已经完善,各个点和环节都被周密的考虑和设计。需要通过一种介质来完整的表达出我们的设计思想,而做这种介质需要一些特定的工具。比如:Rational Rose、Together等。我这里推荐使用Rational Rose,它现在有多个版本,如果在。net下开发,有Rational Rose For 。net;如果用Java做开发有Rational Rose For Java;而且还可以嵌入到一些开发工具中,比如Eclipse。而且它对UML的支持也达到了完美的程度。当然如果用JB做开发,可以使用Together。工欲善其事,必先利其器。设计工具的选择是非常最要的,特别是在开发大型系统的时候。记得一位设计大师说过,他做设计从不使用软件工具,直接用铅笔在纸上画图。天才。如果你觉得自己不是天才,还是老老实实的去精通这些设计工具吧。
当然一个优秀的系统设计师需要掌握的知识当然不止这些,而系统设计也是随着技术与业界的设计方法和理念不断的完善和发展。

解决方案 »

  1.   

    看来楼主所在公司还是比较规范
      

  2.   

    只是个人的一些认识,自认为还很不完善并且有局限性,写出来就是希望大家都能谈谈自己的看法.
      

  3.   

    //大多数公司没有将分析设计和编码分开
    的确是这样。
    而且详细设计没有或者做得很粗, 基本是概要设计完就直奔编码了,给编码人员得可能就是一个需求或功能要求,所以编码的其实也做了很多设计工作,相当详细设计与编码同步进行。所以一些媒体吹嘘的代码工人需求量大就是个笑话
      

  4.   

    规范化是个过程,而我们正经历这个过程.希望大家一些来讨论,提高我们的设计能力.
      

  5.   

    向国外的公司学习一下啦。。