软件的进化:从第一行代码到分离业务规则和数据显示

我们新版的软件从写下第一行代码到现在,经过了很大的变化,程序还没有最终发布。很多变化是最初不存想象的到的,同上一代产品相比,最初只是重点考虑的对流程变化的响应能力,在数据库的设计上(主要是核心系统的模型)下了很大的功夫,2004年底的时候感觉比较满意,那时的程序包括一个EXE和一个DLL,后来核心部分的模型发生了调整,数据库结构做了调整,后来考虑每个最终用户的需求肯定会不同,这种不同可能差别很大,也可能差别很小,应用程序如何使用这种需求的变化呢?应用程序本身增加中需求的响应功能吗,随着用户群的不断扩大,应用程序本身是否会快速膨胀?这将造成非常严重的难于维护的问题。为此我们只能选择增加应用程序支持二次开发的功能,程序的核心部分基本上是稳定的,所有用户的需求的增加或改变,均通过二次开发实现,这样,为每个用户的开发新的功能,都不会影响核心部分的稳定。开发团队可以划分为两部分,一部分做核心部分的开发和维护,一部分针对实际用户做扩展部分的开发。目前这部分功能已经实现了。

在增加二次开发功能的时候,由于各个模块之间相互调用太多,对于一个模块的修改往往会影响另外的模块,导致其他模块的重新编译,为此,通过增加抽象接口实现模块之间的隔离,实现了模块之间的解耦合。原来的DLL按照不同的功能,划分了十几个小的DLL,每个DLL对核心模块的调用都是通过抽象接口实现的,各个模块之间的调整不再相互影响。

我们的产品是一个通用的数据管理软件,我们没有通过JAVA或VB或C#开发,我们完全通过VC++开发计划所有的东西,最近面临的问题是,我们必须同时完成B/S结构的应用程序的开发。我们现在已经通过C++封装了所有的业务规则和数据显示控件,有的业务规则直接被封装到了数据显示控件类中,而我们有不想通过其他语言再重写数据库访问和所有的业务规则,如何解决?如何实现B/S程序调用现有的C++ 编写的DLL?

MFC控件类肯定不能在网页上直接显示,除非将MFC控件封装成ActiveX,但是,ActiveX在客户端显示时,客户端机器不能直接访问数据库的,除非将数据库服务器也放到互联网上,这显然是不允许的,最终用户不会答应。数据的显示部分还是由网页自己实现,而业务规则部分可以驻留在WEB服务器上,被ASP程序调用,ASP程序可以充分的利用C++ DLL中的业务规则,这样似乎比较合理,业务规则和数据访问接口与用户界面分离,界面可以是MFC程序界面,也可以是ASP网页界面,这样我们不得不将C++的DLL再次进行重构,分离业务规则和用户界面。

经过这次重构之后,数据库访问部分和业务规则等模块中没有任何用户界面的元素,它们提供了一些接口由用户界面模块调用。用户界面可以是MFC、VB、C#或ASP.NET。但是由于C++DLL在开发初期仅仅为C/S程序考虑,对于B/S程序调用,可能会有不合理的地方,但是目前我们无法确切的知道将来会出现什么问题,或许在这次分离之后,我们很可能会产生一个C++ 编写的应用服务器。这个服务器可以非常方便的被第三方软件调用。

因为我对于网页开发不熟悉,上述的方案是否合理还有待实践的检验。

在整个的开发过程中,软件在进化,这种进化从最初的第一代产品已经开始,上述的程序的改进只是在我们第四代产品上发生的。

考虑一下我的第一代产品,一个图像和数据的管理软件,数据库采用ACCESS数据库,程序界面也是使用ACCESS中内置的窗体实现的,图像的采集部分通过VC编写了一个DLL,由ACCESS中的VBA语言调用,这个产品存在的一段时间,但是VBA本身由很多的限制,很多功能很难扩充。

第二代产品使用VB6开发,数据库依然采用ACCESS的MDB文件,通过ADO访问数据库,通过调用视频采集卡的DLL实现视频采集,使用VB6本身的报表工具实现报表。这个产品使用非常简单,用户不需要学习,一看就会用,安装了几十家用户。这个程序易用性很好,却不能够很好的处理用户的需求的变化,界面的修改,字段的增加,报表的调整,都需要修改程序源代码,这显然不是我们像要的而且只是一个单机版。

第三代产品彻底解决了第二代产品遇到的问题,界面变化,字段的增加,报表的调整,都不需要修改源代码,直接通过一个维护工具完成,整个程序通过VC开发(报表部分使用C#开发),并且可以同时连接MDB和SQL Server两种数据库,具备了网络版的功能。后来遇到的问题是用户流程的变化,流程中每个节点业务规则的变化都将修改程序的代码,更讨厌的是主程序就是一个整个的EXE,每次修改都将重新编译整个EXE,目前的速度是需要编译5分钟。这些都是我们不能忍受的。

我们第四代产品,可以很好的解决第三代产品遇到的问题,尤其是对于用户工作流程的变化和业务规则的变化上,都可以从容应对,且可以通过网页访问数据库,应用程序既可以在局域网上使用,也可以在互联网上使用。可以说第四代产品,将是一个典型的分布式应用程序。每个CS结构的客户端可以为其他CS结构的客户端提供数据访问服务和身份验证服务。

从第一代VBA实现的产品到现在的第四代产品,就是我们公司软件产品的进化过程,在这个过程中,用户需求的变化是最根本的推动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值