基于框架的全局配置模型

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介:

艰苦奋斗

昨天晚上搞到23点多,终于有了比较满意的全局框架配置模块,这个在之前在Lind.DDD.ConfigConstants模块中出现,可以说大叔对之前全局配置的不满,而对原有功能进行的改进,对于生产和获取采用了单例,对于配置项采用了模块的概念,这样在XML表现上更加符合面向对象的原则,并且在可读性上也更加友好!

劳动成果

单例模式获取配置信息

全局的保持不变的信息,没有必要每次都new实例,直接使用单例模块是最好的选择

     /// <summary>
        /// 配置字典,单例模式
        /// </summary>
        /// <returns></returns>
        public static ConfigModel Config
        {
            get
            {
                if (_config == null)
                {
                    lock (_lockObj)
                    {
                        var old = Utils.SerializationHelper.DeserializeFromXml<ConfigModel>(_fileName);
                        if (old == null)
                        {
                            _config = _init;
                            Utils.SerializationHelper.SerializeToXml(_fileName, _init);
                        }
                        else
                        {
                            _config = old;
                        }
                    }

                }
                return _config;
            }
        }

配置实体

对于配置的实体类,大叔也公开一下,大家可以进行借鉴

    public class ConfigModel
    {
        public ConfigModel()
        {
            Caching = new Caching();
            Queue = new Queue();
            Logger = new Logger();
            Pub_Sub = new Pub_Sub();
            MongoDB = new MongoDB();
            Redis = new Redis();
            Messaging = new Messaging();
            DomainEvent = new DomainEvent();
            Socket = new Socket();
            CatServers = new List<CatServer>();
        }

        /// <summary>
        /// 启用属性变化跟踪
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 0)]
        public int PropertyChanged { get; set; }

        /// <summary>
        /// 缓存相关配置
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 1)]
        public Caching Caching { get; set; }

        /// <summary>
        /// 队列相关配置
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 2)]
        public Queue Queue { get; set; }

        /// <summary>
        /// 日志相关
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 3)]
        public Logger Logger { get; set; }

        /// <summary>
        /// Pub_Sub相关
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 4)]
        public Pub_Sub Pub_Sub { get; set; }

        /// <summary>
        /// MongoDB相关
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 5)]
        public MongoDB MongoDB { get; set; }

        /// <summary>
        /// redis相关
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 6)]
        public Redis Redis { get; set; }

        /// <summary>
        /// Messaging消息相关
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 7)]
        public Messaging Messaging { get; set; }

        /// <summary>
        /// 领域事件相关
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 8)]
        public DomainEvent DomainEvent { get; set; }

        /// <summary>
        /// Socket通讯配置 
        /// </summary>
        [System.Xml.Serialization.XmlElementAttribute(Order = 10)]
        public Socket Socket { get; set; }

        /// <summary>
        /// Cat实时监控配置 
        /// XmlArray表示以数组的形式
        /// </summary>
        [XmlArray(Order = 11)]
        public List<CatServer> CatServers { get; set; }
    }

对以上的设计完全是出于一种兴趣,感觉把每个模块都单独设置,在部署上不方便,所以把它们统一了,当然只适合于Lind.DDD框架,你自己的框架需要自己去定义实体了!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:基于框架的全局配置模型,如需转载请自行联系原博主。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
存储 NoSQL 数据处理
组合和继承怎么集成一个性能较好的项目
组合与继承是面向对象编程的核心概念,前者通过对象间关联实现高效解耦,后者则重用代码以节省空间和内存。组合常用于现代项目,利用代理与依赖注入简化代码管理;而继承简化了子模块对父模块资源的应用,但修改会影响整体。随着分层解耦及微服务架构如SpringCloud的出现,这些技术进一步优化了数据处理效率和服务响应性能,尤其在分布式存储与高并发场景下。同步异步调用、Redis分布式应用等也广泛运用组合与继承,实现代码和内存空间的有效复用。
|
7月前
|
关系型数据库 MySQL 数据库
定义模型和模型配置
定义模型和模型配置。
50 1
|
设计模式 前端开发 Java
如何实现自定义MVC框架(最终版本)
如何实现自定义MVC框架(最终版本)
54 0
|
数据采集 算法 数据可视化
MMdetection框架速成系列 第03部分:简述整体构建细节与模块+训练测试模块流程剖析+深入解析代码模块与核心实现
按照抽象到具体方式,从多个层次进行训练和测试流程深入解析,从最抽象层讲起,到最后核心代码实现,希望帮助大家更容易理解 MMDetection 开源框架整体构建细节
615 0
|
存储 NoSQL 算法
【实战场景一】设计一个分布式环境下全局唯一的信号器
如何正确设计一个分布式环境下全局唯一的信号器?
150 0
|
XML JSON 数据格式
gin框架学习-模型绑定和验证
对绑定解析到结构体上的参数,自定义验证功能。比如我们想name不为空的同时,不能为admin的时候,就无法 binding 现成的方法。
326 0
gin框架学习-模型绑定和验证
|
编译器 程序员
非全局环境
非全局环境
116 0
|
前端开发 Java 开发者
[实验]引入资源|学习笔记
快速学习[实验]引入资源
|
Java 调度 开发工具
QuickTask动态脚本支持框架整体介绍篇
一个简单的动态脚本调度框架,支持运行时,实时增加,删除和修改动态脚本,可用于后端的进行接口验证、数据订正,执行定时任务或校验脚本
266 0
QuickTask动态脚本支持框架整体介绍篇

相关实验场景

更多