让软件具有二次开发功能,提高产品的应变能力

任何一个软件,都不可能完全满足所有用户的需求,为此,我们必须经常修改我们的程序,随着用户的数量的增加,我们会感觉很累,尽管我们的程序增加了很多可以配置的功能,但是还不够,用户的需求总在变化,我们无法阻挡,我们不可能将程序中所有的环节都设置为可改变的。是否有一个好的办法,可以减轻一下开发人员的负担,二次开发是一个很好的选择。

很多人都知道,AutoDesk是一个著名的CAD软件公司,AutoCAD是其最著名的产品之一,该软件在世界各地的应用非常普及,除了产品本身的易用性和适应性之外,软件本身具有的二次开发功能,是其在很多行业根深蒂固的重要原因之一。AutoCAD本身功能有限,但是由于其良好的设计,并且兼有非常优秀的SDK解决方案,用户可以通过二次开发按照自己的要求扩充软件功能,甚至使得AutoCAD与企业的管理系统融为一体,很多企业,尤其是制造业,几乎无法离开AutoCAD。

我们设计软件开始时,往往首先考虑实现功能,然后再考虑优化,基本上不考虑二次开发的功能,其实,二次开发功能也是软件可维护性的一部分。我们的软件具有二次开发功能,则在一定程度上,用户可以自己实现一些不具备的功能,而不是由公司的程序员修改代码,然后重新由工程人员给用户升级,这样周期长,维护的费用非常之高。软件具备二次开发功能,具有如下的几点好处:1、提高软件产品的竞争力,软件的适应性更高,可以更多方面的满足用户的需求;2、降低软件的维护成本,尤其在信息管理类软件上,用户的需求总在变化,程序员没有必要总是修改代码,用户可以自己实现,或者由售后工程师自己在用户工作现场实现。3、将软件系统的功能限制在一定的范围之内,而不是根据用户的要求,无限制的修改程序代码,以增加新的功能,可以在一定程度上降低、甚至消除因修改系统代码带来的风险。

当然,增加软件具有二次开发功能,要做很多工作,会使初期的开发周期较长。但是,考虑到后期的种种好处,前期的付出是完全值得的。

那么,如何让我们的软件具备支持二次开发的功能?最基本的就是程序动态调用预定义的DLL中的函数或类,实际的情况可能会复杂一些,下面举一个简单的例子,通过纯粹的DLL说明如何实现一个二次开发功能。

1)首先我们完成一个简单的程序,其中包括两个模块,MyApp.EXE和Sys.DLL。MyApp直接调用Sys.DLL,Sys.DLL包括所以系统的命令函数。这两个模块组成了一个功能完整的系统,可以很好的运行。

2)增加一个SDK.DLL,其中封装了Sys.DLL中的很多公开的函数,供用户调用。

3)我们规定用户在SDK.DLL上开发得到的新的DLL必须具有两个基本函数,第一个函数是BOOL IsUserDLL(),并且返回TRUE,另一个函数是BOOL ExecUserCommand(void * pParam),可以执行UserDLL.DLL中的函数命令。

4)增加一个Adapter.DLL模块,该模块通过LoadLibrary函数动态调用UserDLL.DLL,并且可以执行其中的函数。它可以同时加载多个用户DLL,并且将有关函数指针保存到一个数组中,便于在适当的时候通过指针调用函数。

5)修改MyApp.EXE使之可以在适当的位置调用Adapter.DLL。

修改之后的系统如下所示:

其中UserDLL.DLL是用户根据SDK.DLL开发的,MyApp通过Adapter.DLL间接调用UserDLL.DLL,再间接调用SDK.DLL,再间接调用Sys.DLL。这样,用户可以很方便的扩充MyApp的功能,并且可以修改系统的很多属性,例如改变系统的状态,修改其菜单,修改工具条,增加新的菜单等等。

如果你认为直接通过纯粹的DLL进行二次开发不方便,你可以通过COM封装Sys.DLL,这个COM模块就是COMSDK.DLL,这样,有了COM接口,用户可以通过COM对MyApp进行二次开发,这是的adapter.DLL必须修改一下,使之既可以动态加载DLL,有可以动态加载COM。

微软推出.NET多年了,如果你希望用户可以使用.NET对MyApp进行二次开发,没有问题,您可以在COMSDK.DLL的基础上通过.NET再封装一次,产生一个NETSDK.DLL,修改adapter.DLL使之可以调用.NET的代码。修改之后系统的结构如下:

 

我通过通过VC6编写的MyAPP,其中的SYS.DLL,SDK.DLL,Adapter.DLL都是通过VC开发的,如果希望程序支持.NET,建议使用Visual Studio 2005开发,C++/CLR可以方便的实现C++与.NET代码的混合编程。

我们设计的新版软件,现在面临这样的问题:面对新的用户,我们直接在新程序的基础上修改代码以满足用户的要求,还是,将软件的基本功能限制在一个范围之内,然后通过SDK,开发新的功能,以满足该用户的特殊要求?在经历了苦难的维护历程之后,我毅然决然的选择了后者,我们的新版软件必须具有二次开发的功能,否则,我们死定了。

软件二次开发的基本结构确定之后,就是明确设置一个软件的功能范围,那些是产品的基本功能,那些功能应该通过SDK实现等等,这点非常重要。另外,Sys.DLL可能由多个DLL组成,这些DLL的力度,功能,以及他们之间的接口等问题,看看设计模式和面向对象的设计等书籍,当然,关键是实事求是。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值