基于框架的全(quan)局配置(zhi)模(mo)型
艱苦奮斗
昨天晚(wan)上搞到23點多,終于(yu)有了比(bi)較滿意的全(quan)局(ju)框架配(pei)置模塊(kuai)(kuai),這個在之(zhi)前(qian)在Lind.DDD.ConfigConstants模塊(kuai)(kuai)中出現,可(ke)以說大叔對(dui)之(zhi)前(qian)全(quan)局(ju)配(pei)置的不滿,而對(dui)原有功能進行的改進,對(dui)于(yu)生產(chan)和獲取采用了單例,對(dui)于(yu)配(pei)置項(xiang)采用了模塊(kuai)(kuai)的概念,這樣在XML表(biao)現上更(geng)加符合面向對(dui)象的原則(ze),并且在可(ke)讀性上也更(geng)加友(you)好!
勞動成果
單例模式獲取配置信息
全局的(de)保持不變的(de)信息(xi),沒有必要每次(ci)都new實例(li)(li),直(zhi)接使(shi)用(yong)單(dan)例(li)(li)模塊是最(zui)好的(de)選擇(ze)
/// <summary> /// 配(pei)置(zhi)字典,單例模式 /// </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; } }
配置實體
對于配置的實體(ti)類,大叔也公(gong)開(kai)一(yi)下(xia),大家(jia)可以進行(xing)借鑒
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> /// 啟用屬性(xing)變化跟(gen)蹤 /// </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> /// 隊列相關(guan)配置 /// </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相(xiang)關 /// </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相(xiang)關 /// </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> /// 領域事(shi)件相關 /// </summary> [System.Xml.Serialization.XmlElementAttribute(Order = 8)] public DomainEvent DomainEvent { get; set; } /// <summary> /// Socket通(tong)訊配置 /// </summary> [System.Xml.Serialization.XmlElementAttribute(Order = 10)] public Socket Socket { get; set; } /// <summary> /// Cat實時監控(kong)配置 /// XmlArray表示以數(shu)組的形式 /// </summary> [XmlArray(Order = 11)] public List<CatServer> CatServers { get; set; } }
對以上(shang)的設(she)計完全是出于一種興趣,感覺(jue)把(ba)每個模(mo)塊(kuai)都單(dan)獨設(she)置,在部署(shu)上(shang)不方(fang)便,所(suo)以把(ba)它們統一了,當然只適(shi)合于Lind.DDD框架(jia),你自(zi)己的框架(jia)需要自(zi)己去定義實體了!