首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

请问软件代码管理方法

2012-01-15 
请教软件代码管理方法各位走过路过的朋友们,过来看看帮小弟分析一下我公司是做酒店行业管理软件,每一个客

请教软件代码管理方法
各位走过路过的朋友们,过来看看帮小弟分析一下
我公司是做酒店行业管理软件,每一个客户都可能要求修改或添加一些功能,甚至有些功能是该客户单独有的,这样公司在代码管理这一块就遇到麻烦了,如果只保留一套代码的话,那么软件会越来越大,有时修改了功能甚至会导致软件有些不稳定,而且如果一个客户用了一年以后发现有一个问题,而且必须修改程序才能处理,在这一年期间里公司的软件已经更新了很多功能,这样不处理客户的问题肯定是不行,要处理的话就必须升级到最新的程序,非常麻烦;如果公司保留一套标准版,并且为单独保留每一个客户的代码的话,这样一来代码非常多,管理起来非常麻烦,二来如果给A客户添加了的功能,B客户也要使用到时就必须修改两次代码,也非常麻烦。
请教各位前辈,针对这样的情况,对代码管理有没有一个更好的办法能够做到两全其美

[解决办法]
模块化,将一个功能做成一个DLL调用,某个客户对某个功能有特殊需求,只需要修改该功能,然后把DLL发给他让他覆盖即可
[解决办法]
模块化管理
主程序是一个框架
然后全部根据配置文件动态加载模块或将核心部分放入主程序处理

这样一来,主程序不用动,模块可以根据不同的客户进行删减或增加,
然后修改配置文件就可以搞定。

如果主程序架构上需要更新,那么就是版本升级问题了
核心部分比如一些网络通讯部分、软件加密部分、数据库连接部分

如果考虑比较全面点的话,模块接口可以设计得全面点,如数据库
连接语句、数据库类型、模块配置文件路径等
给个模块范例你看看

VB code
'====================== 只读属性 ======================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
[解决办法]
不同的客户有不同的需求(从界面到功能),你很难两全。最佳的方法也就是在你的维护期内为每个客户都保留原代码,然后做好说明文件,以便查找。
[解决办法]
VB code
select case ClientID '当前客户标识case "A"    '客户A的代码case "B"    '客户B的代码case "C"    '客户C的代码end select
[解决办法]
条件编译吧

#if v01 then

#elseif v02 then

#end if
[解决办法]
探讨
谢谢各位,酒店行业管理软件的客户很特别,就连同一个界面可能A客户要按照A的方法处理,B客户按B的方法处理,这样就没有办法按SupermanKing兄说的按模块调用DLL来处理了。

[解决办法]
就界面来说,也可以采用Skins的方式打包呀
每一个客户有一个包,包含
Skins、DLL、Option.ini
这样不就可以很好的管理了吗?
如果说到源代码管理,同样可行的呀
比如这样分配目录:
\框架程序
\公共组件
\模块
\模块\UsersManageClass
\模块\UsersSelectClass
\模块\ClientManageClass
\模块\ClientSelectClass
\模块\ClientManageClass_xxx公司


\模块\ClientSelectClass_xxx公司
...
\界面\xxx公司
\界面\xxx公司
...

热点排行