如何避免设计过度与不足
来源:互联网 发布:弗洛伊德算法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 ——
- 如何避免设计过度与不足
- "设计不足"与"过度设计"
- 设计不足与过度设计
- "设计不足"与"过度设计"
- 谈谈设计不足(under-engineering)与过度设计(over-engineering)
- 避免过度设计
- 避免过度设计
- 如何避免过度绘制
- 避免过度设计:有所为有所不为
- 避免陷入过度设计的泥潭
- 避免陷入过度设计的泥潭
- 面对信息海洋,如何避免信息过度?
- 面对信息海洋,如何避免信息过度?
- 如何避免网站出现优化过度
- seo如何避免网站过度优化?
- 如何做才能做到避免网站优化过度
- 如何做避免网站优化过度被罚
- Android 优化性能之 如何避免--过度绘制
- linux中shell变量$#,$@,$0,$1,$2的含义解释
- EjbCa接口调用----2
- 静态成员变量的定义
- jquery选择器
- 数据结构开场白
- 如何避免设计过度与不足
- 通过SaxReader解析xml配置文件(上班第一天)
- 解决nginx 502 bad gateway--团队的力量
- Activity生命周期
- 敏捷不是银弹,敏捷是你的改进催化剂
- 〖Kindle Paperwhite〗升级、越狱、换屏保教程
- maven (生成war包时候同时生成jar包到lib)配置备忘
- 堆排序程序
- 嵌入式----------内存大小和硬盘大小的代码