设计与重构

《黑客与画家》中保罗谈到了设计者的品味,但他似乎是中欣赏者的角度去谈的。他谈了很多的特征,但是并未提出这些特征是如何实现出来的。我肯定没有那么多的艺术修养,所以注定我的品味比较差,但是我能体会保罗说的那些东西,并努力去做到,我想这大概就是我的理想。所以优秀的程序人员总是具备两个特征:天分和责任心,天分决定了他的理解力和创造力,而责任心决定了他对于自己理想的一种追求。

设计在软件中并不是一件有趣的工作。因为大多数的软件都不是被设计出来的,而是随着需求的推动而逐渐改进出来的。因此设计者其实也没有被吹嘘的那么神。软件的设计分为好几个层次,按照重要程度可以分为:功能设计、界面设计、实现设计。功能设计明显最重要,它决定这个软件能干什么,完成什么事情。功能设计基本上不可能一个人完成,如果真的由一个人完成了,那也注定是失败的。这个层面上的设计其实完全不需要软件工程师的参与,但是设计者也不能完全不懂软件,否则实现的难度太大这个软件就会有夭折的风险。这个设计一般也不会有什么新意,因为它必须紧贴业务,贴的越紧软件成功的可能性就越大。所以设计者必须要懂得业务而不是瞎猜,否则软件不可能成功。这个层面的设计在某些时候也被称为软件架构。所以其实很多贴近业务的系统往往没有什么所谓的架构,因为业务的框架是起决定性因素的。界面的设计我也不想多说,因为实在是不懂,而且我觉得国内外除了苹果公司以外其实在这个方面都做的不咋的。总之这个做出来不难,但是做好了不容易。

实现设计才是真正我想说的。因为这个往往是大多数软件公司比较忽视,而且也是很难做好的地方。但其实实现才是软件公司的主要工作,大多数时间和大多数的人其实都是在做这个事情。实现设计的目的就是如何用合适的软件技术把前两个设计表现出来,并且可以工作。实现设计还有一个重要的目的就是如何通过设计来提高开发的效率,并降低开发的成本。大多数软件公司在这个时候都会表现的比较急躁,很多管理者总是希望最快的看到结果,因此便利于重构的设计就显得十分的重要。那么什么是便利于重构的设计呢,总的来说有两点,其一,尽可能的消减代码量,因为代码越少就越容易重构。其二,让复杂的逻辑变得平坦。做到这一点其实只有一个方法,就是分析法,尽可能的把复杂的东西划分成简单的相互独立的部分,然后再把这些独立的部分组合在一起工作。所以面向对象的技术之所以流行这个方面是一个很大的原因。因为利用面向对象技术的封装以及继承特性很容易的就可以把复杂的东西划分成简单的东西然后组合在一起工作。实现者其实也是设计者,他的作用其实最大。因为他对于代码有着决定性的影响。所以我觉得软件公司必须重视实现。一定要在这个方面有着自己的过程控制机制。并千万不要在这个方面想办法消减成本。你消减的每一分成本都有可能对软件的质量造成致命的伤害。






转载于:https://my.oschina.net/clarkhill/blog/209105

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值