C#如何写文件路径才符合面向对象的思想?

 

重构代码前后的对比

 

重构前

 

重构后

 

 

为什么要重构文件路径的代码

 

由上面的对比图相信您可以看出我是把原来的绝对路径的部分(D盘,考生文件)给封装起来了,重构后的代码是从其他文件(ClsNum)中调用封装起来的路径。

通过这种方式调用路径是符合对修改封闭,对扩展开放的思想。

假如我们需要把上面的D盘改成C盘,那么我们需要找到这个文件,打开并作出修改。当然,一个需要修改好说,要是有许多文件的路径都需要呢?你需要打开这些类,然后一个一个的去修改。这种做法增加了工作量,降低了开发效率。如果项目交接给新人,这玩意都不是他写的,找到所有文件路径然后更改的做法对他也太残忍了。

 

 

怎么封装这些路径呢?

 

方案一(不合适):

我们新建一个类,把这些路径封装在这个类文件中,形成变量。然后U层直接引用这个类,在这个类里面“点”出来封装的变量即可。

分析:这个做法的确可以做到在一个类里面修改这些路径,而不影响其他类。对于开发人员来说,这看似是最方便省事的一个办法。只要把这个类的名字命名规范,谁都能看懂,连新人也不需要费很大事儿。

But,这个方案有一个致命的问题。因为我们的软件都是需要打包发布的,而打包发布后的文件是.exe,在VS中开发的所有.cs类文件全部打包在了这个.exe文件中,生成为软件后,我们没办法修改。也就是说,上述的方法每修改一次,程序就得重新打包发布一次。仔细想想:这是不是违背了对修改封闭,对扩展开放呢?

 

 

方案二:

顺着方案一的思路,也就是说我们最好能把路径集中写在一个位置,同时还不用重新打包发布。当我们想把原来的文件路径操作从D盘变成C盘时,在一个文件里做更改,不用借助打包软件,不要发布,再执行一次.exe文件,就直接能体现在用户的下一次使用上。这是不是就太爽了?有这样的办法吗?

当然有,下面的内容将会带读者看看把路径文件封装在.config配置文件的强大效果。

 

 

C#读写App.config文件 

 

在配置文件中书写代码。

key是名称,value是指,具体的路径也写在value里

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
    <add key="DemoKey" value="*" />
</appSettings>
</configuration>

 

在项目的类中怎么调用配置文件里的路径呢?

可以看到["DemoKey"]里面的内容就是配置文件中key的值

String str = ConfigurationManager.AppSettings["DemoKey"];

 

 

项目实战

 

我们项目组做的是大学生一级考试系统,是C/S的项目。需要系统自动读取指定路径下学生的答题文件,进行判分。我优化的正是这里的路径。 方法如下:

1.在配置文件(App.config)中把路径封装好。

你当然可以写多个子路径,调用的时候把这些路径拼接起来就可以读到了。需要注意!是在<appSettings></appSettings>里写的如下代码

    <!--定义考生文件夹的路径-->
    <add key="CommonUrlOne" value="D:\\" />
    <add key="CommonUrlTwo" value="\计算机一级考生文件\" />

    <!--定义考生excel文件的路径-->
    <add key="excelUrlOne" value="卷\Excelkt\Excel" />
    <add key="excelUrlTwo" value=".xlsx" />

    <!--定义考生PPT文件的路径-->
    <add key="pptUrlOne" value="卷\\Pptkt\\PPT" />
    <add key="pptUrlTwo" value=".pptx" />

    <!--定义考生word文件的路径-->
    <add key="wordUrlOne" value="卷\\Wordkt\\bg" />
    <add key="wordUrlTwo" value=".docx" />
    <add key="wordUrlThree" value="卷\\Wordkt\\Word" />

 

 

2.用反射获取配置文件中的路径

我这里封装了一个定义类。首先你需要在类里面应用命名空间using System.Configuration;反射代码这么写!可以看到CommonUrlOne与配置文件里key的值对应

        //定义变量反射配置文件中的考生文件夹路径
        public static string CommonPathOne = ConfigurationManager.AppSettings["CommonUrlOne"];
        public static string CommonPathTwo = ConfigurationManager.AppSettings["CommonUrlTwo"];

        //定义变量反射配置文件中的excel文件路径
        public static string ExcelPathOne = ConfigurationManager.AppSettings["excelUrlOne"];
        public static string ExcelPathTwo = ConfigurationManager.AppSettings["excelUrlTwo"];

        //定义变量反射配置文件中的ppt文件路径
        public static string PPTPathOne = ConfigurationManager.AppSettings["pptUrlOne"];
        public static string PPTPathTwo = ConfigurationManager.AppSettings["pptUrlTwo"];

        //定义变量反射配置文件中的word文件路径
        public static string WordPathOne = ConfigurationManager.AppSettings["wordUrlOne"];
        public static string WordPathTwo = ConfigurationManager.AppSettings["wordtUrlTwo"];
        public static string WordPathThree = ConfigurationManager.AppSettings["wordUrlThree"];

 

 

3.读取方式。

只需要在调用时,声明一个变量来获取路径即可。ClsNum就是我封装的定义类。

(代码中的MyInfo.是获取学生的学号,这些考生文件是以学号来命名的,在此不是重点)

        //从配置文件读取考生Excel文件路径——刘桐——2019-2-22 
        private static string file = ClsNum.CommonPathOne + MyInfo .MystudentID ()+ ClsNum.CommonPathTwo +MyInfo.MyPaperType()+ ClsNum.ExcelPathOne + MyInfo.MyPaperType().Trim() + ClsNum.ExcelPathTwo;

 

 

4.请看看2步骤和3步骤这两个类,它们的代码写好了之后不需要再更改,只需要在配置文件中更改对应Value的值即可~

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 69
    评论
评论 69
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值