昨天处于晕死状态,少写了一个组件,还需要一个组件用来专门管理Cache的,这里说道为什么要分这么多组件,其实这是习惯问题,很多人喜欢写一个很大的DLL,不过我比较喜欢拆分,小粒度的项目比较好管理和单独测试,把用单元测试验证好了的小组件凑起来调试和写成一个巨大的DLL慢慢一行行的追踪代码,肯定是前者更加舒心和满足懒汉的要求。

之前说了,今天主要将实现Yourname.Config这个项目,这个项目用来管理所有的配置文件,把所有的配置文件Cache到内存,并且需要在配置文件更新的时候刷新内存中的配置数据。

这里如何在内存存储这些配置文件是小问题,用HashTable就能解决了,Key用文件的Path,Value就是文件的内容了。

这里我们建立一个Resource类,用来处理这些配置资源

 1class Resource
 2{
 3    private static HashTable _configfile=new HashTable();
 4    public HashTable Configs
 5    {
 6        get{return _configfile;}
 7    }
 8    public Resource(string Path)
 9    {
10        StreamReader readfile=new StreamReader(Path);
11        using(readfile)
12        {
13            _configfile.Add(Path,readfile.ReadToEnd());
14            readfile.Close();
15        }
16    }
17
18}

这里的代码已经具备了基本功能了,不过最好在Add前先检测以下项是否存在最好。
这样子,当我们去new Resource的时候一个配置文件就加载到了HashTable里面了。
这个时候我们不用每一次需要配置的时候都去读取文件,不过占用了内存,典型的空间换时间的方法。

不过现在还有一个问题,就是如果在运行的时候,如果,我们修改了配置文件的话,由于加载到了内存,我们的修改不会马上体现到程序里,必须重新启动程序才行,对于Web来说,重新启动IIS站点是没有用的,必须重起服务。

这是一个问题

怎么获取一个文件是否修改了呢?我们可以通过比对文件的最后修改时间的属性来解决。
在这里,我们在第一次加载一个配置文件的时候记录其最后修改时间,然后在以后每一次new的时候都去检查一次文件的最后修改时间和记录的是否相等,如果不相等,就说明文件被修改过了,于是就重新加载文件,这样子就能够实现即时刷新配置了

这里我们为了记录文件的最后修改时间,再添加一个HashTable,还是用Path作Key,Value就是文件的最后修改时间了

具体代码:

 1class Resource
 2{
 3    private static HashTable _configfile=new HashTable();
 4    private static HashTable _configtime=new HashTable();
 5    public HashTable Configs
 6    {
 7        get{return _configfile;}
 8    }
 9    public Resource(string Path)
10    {
11        if(!File(Path).GetLastEditTime().Equles((DateTime)_configtime[Path]))
12        {
13            StreamReader readfile=new StreamReader(Path); 
14            using(readfile)
15            {
16                _configfile.Add(Path,readfile.ReadToEnd());
17                readfile.Close();
18                _configtime.Add(Path,File(Path).GetLastEditTime());
19            }
20        }
21    }
22
23}

这里很多的判断阿容错阿这些我都没做,也没有用现成项目的现成源代码,都是些此文时现用记事本手写的,如果有错请见谅阿。

这里我们就可以通过  Resource rc=new Resource("xxx.xml"); rc.Configs["xx.xml"];来获取XML的配置内容了,但是这样子还不是最终的版本,我们需要通过类名就能获取他的配置,还有就是光有配置的XML还不行,我们还需要从XML里面分析出配置的内容才行,这些都是下一步我们来实现的东西

to be continue......

手把手教你写ORM(三)相关推荐

  1. Android 开发之手把手教你写 ButterKnife 框架(三)

    系列文章目录导读: Android开发之手把手教你写ButterKnife框架(一) Android开发之手把手教你写ButterKnife框架(二) Android开发之手把手教你写ButterKn ...

  2. 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫

    系列教程 手把手教你写电商爬虫-第一课 找个软柿子捏捏 如果没有看过第一课的朋友,请先移步第一课,第一课讲了一些基础性的东西,通过软柿子"切糕王子"这个电商网站好好的练了一次手,相 ...

  3. 手把手教你写一个生成对抗网络

    成对抗网络代码全解析, 详细代码解析(TensorFlow, numpy, matplotlib, scipy) 那么,什么是 GANs? 用 Ian Goodfellow 自己的话来说: " ...

  4. php注册程序,[PHP初级]手把手教你写注册程序 1

    [PHP初级]手把手教你写注册程序 1 实例内容 在此教程,我们将通过写一个用户注册程序,学习以下内容: 数据的传输与获取 信息的验证 pdo方式操作数据库 事务处理 前台显示文件:index.php ...

  5. 手把手教你写Linux I2C设备驱动

    手把手教你写Linux I2C设备驱动 标签:Linux 设备 驱动 详解 i2c 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http:/ ...

  6. 手把手教你写DI_3_小白徒手支持 Singleton 和 Scoped 生命周期

    在上一节:手把手教你写DI_2_小白徒手撸构造函数注入 浑身绷带的小白同学:我们继续开展我们的工作,大家都知道 Singleton是什么,就是全局只有一个呗,我们就先从它开始,这个多简单,我们找个字典 ...

  7. 手把手教你写一个spring IOC容器

    本文分享自华为云社区<手把手教你写一个spring IOC容器>,原文作者:技术火炬手. spring框架的基础核心和起点毫无疑问就是IOC,IOC作为spring容器提供的核心技术,成功 ...

  8. 手把手教你写网站:Python WEB开发技术实战

    摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...

  9. 手把手教你写专利申请书/如何申请专利

    摘要 小前言 (一)申请前的准备工作     1.申请前查询     2.其他方面的考虑     3.申请文件准备 (二)填写专利申请系列文档     1.实际操作步骤     2.具体操作     ...

最新文章

  1. centos 创建 logrotate 进行日志分割
  2. HTML5 input元素新的特性
  3. EF Core For MySql查询中使用DateTime.Now作为查询条件的一个小问题
  4. python 复制文件_10 行 Python 代码写 1 个 USB 病毒
  5. mysql中select语句子句,了解mysql中select语句操作实例
  6. java soap协议头_自己调用webservice方法总结(带请求头SoapHeader)
  7. 尼古拉斯 android_圣尼古拉斯和Alexa的访问
  8. php网站分区,PHP - Manual: 分区和分片 (官方文档)
  9. 零基础学python看什么书好?
  10. visual studio 2008 intellisense does not work
  11. 数据接口请求异常:error_springboot2.2.X手册:构建多元化的API接口,我们这样子设计
  12. 大数据平台应用开发的痛点有哪些
  13. Oracle 11g安装步骤(超详细)
  14. 科技爱好者周刊:第 98 期
  15. 数据外推算法 c语言,[原创]如何进行内插法和外推法的计算
  16. 设计模式 -- Facade
  17. echarts 文本标签配置、label文字样式
  18. iOS 中input隐藏输入光标
  19. 仿今日头条小程序搭建
  20. ERROR: Pool overlaps with other one on this address space

热门文章

  1. Linux sticky bit 目录权限 rwt权限
  2. Python单元测试框架之pytest---如何执行测试用例
  3. vsftpd学习笔记
  4. 在Linux server上建立NAS文件服务器
  5. Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
  6. Appium自动化测试环境搭建
  7. 雅虎可能被Verizon收购 阿里巴巴也可能成为接盘者
  8. CAS 与.net 集成的 “循环重定向”问题分析
  9. 2015年6月9日_诗词学习
  10. Mansory算法分析