为可变而设计
来源:互联网 发布:淘宝旺铺模板 编辑:程序博客网 时间:2024/06/08 09:43
昨天REVIEW了一份设计文档,数据模型设计的异常的"灵活“,令我几乎无法理解其中设计的奥妙...有感而发
记得以前我的师父在接手一个快烂掉的系统的时候,将该系统里面的源代码仔细阅读后,砍掉了其中近1/3的代码行,原因很简单,原来系统设计了一大堆”灵活“的设计,使得系统看起来很强大,实际上由于各个人员水平参持不起,反而使得系统变得脆弱,配置复杂难用,问题百出。
再举个例子,比如系统的配置参数,很多开发人员为了使得系统更加灵活,在系统中增加了很多配置参数,这种灵活的方式出发点是好的,但是可能带来一系列的问题,比如安装维护的问题(如何理解配置参数,配置参数的缺省值),比如良好的配置参数界面的问题等等,这些问题如果没有统一考虑,当配置参数越来越多的时候,系统将变得混乱不堪,难以管理。
同时,灵活设计应该是建立在全面的分析考虑基础上的,反思自己过去的一些设计,或者看到别人的一些”灵活“的设计,我发现有相当的设计,都是不全面,但是确是‘灵活’的,有用的,但是灵活带来的好处没有多少,系统的复杂性和稳定性却降低了。
早期的时候,觉得多线程可能提高系统的并发处理能力,因此在很多程序开发中总是喜欢用多线程并发处理,但实际上多线程带来的却是系统的复杂性和加锁后系统性能的下降,还不如采用单线程+消息度队列处理的模式简单可行。
灵活的设计是双刃剑,带来的是灵活,同时也带来了高度的抽象以及系统的复杂性,越复杂,意味着对系统开发人员的要求越高,实现难度越大,风险也越高。把简单的事情变复杂往往很容易,把容易的事情变简单才困难。
是否采用”灵活“的设计,如果没有客户的实际需求支撑,实际是一种应该尽量避免的做法;如果没有全面考虑清楚,则设计应该保留简单,清晰,可扩展,只要能够为未来的进一步的设计打好基础,就足够了。
应该记住:仅为可变而设计,不用担心未来系统的灵活性,我们会不断重构系统的!
记得以前我的师父在接手一个快烂掉的系统的时候,将该系统里面的源代码仔细阅读后,砍掉了其中近1/3的代码行,原因很简单,原来系统设计了一大堆”灵活“的设计,使得系统看起来很强大,实际上由于各个人员水平参持不起,反而使得系统变得脆弱,配置复杂难用,问题百出。
再举个例子,比如系统的配置参数,很多开发人员为了使得系统更加灵活,在系统中增加了很多配置参数,这种灵活的方式出发点是好的,但是可能带来一系列的问题,比如安装维护的问题(如何理解配置参数,配置参数的缺省值),比如良好的配置参数界面的问题等等,这些问题如果没有统一考虑,当配置参数越来越多的时候,系统将变得混乱不堪,难以管理。
同时,灵活设计应该是建立在全面的分析考虑基础上的,反思自己过去的一些设计,或者看到别人的一些”灵活“的设计,我发现有相当的设计,都是不全面,但是确是‘灵活’的,有用的,但是灵活带来的好处没有多少,系统的复杂性和稳定性却降低了。
早期的时候,觉得多线程可能提高系统的并发处理能力,因此在很多程序开发中总是喜欢用多线程并发处理,但实际上多线程带来的却是系统的复杂性和加锁后系统性能的下降,还不如采用单线程+消息度队列处理的模式简单可行。
灵活的设计是双刃剑,带来的是灵活,同时也带来了高度的抽象以及系统的复杂性,越复杂,意味着对系统开发人员的要求越高,实现难度越大,风险也越高。把简单的事情变复杂往往很容易,把容易的事情变简单才困难。
是否采用”灵活“的设计,如果没有客户的实际需求支撑,实际是一种应该尽量避免的做法;如果没有全面考虑清楚,则设计应该保留简单,清晰,可扩展,只要能够为未来的进一步的设计打好基础,就足够了。
应该记住:仅为可变而设计,不用担心未来系统的灵活性,我们会不断重构系统的!
- 为可变而设计
- 为可测性而设计
- 为移动而设计:交互设计篇
- 为移动而设计:交互设计篇
- 为移动而设计:交互设计篇
- 为移动而设计:交互设计篇
- 为移动而设计:交互设计篇
- 为JAVA性能而设计(一)
- 为JAVA性能而设计(二)
- 为JAVA性能而设计(三)
- 软件架构为谁而设计
- 为JAVA性能而设计(三)
- 为JAVA性能而设计(二)
- 为JAVA性能而设计(一)
- 软件架构为谁而设计
- 软件架构为谁而设计
- 软件架构为谁而设计
- 软件架构为谁而设计
- 让DataGridView显示行号
- asp错误提示
- 算24的程序
- class文件的反编译
- 搜索引擎原理
- 为可变而设计
- struts的web.xml里配置编码转换过滤器
- 数据加密算法
- 软件介绍: AFEPack 软件 (李若, 刘文斌)
- 用.NET非对称加密算法实例
- 我的学习计划
- ASP.NET加密技术的应用
- 超衫!不同人写的HelloWorld程序
- instanceof和Class.isInstance()