系统设计总结(一)

系统设计总结(一)

 

一、两种不好的设计

 

1. 对问题域已知时,把简单的问题复杂化。

本来功能可以用简单的方式完成,却以需求无限变化(并且变化不可知)为由,把可以简单解决的方案设计得极为复杂,其实其中90%功能用不上(而剩下的10%功能用简单方式就可以实现),最后导致系统需要不停维护,完工日期变得无限期延长。

 

2. 对问题域未知时,把复杂的问题简单化。

认为需求太复杂,很难完全设计出来,即使设计出来了,也无法实现,不如把设计简单化、功能简单化。但在系统完成后,真正使用时发现,这种“简化”的设计和实现,根本不能满足系统的需求,最后重新修改系统设计,增强系统功能。

这种情况下,往往不是简单的重构,而是基本推翻了以前的核心业务,导致业务模型、数据库结构、测试、系统文档全部重写。

 

二、正确的做法

 

1. 系统在设计前定义出具体的目标,这个目标是经过反复推敲、高度提炼的,今后所有的设计与实现都要围绕这个目标进行,凡是偏离或者与目标无关的功能全部砍除。

 

2. 设计时必须能够完全实现目标,不允许只实现部分目标,另外的目标不予理睬。

但“完全实现目标”并不意味着在实现前设计出全部功能----这是瀑布开发。

在我看来,一个系统往往可以分割为多个子系统,一个子系统往往可以分割为多个功能模块,而每一个功能模块,就是一个小目标,这个小目标的需求和功能相对独立。

我们实现一个小目标时,还是要尽量地进行完整设计,不要认为敏捷开发或者重构就是只考虑容易搞定的,不容易搞定的以后实现或者留作重构。

我认为当目标明确时(明确的目标来源于用例),设计必须考虑到所有功能。

 

3. 把稳定的功能(无论它是简单还是复杂)提炼出来,按照共同的约定,把它简单化,但要少用继承,多用组合。

 

4. 如果问题域复杂而易变,或是复杂且不确定(比如促销方案),那么就抽象出最简单的接口,做成插件形式,把具体的业务逻辑让插件实现,然后以统一的格式返回结果。

posted @ 2009-04-29 22:18  深圳大漠  阅读(1690)  评论(0编辑  收藏  举报