• 2005-11-16

    乱弹设计

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/1603983.html

    Tony:tony说设计-实践后的体会

    Tony的这篇blog让我想起了自己两年前第一次真正扛起一个项目架构设计的时候,意气风发,一门心思琢磨如何做一个漂亮的架构。不过,翻遍了整篇blog,我没有找到我心中的设计第一要素:正确性。是的,正确性!

    曾经的我就是一个为技术而技术的人,当一个项目启动的时候,我首先考虑的就是如何展现自己的功力,如何编写优雅的程序,而忽视了根本性的问题:需求。真正让一个软件产生价值的就是需求。少了需求,软件的意义也就荡然无存了。当一个人做事连自己的目标都搞不清楚的时候,不做错事,已经要感谢上天的眷顾了。没有正确的目标,其它的努力只是让自己在未卜之途上越走越远。有许多部影片为我们展示了邪恶科学家的威力,他们不是不努力,只是弄错了方向。

    在设计中,功能性需求的意义要远远超过非功能性需求。非功能性需求多半是为了让自己未来的日子好过一点,少了非功能性的需求,大不了是自己不爽,周遭的同事们不爽,有些糊涂的家伙说不定还会心甘情愿忍受这种折磨。少个功能性的试试,用户不掏钱,老板会给你好看。当然,让自己和用户都满意是我们的最高目标,我们犯不着只顾用户而忽视了自我,再者,功能性的东西可能不会追随我们一生,而非功能性的则可以在日后的日子里让我们不断受益。

    所谓设计,对个人而言,就是一个想明白怎么做的过程。如果只是在自娱自乐,想明白之后去做就是了。但是现在我们多半是与人合作,在这种情况下,设计是一个合同。既然要做一个设计师,我们必须考虑如何为别人(这个别人有时包括了自己)分配任务,这时候,我们就用合同——设计规定了双方的权力和义务,这样,在出错的时候,我们才能根据合同找到对应负责人。由此说来,契约式设计(Design by Contract)就是一件顺理成章的事了。设计就是分工,分工的目的就是为了各司其责,不明确的设计也就意味着责任不能对应到人身上。只要设计上存在盲点,我们就有机会遭遇互相推诿。Grady Booch曾经举过一个狗窝和大厦的例子,其实这就是没规矩和有章法的差异。我们通常所说的设计,多半是这种有规矩的设计,为了与人协作的设计。

    在我看来,谈到设计,最好的设计标准还是那条经典的“高内聚,低耦合”。了解了这么多的设计手法,体会那么多的设计原则,到最后,基本上都能归结到这条标准上来。设计的过程是一个分分合合的过程,先是把系统分拆,再把功能相近的东西合并,这样就形成了一个模块,有人叫服务、子系统、类、组件、函数、方面……,都是一回事。设计者需要考虑的就是让怎么去做这个游戏,以便让各人能够独立工作而不致于相互影响,这就需要请出“高内聚,低耦合”作为衡量标准。模块之间的合同就是我们常说的“接口”,它可能是函数调用,可能是参数传递,可能是共享数据,也可能是远程调用。总之,有了合同好办事,谁的问题谁负责。
       
    Tony有一点说得很好,设计是一种权衡的艺术,只有在不断学习实践中才能培养这种权衡的感觉。不要怕犯错误,只要实现了功能就是对的,设计是一种“只有更好,没有最好”的东西。大多数做设计的人是在为公司服务,这就决定了你想犯大错误都不现实,既然公司为我们提供了这么好的锻炼机会,我们不妨充分利用这些机会,让自己的设计水平不断提升,毕竟本事才是自己的。

    关于设计,胡扯了很多,到此为止吧!

    分享到:
    引用地址:

    评论

  • 这一点深感认同,但是在设计的时候会遇到很多问题,特别是面对不清晰的需求的时候,但是你又不得不把这个给整理出来。
    回复ustczxf说:
    痛苦中挣扎!
    2005-12-14 08:51:07
  • 有了合同好办事,谁的问题谁负责。这句强!
  • 看了Dreamhead对设计的理解真是受益匪浅啊!