太白将进酒,共邀天下友

形位合成变动静,有无陈新映全域。 内外移思抽精明,连续离散归终果。

导航

[导入]敏捷实验室的一次争论

    起因:韬韬同学设计的权限管理模块中有一实体类Function(修改后的权限人员管理系统设计),该同学经过深思熟虑,从权限扩展的角度出发,为该实体类添加了诸如:ID,名称,创建人,创建时间...等属性.但我们目前可能需要,使用的仅仅是ID.于是,在敏捷实验室里引发了一场激烈的争论,战场从工作室到饭厅再到卧室,战斗姿势经历了坐着,站着,躺着,趴着......历经半个时辰有余.

    首先,张文韬同学的意见:我们目前能想到的,以后可能需要的实体属性,都添加到该类中,就算现在用不到,放在那儿也不存在什么问题,这样会方便以后的扩展.例如对于功能点的排序,目前我们并不会实现这个功能,但现在还是在Function类中加入这个排序值,以后需要实现这个功能的时候,就可以直接进行扩展.
    卢彦同学对这种观点颇有微疵:从敏捷开发的角度来说,我们应该遵循KISS原则.不能做到过度设计.对于这个实体类来说,应该是我们目前需要使用他的什么属性,就为其添加相应的属性.不能过于思考以后"可能"会用到的东西.如果这样,每个人都想出一些属性,那么这个类将充斥着很多无用的东西,容易混淆,也不利于维护.总之一句话:要用什么,就加什么,现在不用的,绝对不加.
    刘乐光同学举了一个使用特性的例子(最开始,我们权限控制的一种方式是每个方法都打上一个Attribute).这位同学的意思是如果能在刚开始,把特性想全一些,都一起写在方法前面.这样,免得以后假如要增加某一个属性,比如:排序值,而这个时候相关的方法有上百个,那这个时候再一个一个来加将会很痛苦.
    我的观点比较中庸一点:首先,从做系统的角度来说,考虑其扩展性无可厚非.但要就具体情况而言.比如在设计数据层的时候,就算客户没有说底层可能是Sql Server,也可能是Oracle...我们还是要用Provider模式.但是就文韬同学这个情况来看,如果仅仅是一个实体类,为了考虑其扩展,增加很多暂且不用的属性,确实是有悖Agile的思想.

    虽然大家争的面红耳赤,口水横飞,但最终还是达成了共识:张文韬同学的精神值得肯定,能从扩展的角度考虑系统的设计.但就这次实际情况而言,这样做是没必要的,以后的事情,以后再考虑~

    "争论不要紧,关键要达成共识!"

----2006.1.4 15:11 星期三


文章来源:http://www.agilelabs.cn/blogs/woody/archive/2006/01/04/468.aspx

posted on 2006-01-16 11:03  太白飞仙  阅读(536)  评论(0编辑  收藏  举报