请教软件代码管理方法
各位走过路过的朋友们,过来看看帮小弟分析一下
我公司是做酒店行业管理软件,每一个客户都可能要求修改或添加一些功能,甚至有些功能是该客户单独有的,这样公司在代码管理这一块就遇到麻烦了,如果只保留一套代码的话,那么软件会越来越大,有时修改了功能甚至会导致软件有些不稳定,而且如果一个客户用了一年以后发现有一个问题,而且必须修改程序才能处理,在这一年期间里公司的软件已经更新了很多功能,这样不处理客户的问题肯定是不行,要处理的话就必须升级到最新的程序,非常麻烦;如果公司保留一套标准版,并且为单独保留每一个客户的代码的话,这样一来代码非常多,管理起来非常麻烦,二来如果给A客户添加了的功能,B客户也要使用到时就必须修改两次代码,也非常麻烦。
请教各位前辈,针对这样的情况,对代码管理有没有一个更好的办法能够做到两全其美
[解决办法]
模块化,将一个功能做成一个DLL调用,某个客户对某个功能有特殊需求,只需要修改该功能,然后把DLL发给他让他覆盖即可
[解决办法]
模块化管理
主程序是一个框架
然后全部根据配置文件动态加载模块或将核心部分放入主程序处理
这样一来,主程序不用动,模块可以根据不同的客户进行删减或增加,
然后修改配置文件就可以搞定。
如果主程序架构上需要更新,那么就是版本升级问题了
核心部分比如一些网络通讯部分、软件加密部分、数据库连接部分
如果考虑比较全面点的话,模块接口可以设计得全面点,如数据库
连接语句、数据库类型、模块配置文件路径等
给个模块范例你看看
'====================== 只读属性 ======================Public Property Get hwnd() As Long hwnd = MainWindow.hwndEnd PropertyPublic Property Get Caption() As String Caption = MainWindow.CaptionEnd PropertyPublic Property Get Icon() As StdPicture Set Icon = MainWindow.ImageList1.ListImages.Item(1).PictureEnd PropertyPublic Property Get isCut() As Boolean isCut = TrueEnd PropertyPublic Property Get isCopy() As Boolean isCopy = TrueEnd PropertyPublic Property Get isPlaster() As Boolean isPlaster = TrueEnd PropertyPublic Property Get isDel() As Boolean isDel = TrueEnd PropertyPublic Property Get isPrinter() As Boolean isPrinter = TrueEnd PropertyPublic Property Get isPrintSetup() As Boolean isPrintSetup = TrueEnd Property'====================== 只写属性 ======================Public Property Let Popedom(ByVal vData As Long) hPopedom = vDataEnd PropertyPublic Property Let UserID(ByVal vData As Long) hUserID = vDataEnd PropertyPublic Property Let UserName(ByVal vData As String) hUserName = vDataEnd PropertyPublic Property Let ConnectionString(ByVal vData As String) ConnectionSQL = vDataEnd PropertyPublic Property Let ParenthWnd(ByVal vData As Long) hParenthWnd = vDataEnd Property'====================== 程序启动或关闭 ======================Private Sub Class_Initialize() Set MainWindow = New MainFormEnd SubPublic Sub ShowWindow() MainWindow.ShowEnd SubPublic Sub CloseWindow() Unload MainWindow Set MainWindow = NothingEnd Sub'====================== 基本使用方法 ======================Public Sub CutClick() MainWindow.CutClickEnd SubPublic Sub CopyClick() MainWindow.CopyClickEnd SubPublic Sub PlasterClick() MainWindow.PlasterClickEnd SubPublic Sub DelClick() MainWindow.DelClickEnd SubPublic Sub PrinterClick() MainWindow.PrinterClickEnd Sub
[解决办法]
不同的客户有不同的需求(从界面到功能),你很难两全。最佳的方法也就是在你的维护期内为每个客户都保留原代码,然后做好说明文件,以便查找。
[解决办法]
select case ClientID '当前客户标识case "A" '客户A的代码case "B" '客户B的代码case "C" '客户C的代码end select
[解决办法]
条件编译吧
#if v01 then
#elseif v02 then
#end if
[解决办法]
\模块\ClientSelectClass_xxx公司
...
\界面\xxx公司
\界面\xxx公司
...