[項(xiàng)目組] 配置表解析升級(jí)指南

ORM.png

目的與好處

  • 不依賴于具體存儲(chǔ)格式, 統(tǒng)籌表格格式差異(xml和csv)
  • 有報(bào)錯(cuò)機(jī)制: 能夠清楚指出 某表.某行.某列 數(shù)據(jù)有誤, 或格式有誤, 能統(tǒng)一彈出提示窗口, 讓策劃自己玩耍.
  • 簡(jiǎn)化代碼, 逐步統(tǒng)一所有配置表處理代碼與風(fēng)格.
  • 類型自動(dòng)轉(zhuǎn)換, 支持[所有基本數(shù)據(jù)類型], 以及枚舉, Vector2, Vector3, 數(shù)組(可自定義分隔符, 默認(rèn)'|', 可配置)

遷移代價(jià)

  • 需要使用上進(jìn)行適應(yīng), 習(xí)慣新的方式, 對(duì)無法滿足的需求進(jìn)行指出.
  • 特殊類型轉(zhuǎn)換代碼依然需要自行從原代碼中copy出來, 只是換了另一種方式.
  • 改動(dòng)還是有工作量在, 而且需要細(xì)心遷移, 注意檢測(cè)結(jié)果.

操作細(xì)則:

DriverLicenseVo, SeasonRankInfo為例: DriverLicenseConfig.xml, rank_match.xml

1.配置類繼承 DBaseInfoDUniqueInfo, 使用特性[TableFile]
// 無唯一ID
[TableFile(Name = "DriverLicenseConfig.xml")]
public class DriverLicenseVo : DBaseInfo
// 有唯一ID, 需要填寫PK(主鍵)字段的名詞, 對(duì)應(yīng)xml中某唯一列
[TableFile(PK = "Rank", Name = "rank_math.xml")]
public class SeasonRankInfo : DUniqueInfo
#特性說明:
- PK: 主鍵名
- Name: 配置文件全名
#基類說明:
- DBaseInfo: 無唯一列的數(shù)據(jù)類繼承
- DUniqueInfo: 有唯一列的數(shù)據(jù)類繼承, 需要填寫PK列名
2.特殊需求

類型處理不能滿足:

#DriverLicenseVo.cs
// 原始數(shù)據(jù)需要拼接一段字符串, 才進(jìn)行枚舉轉(zhuǎn)換"License"
[TableColumn(Name = "driverLevel")]
private string _driverLevel
 {
      set { driverLevel = (DriverLevelType)Enum.Parse(typeof(DriverLevelType), "License" + value); } 
}
// 駕照等級(jí)
public DriverLevelType driverLevel = DriverLevelType.None;
  • 說明: 設(shè)置了[TableColumn(Name = "driverLevel")] 中的Name優(yōu)先于字段原名.
    所以可以寫一個(gè)private的setter, 進(jìn)行類型轉(zhuǎn)換處理
3.配置類修改說明
  • 1.屬性名稱與xml字段同名: xml的AttributeName對(duì)應(yīng)類的FieldName, 會(huì)直接進(jìn)行賦值.
# DriverLicenseVo.cs
    // 駕照標(biāo)題
    public string title = null;
    <item ... title="新手教程" ...></item>
    title大小寫完全一致最省事, 什么都不用配置
  • 2.如果屬性名字與xml中的不對(duì)應(yīng)
    使用特性[TableColumn(Name = "數(shù)據(jù)列名稱")]來指定.
# SeasonRankInfo.cs
    // 段位描述
    [TableColumn(Name = "Describe")]
    public string des = string.Empty;
    <item ... Describe="青銅" ...></item>
    特別注意xml中存在英文單詞拼寫錯(cuò)誤, 導(dǎo)致與類中字段名不一致的情況
  • 3.若需要進(jìn)行"string".Split(',')進(jìn)行處理的數(shù)組類型, 則使用特性[TableColumn(Sp = ",")]來指定.
# DriverLicenseVo.cs
    [TableColumn(Sp = ",")]
    // 機(jī)器人名稱
    public string[] robotNames = null;
  // 上面配置相當(dāng)于舊代碼:
    vo.robotNames = table["robotNames"].ToString().Split(',');
4.加載代碼添加泛型參數(shù):
  • 1.在ConfigLoader.InitLoaderQueue配置加載入口處, 修改代碼如下:
LoadConfig<DriverLicenseVo>(...);
LoadConfig<SeasonRankInfo>(...);
  • 2.多表合一需要多傳一個(gè)參數(shù)
LoadConfig<SectionIndexTableVo>(ConfigPath.PVE_CONFIG, "SectionName", LoadMode.NetFirst);

SectionName 就是多表中的子節(jié)點(diǎn)名, 一張表有多少個(gè)子表, 就要寫幾行, 只是類名不同, 子表名稱不同

4.XmlOperation中xml轉(zhuǎn)vo的代碼, 修改為
參考 XmlOperation.LoadXMLDriveringLicenseCofing:
// 獲取整個(gè)表格List
List<DriverLicenseVo> vos = TableReader.GetInfos<DriverLicenseVo>();
參考 XmlOperation.LoadXMlMatchRankInfo:
// 根據(jù)id獲取單條記錄 [繼承DUniqueInfo才能使用此API]
DriverLicenseVo vo = TableReader.GetInfo<DriverLicenseVo>(id);

整理過程如遇到困難, 需要擴(kuò)展功能, 歡迎提出需求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜒车,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子似扔,更是在濱河造成了極大的恐慌租冠,老刑警劉巖搪花,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遏片,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡撮竿,警方通過查閱死者的電腦和手機(jī)丁稀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倚聚,“玉大人,你說我怎么就攤上這事凿可』笳郏” “怎么了授账?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)惨驶。 經(jīng)常有香客問我白热,道長(zhǎng),這世上最難降的妖魔是什么粗卜? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任屋确,我火速辦了婚禮,結(jié)果婚禮上续扔,老公的妹妹穿的比我還像新娘攻臀。我一直安慰自己,他們只是感情好纱昧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布刨啸。 她就那樣靜靜地躺著,像睡著了一般识脆。 火紅的嫁衣襯著肌膚如雪设联。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天灼捂,我揣著相機(jī)與錄音离例,去河邊找鬼。 笑死悉稠,一個(gè)胖子當(dāng)著我的面吹牛宫蛆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偎球,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼洒扎,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了衰絮?” 一聲冷哼從身側(cè)響起袍冷,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猫牡,沒想到半個(gè)月后胡诗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淌友,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年煌恢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片震庭。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瑰抵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出器联,到底是詐尸還是另有隱情二汛,我是刑警寧澤婿崭,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站肴颊,受9級(jí)特大地震影響氓栈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜婿着,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一授瘦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧竟宋,春花似錦提完、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至婉陷,卻和暖如春帚称,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秽澳。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工闯睹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人担神。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓楼吃,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親妄讯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子孩锡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)亥贸,斷路器躬窜,智...
    卡卡羅2017閱讀 134,639評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法炕置,內(nèi)部類的語法荣挨,繼承相關(guān)的語法,異常的語法朴摊,線程的語...
    子非魚_t_閱讀 31,603評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,807評(píng)論 0 11
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 10,934評(píng)論 6 13
  • 爸媽今天從老家回來默垄,生活回歸常態(tài),有人可以依靠啦甚纲! 到貨的葡萄酒杯子特別漂亮口锭,出乎我的意料,太喜歡了介杆!立馬就倒了一...
    華麗的美麗麗閱讀 165評(píng)論 0 0