请教各位如何应对快速变化的需求?

07-02-13 kevin1167
banq大哥好,大家好,第一次发帖,假如有个联通的项目,其中一个功能,让用户能查询当前联通旗下所有类型“卡”(比如小灵通,乡镇卡之类)的付费标准及与卡相关服务项目,但是问题来了,最近联通在年前新增一个卡类型,如意卡,有它的自己的付费标准,可能还有期限要求,如它要求过了3月31日又是另一个付费标准了!其实现在我们做项目很多时候都没有预见性,下面是我个人的尝试方案,请bang大哥和大家不吝赐教:

1。建立一个卡类型管理画面,把所以信息保存到数据库,即使将来还有新卡类型也只是增加记录,但是banq大哥好象很不主张以数据库为基准的设计,呵

2。在项目中编写卡的接口或者是抽象类,将来有了新卡类型用反射获取相关信息

但个人觉得有点麻烦,是不是将来联通新增一个卡类型,就又要我们开发公司帮忙开发一个新的子类插入系统中,虽然可能不需要重新编译整个项目,但是还是觉得不方便,是不是我认识有误,用反射做开发不是这样的?

Coolyu0916
2007-02-13 10:28
设计的好处就在于使用的方便、维护的方便

做设计的时候要做成本的分析,怎样避免最困难的事情

跟用不用数据库没有任何的关系

如果方法一的维护成本低于方法二的维护成本就应该选择方法一

反之亦然。

没有绝对的设计,也没有一成不变完美的设计

用户需求的变化是必然的

但是如果你做软件的时候始终站在用户的角度而不是自己的角度

设计起来就得心应手了

scofield
2007-02-13 10:49
card(ID,卡名....)

资费(ID,fk_cardid,起始日期,结束日期,收费标准....)

card 1--------->n 资费

kevin1167
2007-02-13 16:43
谢谢Coolyu0916 的回复,明白你的意思,想问清楚一下,假如你在项目中遇到我说到情况,你一般怎么设计呢,具体一点,先谢了!

Coolyu0916
2007-02-13 17:07
因为没有了解你的整个的架构所以只能简单说一下

不知道是不是需求只是你说的那一点,还是已经有了现有框架需要增加这个功能

如果有了现有的框架,那么你基本不需要想什么,添上代码就好了

如果是自己新建的,那我就想问问你要查这些卡,目的是什么??

为了展示??为了计费??还是只是一个中间变量类型??

如果查询是最终目的,可以设计的很简单,三层结构访问就可以了

计费的话2层结构就够了,一个简单的软件就可以了

如果是中间变量类型那就需要重新定位它在系统中的位置了。

banq
2007-02-14 11:54
>是不是将来联通新增一个卡类型,就又要我们开发公司帮忙开发一个新的子类插入系统中,虽然可能不需要重新编译整个项目,但是还是觉得不方便

我个人认为是这样,业务模型变化,必然带来代码更新,不能幻想机器人帮助我们来完成业务代码。象你试图通过数据库记录变化,替代业务变化,这可能在一定情况下有效,但只能是一个临时之计,业务代码也会要修改的。

我们可以通过好的设计降低代码更新量,比如四色模型设计中,我们可以设计一个卡类,用来描述卡的一般属性通用特性,概时,需求变化时,只要实现特殊部分就可以,比如如意卡的特殊之处,围绕特殊之处实现一些功能添加修改。

采取OO,只是比以前更快更方便应对需求变化,而且,不会担心一旦修改,牵一动百的影响,系统只是比以前健壮。

如果还希望更快,通过MDA这些工具,UML图改了,代码就出来了...当然目前不是非常成熟。

kevin1167
2007-02-14 15:39
谢谢banq大哥的指点啊,我自己也感觉数据库上一定修改不能从根本上解决问题,可能以前做的一些项目都是从数据库为起点的开发,所以最自然的往那方面去想,但是看了banq大哥的“数据库时代的终结”一文,感觉设计思路上开阔很多!谢谢,另外banq能具体帮我讲讲你说的四色模型设计吗?以前没有接触过这个概念,自己学习中..

Coolyu0916
2007-02-14 22:01
我也很想知道什么是四色模型设计

也想知道怎么不通过编译源代码和数据库怎么加入新的卡类型

希望banq不吝赐教

详细说明

banq
2007-02-15 10:17
四色原型:

http://www.jdon.com/mda/archetypes.html

四色原型一般在MDA中起初使用,是对需求的一种科学分析方法。

它与领域模型区别是:

Evans DDD是一种MDD,比MDA/DSL/DSM自动化程度差一步,是现今我们普遍采取的方式。四色原型比领域模型更抽象,原始。

Coolyu0916
2007-02-15 11:00
刚刚将四色原型看了一遍

受益匪浅

不过有一些不明白的地方

比如说你需要添加一种新的role

如何动态的添加而不需要编译源代码或者添加数据??

猜你喜欢