我的上一篇文章《生产流水线模式》发布以后,引起了很多朋友的关注,大家发表了很多意见,现在我针对留言中大家提得比较多的问题,做一个总结性的回复。
问题一:我的敏捷开发架构是不是只实现了简单的增删改查功能?无法适应复杂的业务需求?
回答:当然不是,正如我在上篇文章所提出的:定义一个基类,实现IDataEntityProvider接口、实现对数据的增删查改功能。当有需要实现特定业务逻辑的数据对象时,继承该基类,编写业务逻辑代码即可。
除此之外,还通过更为简洁的方式:利用注册事件,类似于数据库触发器,来处理业务逻辑,比如:
public virtual void Save(DataRow[] Rows)
{
if (this.Trigger != null)
{
this.Trigger.OnSaving(this, Rows);
}
DataAccess.Update(Rows);
if (this.Trigger != null)
{
this.Trigger.OnSaved(this, Rows);
}
}
触发器的代码:
public void OnSaved(ObjectService.IDataEntityProvider dataEntity, System.Data.DataRow[] rows)
{
if (dataEntity is IGetMarker)
{
foreach (DataRow row in rows)
{
MarkerEntity markEntity = ((IGetMarker)dataEntity).GetMarker(row);
MarkerHandler.Current.Update(dataEntity.TableName, markEntity);
}
}
}
采用注册事件,在数据对象进行增删查改的操作同时,触发器完全可以实现对复杂业务的逻辑处理。举个例子,使用这种方式,我们实现了WWF工作流的封装,最终用户可以用浏览器实现工作流程、工作流表单、以及相应业务逻辑的设计,而这一切都不需要写一行代码。
问题二:这样的敏捷开发架构究竟有多少实际应用价值?
回答:
(1) 需求调研阶段:快速构建系统原型。
这个构建速度有多快呢?比如,有朋友在留言中说到,在充分调研的基础上,用一个月的时间来实现系统原型。如果换成我的话,不夸张地说,三天足矣。再具体一点,在实际项目开发中,很多用户往往会拿出一个Word、Excel表单,要求我们用程序实现,那么,只需要一个小时,我们就可以实现从建表到程序运行。
至于快速构建系统原型的价值,想必大家都非常清楚,除了一个马上可以运行的系统,还有什么办法,更能让用户更为踏实,更愿意沟通呢?
(2) 设计实施阶段
一般来说,好的设计应该是容易实现的。但是再好的设计也需要编码实现,如果能通过一系列的参数设置,简单设计一下表单就能够将系统80%的工作完成,这样一来,系统设计实施的效率不就成倍地提升了吗?项目中宝贵的时间精力就可以集中到业务核心问题的解决上了。
举几个项目开发中的例子:
l 部队政工管理系统:客户在滇西,交到我手上的只是40多页的政工档案表格,以及一个部门机构设置图,数据处理不复杂,主要是权限要求很罗嗦,要求到达何种级别、职务部门的可以发何种文件,可以审阅、可以查看等等。用了一个星期完成系统,发布在服务器上,让用户试用、提意见、修改,全部完成用了两个月的时间。
l 由两个刚毕业学生完成的政府部门MIS系统,包括公文、常住人口、暂住人口、计生、党建、文档管理等等,两个学生没写一行代码完成。
l 酒吧管理系统:对酒吧的人、财、物、进、销、存进行管理,涵盖从老板、经理、领班、服务生、妈咪、小姐、酒水、包房、台、会员卡等等。对方是一家专业的酒吧管理公司,用过多套酒吧管理软件,都不满意,这次由他们自己提出详细需求,由我们来实现的。