首页 新闻 会员 周边

C#windows Form或者控制台的代码管理

0
悬赏园豆:100 [已解决问题] 解决于 2012-02-16 14:15

标题的名字可能不太准,意思是有一份控制台或者windows窗体的程序,我按照地区编译了好几个版本,每个版本因为地区的差异有稍微的区别,比如说有一些函数在某个地方不用,我就注释掉了。这份代码有可能过一段时间需要修改,比如某个地方出现了变化,就得改一下。我现在的困惑是:我的代码应该怎么管理比较好?是所有的地方维护一份代码还是说针对每个地区都维护一份代码?求助有经验的博友~~

c#
落魄小超的主页 落魄小超 | 初学一级 | 园豆:110
提问于:2012-02-09 08:58
< >
分享
最佳答案
1

我的做法是:

1:使用配置文件,标记那些地方存在差异

2:使用一个统一的类管理所有可能存在差异的地方

     (1):读取配置文件

     (2):根据你的逻辑做相应的处理

     (3):你原先做注释的地方统一调用这个类

补充一下,不知道你这里的差异究竟是什么,如果是locale上的差异,微软有专门的解决方案

收获园豆:40
甘南 | 菜鸟二级 |园豆:271 | 2012-02-09 09:15
        private void InitData()
{
           //某些地区不需要执行 InitData_SubControlArea(),所以会注释掉
            InitData_SubControlArea();
InitData_station();
InitData_ZeroVolTopo();
InitData_StationVoltage();
}

---我说的差异例如上面的代码:有些地区有一些函数是不执行的,执行之后可能带来相反的效果,所有我就注释掉了,而有些地区是必须要执行的,所以必须改回来。我现在担心地方多了维护一份代码,以后有需要修改的话,可能会出现时间长了自己忘了那个地方怎么处理的了。

落魄小超 | 园豆:110 (初学一级) | 2012-02-09 09:42

@落魄小超: 

 

不应该注释掉,应该用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

甘南 | 园豆:271 (菜鸟二级) | 2012-02-09 12:48
其他回答(7)
-1

向你严重推荐→ VSS

ERS | 园豆:728 (小虾三级) | 2012-02-09 09:27

说实话vss不好用。。。

支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2012-02-09 09:41

@顾晓北: 

说实话,木用过别的.....我新手,看都在用就用啦

支持(0) 反对(0) ERS | 园豆:728 (小虾三级) | 2012-02-09 09:43

这类问题不能使用VSS!否则会累死的

例如,假设楼主的代码应用到全国3000个县,那么要准备多少个代码分支?3000个?这样一来,不仅维护困难,而且每修改一次主代码(程序总得允许修改吧),那所有的VSS分支还复去同步。

支持(0) 反对(0) 甘南 | 园豆:271 (菜鸟二级) | 2012-02-09 12:52
1

使用条件编译

http://www.cnblogs.com/artech/archive/2011/04/06/conditionalcompilation.html

#define  sh
#if sh
print("sh")
#else
print("other")
#endif
收获园豆:20
waninlezu | 园豆:661 (小虾三级) | 2012-02-09 17:56
0

C/s架构本身就有这种缺陷,客户端维护成本高。如果是b/s架构,可以采用中心管理,各地区下载客户端执行,这是设计模式中组合模式。

lonely_rain | 园豆:752 (小虾三级) | 2012-02-10 10:24
1

我觉得你可以使用App.config来配置用户使用的程序;使用配置Key决定是否执行;

收获园豆:20
画方软件 | 园豆:778 (小虾三级) | 2012-02-10 10:29
0

建议看一下策略模式

野火烧不尽 | 园豆:225 (菜鸟二级) | 2012-02-10 16:34
1

强烈建议用条件编译指令

收获园豆:20
az235 | 园豆:8483 (大侠五级) | 2012-02-10 16:51
0

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

小彬 | 园豆:947 (小虾三级) | 2012-02-11 11:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册