>  기사  >  백엔드 개발  >  사용자 정의 XML 동적 구성 프로그램의 샘플 코드 공유

사용자 정의 XML 동적 구성 프로그램의 샘플 코드 공유

黄舟
黄舟원래의
2017-03-22 16:46:371845검색

개요

1 프로그램 개발을 할 때 다음 두 가지 기본 모듈을 자주 사용합니다

1> 페이징 매개변수, 이메일 매개변수 등 프로그램의 기본 매개변수를 설정합니다. ;

2> 테이블 기반 개발을 기반으로 개발할 때 일부 판단 로직이 테이블 데이터에 배치됩니다.

2 이 두 가지 기본 애플리케이션 중 다음과 같은 요구 사항이 있습니다.

1> 중앙에서 관리

2> 즉, 시스템을 다시 시작하지 않고도 매개변수를 수정할 수 있습니다.

3>

프로그램의 주요 기능

1> 페이징 매개변수, 이메일 매개변수 등과 같은 프로그램의 기본 매개변수를 설정합니다.

----자동으로 추가합니다. XML의 구성 정보를 해당 엔터티에 전달합니다.

2> 테이블 중심 개발을 기반으로 개발할 때 일부 판단 논리가 테이블 데이터에 배치됩니다.

----XML의 Dctionary 데이터를 해당 엔터티에 자동으로 로드합니다. 그러나 이 방법은 계속해서 최적화되어야 하며 이제 사전 로드만 지원하고 더 복잡한 구조를 지원해야 합니다.

메인 코드

1 먼저 코드에서 엔터티를 참조하여 정의합니다.

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 프로그램을 처음 실행하면 해당 구성 정보가 출력됩니다

사용자 정의 XML 동적 구성 프로그램의 샘플 코드 공유

2 매개변수가 수정되면 다시 시작하지 않고도 최신 정보를 얻을 수 있습니다. 3초간 매개변수를 수정한 후 페이지를 새로고침하세요

사용자 정의 XML 동적 구성 프로그램의 샘플 코드 공유

위 내용은 사용자 정의 XML 동적 구성 프로그램의 샘플 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.