标题的名字可能不太准,意思是有一份控制台或者windows窗体的程序,我按照地区编译了好几个版本,每个版本因为地区的差异有稍微的区别,比如说有一些函数在某个地方不用,我就注释掉了。这份代码有可能过一段时间需要修改,比如某个地方出现了变化,就得改一下。我现在的困惑是:我的代码应该怎么管理比较好?是所有的地方维护一份代码还是说针对每个地区都维护一份代码?求助有经验的博友~~
我的做法是:
1:使用配置文件,标记那些地方存在差异
2:使用一个统一的类管理所有可能存在差异的地方
(1):读取配置文件
(2):根据你的逻辑做相应的处理
(3):你原先做注释的地方统一调用这个类
补充一下,不知道你这里的差异究竟是什么,如果是locale上的差异,微软有专门的解决方案
private void InitData()
{
//某些地区不需要执行 InitData_SubControlArea(),所以会注释掉
InitData_SubControlArea();
InitData_station();
InitData_ZeroVolTopo();
InitData_StationVoltage();
}
---我说的差异例如上面的代码:有些地区有一些函数是不执行的,执行之后可能带来相反的效果,所有我就注释掉了,而有些地区是必须要执行的,所以必须改回来。我现在担心地方多了维护一份代码,以后有需要修改的话,可能会出现时间长了自己忘了那个地方怎么处理的了。
@落魄小超:
不应该注释掉,应该用if else 在有地区差异的地方进行判断,写成下面的风格
Config config = GetConfig();//伪码,目的是读取ini文件中的配置
if (config.isXXX)
{
InitData_SubControlArea();
}
Config大概是这样写的
public class Config
{
public bool isXXX { set; get; }
}
假设Beijing、ShangHai、TianJin存在差异,你建立三个配置文件即可,在部署/打包时,选择相应的ini文件,这样你的程序版本只要一个,而配置文件可以有多个,由配置文件来控制程序的运行状态
ini的格式
[myconfig]
isXXX=1
或者
isXXX=0
向你严重推荐→ VSS
说实话vss不好用。。。
@顾晓北:
说实话,木用过别的.....我新手,看都在用就用啦
这类问题不能使用VSS!否则会累死的
例如,假设楼主的代码应用到全国3000个县,那么要准备多少个代码分支?3000个?这样一来,不仅维护困难,而且每修改一次主代码(程序总得允许修改吧),那所有的VSS分支还复去同步。
使用条件编译
http://www.cnblogs.com/artech/archive/2011/04/06/conditionalcompilation.html
#define sh
#if sh
print("sh")
#else
print("other")
#endif
C/s架构本身就有这种缺陷,客户端维护成本高。如果是b/s架构,可以采用中心管理,各地区下载客户端执行,这是设计模式中组合模式。
我觉得你可以使用App.config来配置用户使用的程序;使用配置Key决定是否执行;
建议看一下策略模式
强烈建议用条件编译指令
use switch
like this:
switch(area)
{
case "sh":ShCode();break;
case "bj":BjCode();break;
default:WrongCode();break;
}
then config area into the App.config, the appSettings section
<configuration>
<appSettings>
<add key="area" value="sh" />
</appSettings>
</configuration>
you can read the configuration like this:
ConfigurationManager.AppSettings["area"]
to compile it, you should reference the System.Configuration.dll
good luck