如何避免设计过度与不足

来源:互联网 发布:弗洛伊德算法java 编辑:程序博客网 时间:2024/04/24 11:49

        在知乎上看到关于“什么是软件开发中的过度设计”的问题,其中一个回答很形象,摘要如下:

        假如今天你打算开发一个知乎的客户端,那么一个过度设计的"你"就开始琢磨了,嗯,我要面向对象,我要可扩展,我要牛逼!开始设计,首先业务和界面要分开,先用库的形式搞一个知乎sdk,然后你就搞了一大堆接口,可是接口还没实现呢,你又想了,我要通用啊,现在的社区网站有一定的共同点,我要把他们的sdk封装到一起!对,这样牛逼,回头我一开源说不定大家还会表扬我呢。然后你就开始阅读各种api文档,微博,腾讯,天涯,豆瓣,人人。。。你甚至把email都放进去了,作了很多看起来特别伟大的抽象,终于把sdk设计好了。这时候你又想,接口通用还不够,我的实现也要通用,对,把ios,android和桌面系统的底层都封装起来。。。这事有点难,你搞了好久差不多可以了。然后,不出意外的,你又想了,所谓mvc,v也要牛逼啊,我也要做成统一的,最好我这个软件同时支持各大网站,以后升级的时候把库加进去,一配置就支持新的网站,对,插件机制!这个好,eclips就是这样嘛!跟大师学没错。。。于是你开始设计抽象ui部分,等这些都做完了,你还不过瘾,你还要内嵌脚本,外置css,各种跨平台,各种松耦合,你甚至要搞一个objc到java的代码生成器,这样就横跨ios和android了。。。

        
        设计过度其实就是用户想要杀鸡刀,但你设计出了杀牛刀甚至是电锯。

        稍加留意,可以发现当你在设计的时候有了下述想法,就要警惕是否在过度设计了。

  • 设计决策以是否面向扩展为首要衡量标准。
  • 解决问题的第一思路是设计模式。
  • 相信软件质量会随着使用的框架、库的增加而提升。
  • 追求每一个类、层的可替换性。
  • 如果没有类图等外在因素的辅助,很难看懂你的代码。
  • 大量零散接口的引入并强调是面向接口编程。

        另一个极端就是设计不足,设计出来的系统复用性差,扩展性不强,不能灵活的应对变化,简言之,设计没到位。这个的特征不太好总结,很容易退化成代码问题,我只总结了这样三个危险现象:

  • 头脑中没有设计观念,写代码时写到哪想到哪。
  • 代码随意堆砌,可见性、生存期使用混乱。
  • 设计方案无法应对合理的需求变更,维护成本提高。

        那么要怎样才能减少或避免设计过度与不足呢?

  • 先设计后编码。老生常谈了,可惜知易行难。
  • 先以设计过度为目标,当能意识到已经过度的时候再来纠正,从中提高对‘适度的设计’的理解。如果不具备设计过度的能力,往往也不太清楚什么是‘适度的设计’,从过度往下降会更容易,但从不足往上升却很难。所以还是要大胆的去设计,然后才能对设计进行评价。
  • 提高理论认识,多与他人讨论设计方案以减少设计不足。多交流,把思维用语言表达出来,在此过程中会发现自我的不足,别人也会指出一些没考虑的漏洞,以此来弥补不足之处。
  • 在迭代中使用演进式设计以限制设计过度。以满足需求为出发点,不追求完美的永恒的架构,只追求演进式设计过程,通过迭代不断的调整和优化。

——欢迎转载,请注明出处 http://blog.csdn.net/caowenbin ——

原创粉丝点击