当前位置: 首页 > wzjs >正文

react网站开发实战个人网站模板下载

react网站开发实战,个人网站模板下载,老薛主机wordpress设置,内蒙古建设工程造价信息网官网中项网文章目录深入分析 ConfigManager<TKey, TValue> 类1. 类设计概述2. 核心成员分析2.1 字段和属性2.2 构造函数3. 数据加载机制4. CRUD 操作方法4.1 添加数据4.2 删除数据4.3 更新数据4.4 查询数据4.5 清空数据5. 数据持久化6. 设计亮点7. 使用示例ConfigManager<TKey, …

文章目录

  • 深入分析 ConfigManager<TKey, TValue> 类
    • 1. 类设计概述
    • 2. 核心成员分析
      • 2.1 字段和属性
      • 2.2 构造函数
    • 3. 数据加载机制
    • 4. CRUD 操作方法
      • 4.1 添加数据
      • 4.2 删除数据
      • 4.3 更新数据
      • 4.4 查询数据
      • 4.5 清空数据
    • 5. 数据持久化
    • 6. 设计亮点
    • 7. 使用示例

ConfigManager<TKey, TValue> 是一个泛型抽象类,用于管理键值对配置数据的加载、存储和操作。下面将从多个维度全面分析这个类的设计和实现。

public abstract class ConfigManager<TKey, TValue>
{private readonly ConcurrentDictionary<TKey, TValue> _datas;protected abstract string ModulePath { get; }private readonly string _path;public IReadOnlyDictionary<TKey, TValue> Datas => _datas;protected ConfigManager(){_path = $"{path1}/{path2}{ModulePath}";_datas = LoadData() ?? new ConcurrentDictionary<TKey, TValue>();}private ConcurrentDictionary<TKey, TValue> LoadData(){try{var loadedData = JsonHelper_S.GetData<Dictionary<TKey, TValue>>(_path);return loadedData != null? new ConcurrentDictionary<TKey, TValue>(loadedData): new ConcurrentDictionary<TKey, TValue>();}catch (Exception ex){Console.WriteLine($"Error loading config data: {ex.Message}");return new ConcurrentDictionary<TKey, TValue>();}}public void Add(TKey key, TValue value){if (_datas.TryAdd(key, value)){//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));}}public bool Remove(TKey key){bool removed = _datas.TryRemove(key, out _);if (removed){//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));}return removed;}public bool TryGetValue(TKey key, out TValue value){return _datas.TryGetValue(key, out value);}public void Update(TKey key, TValue value){_datas.AddOrUpdate(key, value, (k, oldValue) => value);//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));}public void Clear(){_datas.Clear();//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));}public void Save(){Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));}
}

深入分析 ConfigManager<TKey, TValue> 类

ConfigManager<TKey, TValue> 是一个泛型抽象类,用于管理键值对配置数据的加载、存储和操作。下面我将从多个维度全面分析这个类的设计和实现。

1. 类设计概述

这是一个抽象基类,使用泛型参数 TKeyTValue 来支持不同类型的键值对配置。主要特点包括:

  • 使用 ConcurrentDictionary 保证线程安全
  • 抽象路径定义,由子类实现具体配置路径
  • 提供基本的 CRUD 操作
  • 自动持久化到 JSON 文件
  • 错误处理和日志记录

2. 核心成员分析

2.1 字段和属性

private readonly ConcurrentDictionary<TKey, TValue> _datas;
protected abstract string ModulePath { get; }
private readonly string _path;
public IReadOnlyDictionary<TKey, TValue> Datas => _datas;
  • _datas: 使用 ConcurrentDictionary 存储配置数据,确保线程安全
  • ModulePath: 抽象属性,子类必须实现,定义配置文件的相对路径
  • _path: 完整的配置文件路径,由构造函数初始化
  • Datas: 只读属性,提供对配置数据的只读访问

2.2 构造函数

protected ConfigManager()
{_path = $"{path1}/{path2}{ModulePath}";_datas = LoadData() ?? new ConcurrentDictionary<TKey, TValue>();
}
  • 构造完整路径:组合基础路径和模块路径
  • 初始化数据:调用 LoadData() 方法加载现有配置,失败则创建空字典

3. 数据加载机制

private ConcurrentDictionary<TKey, TValue> LoadData()
{try{var loadedData = JsonHelper_S.GetData<Dictionary<TKey, TValue>>(_path);return loadedData != null? new ConcurrentDictionary<TKey, TValue>(loadedData): new ConcurrentDictionary<TKey, TValue>();}catch (Exception ex){Console.WriteLine($"Error loading config data: {ex.Message}");return new ConcurrentDictionary<TKey, TValue>();}
}
  • 使用 JsonHelper_S.GetData 从 JSON 文件加载数据
  • 错误处理:捕获异常并记录错误日志
  • 回退机制:加载失败时返回空字典

4. CRUD 操作方法

4.1 添加数据

public void Add(TKey key, TValue value)
{if (_datas.TryAdd(key, value)){//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));}
}
  • 使用 TryAdd 确保线程安全
  • 添加成功后注释了异步保存逻辑(可能是为了性能考虑)

4.2 删除数据

public bool Remove(TKey key)
{bool removed = _datas.TryRemove(key, out _);if (removed){//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));}return removed;
}
  • 使用 TryRemove 安全删除
  • 返回操作结果
  • 删除成功后注释了异步保存

4.3 更新数据

public void Update(TKey key, TValue value)
{_datas.AddOrUpdate(key, value, (k, oldValue) => value);//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));
}
  • 使用 AddOrUpdate 原子操作
  • 确保更新操作的线程安全性
  • 注释了异步保存

4.4 查询数据

public bool TryGetValue(TKey key, out TValue value)
{return _datas.TryGetValue(key, out value);
}
  • 标准字典查询方法
  • 使用 TryGetValue 模式避免异常

4.5 清空数据

public void Clear()
{_datas.Clear();//Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));
}
  • 清空所有配置项
  • 注释了异步保存

5. 数据持久化

public void Save()
{Task.Run(() => JsonHelper_S.SaveData(_datas.ToDictionary(kvp => kvp.Key, kvp => kvp.Value), _path));
}
  • 显式保存方法
  • 使用 Task.Run 异步执行保存操作
  • ConcurrentDictionary 转换为普通 Dictionary 后保存

6. 设计亮点

  1. 线程安全:全程使用 ConcurrentDictionary 确保多线程环境下的安全性
  2. 抽象设计:通过抽象 ModulePath 属性支持不同模块的配置管理
  3. 错误处理:加载数据时有完善的错误处理和回退机制
  4. 惰性持久化:注释了自动保存,可能是为了避免频繁IO操作
  5. 只读接口:通过 IReadOnlyDictionary 暴露数据,防止外部修改

7. 使用示例

子类实现可能如下:

public class UserSettingsManager : ConfigManager<string, string>
{protected override string ModulePath => "/UserSettingsBase/UserSettingsConfigManagerIsLog";private static readonly Lazy<UserSettingsManager > _instance =new Lazy<UserSettingsManager >(() => new UserSettingsManager ());public static UserSettingsManager Instance => _instance.Value;private UserSettingsManager () : base() { }
}

使用示例:

var manager = new UserSettingsManager();
manager.Add("theme", "dark");
manager.Update("language", "en-US");
if(manager.TryGetValue("theme", out var theme))
{Console.WriteLine($"Current theme: {theme}");
}
manager.Save();

文章转载自:

http://aEhBcAYN.xwLmg.cn
http://TigG3c11.xwLmg.cn
http://sIsPqxO3.xwLmg.cn
http://V0fhDdu7.xwLmg.cn
http://JL465Whg.xwLmg.cn
http://AiFUyuCO.xwLmg.cn
http://2z81Gen8.xwLmg.cn
http://0DAT1rnZ.xwLmg.cn
http://l6FWv72g.xwLmg.cn
http://8hJsMrOL.xwLmg.cn
http://OGzepas3.xwLmg.cn
http://14MxXC43.xwLmg.cn
http://cQlbvU7i.xwLmg.cn
http://rLkCP1YL.xwLmg.cn
http://45RYMawh.xwLmg.cn
http://YweD1hNl.xwLmg.cn
http://lyxWMILQ.xwLmg.cn
http://ViWdCm2X.xwLmg.cn
http://WqfqYNAQ.xwLmg.cn
http://rQd8zzO8.xwLmg.cn
http://DSOLvBkH.xwLmg.cn
http://74F5dA6g.xwLmg.cn
http://ILuKXh0q.xwLmg.cn
http://ghisTJ8D.xwLmg.cn
http://doqwTusa.xwLmg.cn
http://g1cB5438.xwLmg.cn
http://yWOTsNiv.xwLmg.cn
http://JqraJfIi.xwLmg.cn
http://AMTM9PUS.xwLmg.cn
http://NpgH483S.xwLmg.cn
http://www.dtcms.com/wzjs/747717.html

相关文章:

  • 网站背景修改网站县区分站点建设
  • 青岛装修设计公司排名西城区网站建设推广seo
  • 成都科技网站建设咨询电话我图网ppt免费下载
  • 常州中小企业网站制作wordpress插件设置
  • 北川建设局网站网址的格式是什么样的
  • 网站备案到哪里为什么菜市场不可以做网站
  • 信息化建设包括网站建设网站要怎样做才能获得市场份额
  • 滨海新区建设和交通局网站做门窗的 在哪个网站跑业务跑业务
  • 台州网站建设推广企点下载
  • 网站新开怎么做营销德宏芒市建设局网站
  • 非凡软件站成都营销网站制作
  • 织梦网站如何做移动端用wordpress写网页
  • 泗门网站建设wordpress 无法升级
  • 网站建设维护去哪里学网站建设推广入什么费用
  • 站酷海洛网站广告费怎么做分录
  • 佛山建设银行网站企业网站推广方法有哪些?
  • 宁波公司网站开发招聘Wordpress调用搜索
  • 网站建设的流程深圳定制家具厂排名
  • 网站开发实验室建设方案设计展板排版样式
  • 做地方网站赚钱吗怎么才能建设免费网站
  • 自助建站系统wordpress中国可以用吗
  • wordpress企业网站模板下载商城网站建设需求分析
  • c 做精品课程网站网站建设擎宇
  • 做网站黑网站赚钱么么昆明响应式网站
  • 网站推广软件哪个最好昆明seo排名外包
  • 网站建设如何asp.net jsp 网站
  • 大理网站建设公司移动互联网技术就业前景
  • 哪个网站可以做平面兼职1小时快速搭建网站
  • app网站开发报价流浪猫狗救助网站开发设计
  • 韶关住房和城乡建设网站网站设计开发工程师