万事欠备,设计先行

如果项目的数据层结构还没有确定,如果开发人员对项目还有不解,如果界面短期内还没办法确定,该怎么开发?

我目前就遇见了这样的情况。我对我们公司的项目还有很多不了解,数据库100多张表知道意思的也没几张,界面需要更换,但是还没有做出来,而且短期内公司的美工正在做其它的事情,项目的原先开发人员也在给原先的项目加新功能,因为新功能急用。我已经大致清楚了程序运行的流程,而且已经在原先开发人员的帮助下照原先的流程设计出来了新的。变动应该不会有或者不会很大,最多也就是往外扩展。分析员发给我一份子系统的简单需求,我在开发的时候发现,开发存在很大风险。很可能我开发的东西并不是美工想要的甚至数据库结构如果稍微变动的话,我的修改量将会非常大。

该怎么办?经过几天的思考,我认为可以忽略所有细节,而只关注设计。

那哪些部分是该忽略的而哪些方面不该忽略呢?那就看程序围绕的什么做了。从软件工程上说,所有的编码都是围绕前期的需求分析做的,那么不该被忽略的是需求,美工围绕着需求做,而数据库结构是为软件流程服务的。就是说,我们只要抓住系统的需求,就可以专注于设计了。

一、怎么进行设计?
怎么进行设计那就要先看为什么要进行设计了。设计的目的是什么?OOP的目的是什么?从软件历史可以知道,软件开发方式,程序语言的进化都是围绕着需求变动在发展的。需求要变动,那就要设计出能以不变应万变的流程来。

这样又回到原来的话题,既然需求会变动,那么围绕着需求的设计是否可行?

没有银弹,如果有银弹的话现在根本没有各种各样的开发方式了 ,早就变成一种模式了。我说这句话的意思是,需求变动是可以预计的。如果不能预计需求的变动,那么你如果开放出来的程序能满足变化,那不是成银弹了么 ?所以需求的发展是可以预计的!

既然可以预计,那么我们的设计就是围绕着需求和需求如何变动来策划的。

比如,我现在开发一个留言本。那么我需要收到用户发过来的数据,然后存进数据库。如果留言本的主人来了就可以观看,并且可以删除。这么一个简单的流程很容易设计。

那么如果我现在需要留言本的主人可以回复,用户可以发公开的留言,对我们原先的设计会造成多大的影响呢?

实际上如果你原先设计得很好,预期了这个需求就很容易设计了。你可以给留言赋予权限。有什么权限的人可以看,有什么权限的人可以编辑,有什么权限的人可以回复,有什么权限的人可以删除。添加了新功能,数据库结构并不需要更改,就能直接扩展了。

二、设计的具体方法

我们不关心数据库结构,不关心类会被在哪个页面用到,那关心什么?排除法得出,我们只关心类得 名称,命名空间的名称和他们之间的相互关系,以及如何把这些与设计出来的业务核心捆绑。我们只根据需求设计类的名字,思考类改完成的功能,类和其它类之间有什么样的关系,做好注释,其它的都不用理会了。设计完了,一切就都清晰了。

我们只需要专注于抽象。

三、专注设计的好处
从第一步,我们注意到,如果要设计出可扩展程序,必须清楚业务流程。而业务流程不可能凭空被设计出来,需要开发人员和分析员一起策划。

专注设计能让开发人员尽早遇见设计上的问题与分析员沟通,尽早解决设计上可能会存在的问题。从而把风险降低到不需要对设计做大手术的水平。

四、专注设计的缺点
如果设计完了,完成细节的时候发现设计上的大问题,那么项目将会崩溃。所以,设计一定要保证不能存在大问题。不过,其它任何设计方法似乎都有这个问题。

五、细节处理
设计完成,开始处理细节,和搭积木一样垒就可以了。如果遇见效率上的问题,可以用存储过程(数据层的逻辑 )或者缓冲等方法解决。

以上是个人观点。目前正准备实践该观点。我还没有看到介绍这样开发的文章,所以阐述得可能不够深入,并且可能存在严重错误。如果大家看到过这类开发得书籍,还请介绍介绍,好让我能更好得把握设计。

http://www.cnblogs.com/birdshover/
2007年1月27日

posted @ 2007-01-27 20:17 Birdshover 阅读(2171) 评论(16)  编辑 收藏 所属分类: Thinking about develop

  回复  引用    
#1楼 2007-01-27 21:15 | PPP [未注册用户]
我也用.Net开发了一个系统 www.91zhe.com 有空指导一下!
我们的业务还在变化,我借助了现成的DNN框架就减少了一些风险!
我建议用现成的可拓展的框架,可以降低风险!
  回复  引用  查看    
#2楼 2007-01-27 23:26 | 极地银狐.NET      
楼主英明,小弟我实在看不懂.
  回复  引用    
#3楼 2007-01-28 06:22 | bs [未注册用户]
一堆假大空的废话
  回复  引用  查看    
#4楼 2007-01-28 09:07 | a11s.net      
没办法工作的都先放假.休息一天,回复HP&MP.梳理一下结构.第二天放假的都回来开会!
会议可以持续三天,到大家都明白了,问题全都解决了为止.
  回复  引用    
#5楼 2007-01-28 09:50 | 剑在上海^^ [未注册用户]
高手看到的是一种思想,菜鸟看到的是一种技术。
LZ要说的就是这句话吧
  回复  引用  查看    
#6楼 2007-01-28 16:50 | chy710      
这种项目很可怕,不知按您的做法,项目最终效果会如何?
  回复  引用    
#7楼 2007-01-28 19:10 | kenblove [未注册用户]
希望楼主有实现思想的能力...不然后果就太严重了.
  回复  引用  查看    
#8楼 2007-01-29 08:55 | 亚历山大同志      
楼主说的是XP?
  回复  引用  查看    
#9楼 2007-01-29 12:52 | Cure      
看出来楼主的意思就是设计要灵活,能够很好的应对变更。
  回复  引用  查看    
#10楼 2007-01-29 13:02 |       
可以尝试读读 Domain Driven Design
  回复  引用  查看    
#11楼 2007-01-29 13:24 | woodhead      
楼主的做法,应该不算是XP方法吧?
我也碰到过楼主这样的情况,也需要在自己不熟悉业务的情况下负责设计一个系统。总结经验,给楼主几个建议:
1. 不要指望有“如果设计完了”的时候,设计自己不熟悉的业务必然会在设计上出现大的问题,所以你的设计必然是一个不断持续修正和完善的过程。
2.首先对系统中的关键领域对象进行分析,完成后尽早选取一部分较复杂的模块实现,实现过程中务必要求优良灵活的OOP设计,因为当项目完成后你会发现一开始做的很多东西经过若干次重构,都已经不在它原来的位置上了。
3.一定要让对整个系统比较熟悉的老员工尽早开始动手编码,不要指望通过几次会议能够让别人完全理解你的设计并发现其中的不足,只有在编写代码的过程中,甚至是组装模块的过程中设计的问题才会真正暴露。
4.持续重构系统
5.你一定要让老板明白,把一个系统交给对业务不熟悉的架构师设计是有很大风险的,他必须要接收系统交付延期,开发成本升高的可能。
6.建议在开始之前参考XP和FDD两种方法体系
  回复  引用  查看    
#12楼 2007-01-29 14:44 | 笨小苏      
方式不重要,重要的是按时按质完成任务
老是在学习所谓的管理方式,最终把自己本身的创造力给磨灭了
  回复  引用    
#13楼 2007-01-29 14:48 | 革命老前辈 [未注册用户]
设计也是软件开发的次要任务,楼主了解软件开发的主要任务么?
  回复  引用  查看    
#14楼 [楼主]2007-01-29 16:03 | BirdsHover      
@枫
目前正在看DDD,英文版的看得有点慢。


事实上这样开放有很大的特殊性。
1、新开发员无法加入到老项目中开发。因为老项目是部分修补,而且寿命不长了。
2、新开发人员不可能每天休息,要不老板就不可能请你来了。
3、有开发经验的人难道真的对项目流程一点都不清楚么?我认为还是清楚其中的大部分流程的吧。因为开发的东西专业性并不是很强,而是给大众用的,并不是银行系统,物流系统等需要很强专业知识的行业。
4、我直接面对的是系统分析员。我按照他的要求来做,背离项目开发了么?没有吧!如果后面其他人加入进来,那么他们要适应目前的设计。而不是根据他们的要求随意变动设计。
5、在细节编码时暴露问题那是因为使用了很特殊的或者大家不熟悉的,或者新出来的技术。如果对使用的技术已经99%了解,不会产生大问题吧?
  回复  引用    
#15楼 2007-01-30 12:44 | jyk [未注册用户]
同情搂主,其实我想银弹也是可以实现的吧。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-02-01 11:23 编辑过


相关链接: