概要
1 プログラム開発を行う際には、次の 2 つの基本モジュールをよく使用します
1> ページングパラメータ、メールパラメータなどのプログラムの基本パラメータを設定します
2> -駆動型開発、つまり、テーブル データに判断ロジックを組み込む
2 これら 2 つの基本的なアプリケーションには、次の要件があります。
1> 構成可能であること。 、システムケースを再起動せずに、パラメータを変更します。
3> 使い方は簡単です。
プログラムの主な機能
1> ページングパラメータ、電子メールパラメータなどのプログラムの基本パラメータを設定します。
----対応するエンティティにXMLの構成情報を自動的に追加します。
2> テーブル駆動開発に基づいて開発する場合、テーブルデータにいくつかの判定ロジックが配置されます。
----XML 内の Dctionary データを対応するエンティティに自動的にロードします。ただし、このメソッドは引き続き最適化する必要があり、現在は辞書のロードのみをサポートしており、より複雑な構造をサポートする必要があります。
メインコード
1 まず、コード内でエンティティを定義し、参照します。
Example
public class AppSetting { public string PageSize; public string WebUrl; public Dictionary<string, string> IsPartialPayment; public Dictionary<string, string> EntityCurrency; }
2 は、対応する XML ファイルを定義します。 このうち、プログラムの基本的な構成情報は、AppSettings
ノードの下に設定されます。
<?xml version="1.0" encoding="utf-8" ?> <settings> <DictSettings> <Dict name="AppSettings" > <add key="PageSize" value="2"></add> <add key="WebUrl" value="www.baidu.com"></add> </Dict> <Dict name="IsPartialPayment"> <add key="TTPART" value="true"></add> <add key="TT50/50" value="true"></add> </Dict> <Dict name="EntityCurrency"> <add key="China" value="CNY"></add> <add key="HQ" value="USD"></add> <add key="Default" value="USD"></add> </Dict> </DictSettings> </settings>
3 最後に、2 の XML 構成情報を 1 のエンティティにロードするには、XML ロード コードの一部が必要です。
public static class ConfigManager { public static AppSetting AppSetting; private static string xmlPath; public static Dictionary<string, Dictionary<string, string>> DictAppSettings = new Dictionary<string, Dictionary<string, string>>(); static ConfigManager() { xmlPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory.ToString(), "AppConfig.xml"); LoadSettings(xmlPath); } private static void LoadSettings(string path) { DictAppSettings.Clear(); //加载XML中所有的key,value,并转换成Dictionary对象 XmlNode dictRootNode = FileHelper.GetXMLNode(path, "/settings/DictSettings"); foreach (XmlNode dictType in dictRootNode.ChildNodes) { Dictionary<string, string> dict = new Dictionary<string, string>(); foreach (XmlNode dictItem in dictType.ChildNodes) { dict.Add(dictItem.Attributes["key"].Value.Trim(), dictItem.Attributes["value"].Value.Trim()); } DictAppSettings.Add(dictType.Attributes["name"].Value.Trim(), dict); } //将Dictionary 对象转换成实体的字段和对应dctionary上 var serializer = new JavaScriptSerializer(); //将AppSettings转成json string jAppSetting = serializer.Serialize(DictAppSettings["AppSettings"]); DictAppSettings.Remove("AppSettings"); //将除AppSettings中的信息转成json string jDict = serializer.Serialize(DictAppSettings); //将AppSettings和其它的Dictionary 加载到对应的实体中去。 string json = string.Format("{0},{1}", jAppSetting.Remove(jAppSetting.Length - 1), jDict.Remove(0, 1)); AppSetting = serializer.Deserialize<AppSetting>(json); //当修改文件时,重新加载XML FileHelper.CacheDependencyFile(path, CacheRemovedCallback); } private static void CacheRemovedCallback(string key, object value, CacheItemRemovedReason reason) { //此方法来自Fish.Li string xmlFilePath = (string)value; // 由于事件发生时,文件可能还没有完全关闭,所以只好让程序稍等。 System.Threading.Thread.Sleep(3000); LoadSettings(xmlFilePath); } } public static class FileHelper { public static XmlNode GetXMLNode(string path, string xPath) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(path); return xmlDoc.SelectSingleNode(xPath); } public static void CacheDependencyFile(string path, CacheItemRemovedCallback removedCallback) { CacheDependency dep = new CacheDependency(path); HttpRuntime.Cache.Insert(Guid.NewGuid().ToString(), path, dep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, removedCallback); } }
最終的な効果
1 プログラムの初回実行時に、対応する設定情報が出力されます
2 一部のパラメータが変更された場合、再起動せずに最新の情報を取得できます。パラメータを 3 秒間変更した後、ページを更新してください
以上がカスタム XML 動的構成プログラムのサンプル コード共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。