生活随笔
收集整理的這篇文章主要介紹了
通用业务流水号功能设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ?有一段時間沒有思考代碼相關的工作了,最近項目經常碰到不同業務流水號的生成,下面的技術人員每次都針對流水號生成寫一些復雜的代碼;為了解放以后這方面的工作于是動了一下腦子想一個動態可配置的流水號生產組件,雖然沒寫代碼一段時間但腦子在這方面還是挺靈活,大概想了一下基本就構建出一個通用業務流水號配置功能,以下分享一下這個設計。具體實現:流水號規則定義組件 https://github.com/IKende/BNR
流水號拆分
其實業務流水號都是由不同總分組成,每部分都表達不同的含意。所以在設計上需要對流水號進行分解。以"GZ201602020001RJ"的主要組成部分:{GZ}{20160202}{0001}{RJ}
{GZ}
這個規則主要是描述所在城市地區
{20160202}
當前業務所在的年月日
{0001}
當天遞增量
{RJ}
固定業務類型
? ? ? ?總的來說,業務流水號都是由不同參數所組成。
設計
在設計上必須由一個基礎的設計模型來支持不同參數的來源和擴展,可能定義一個基礎的結構{Type:Parameter}。那流水號的組成規則是{Type1:Parameter}{Type2:Parameter}{Type2:Parameter},通過不同的規則拼裝而成;在技術可以定義一個接口來定義一個參數的定義。
| 1 | public?interface?IParameterHandler |
| 3 | ????void?Execute(StringBuilder sb,?string?value); |
針對以上規則定義一個簡單針對中文獲取首拼音的規則:{CN:廣州},針對這情況可以實現如下:
| 04 | ????[ParameterType("CN")] |
| 05 | ?public?class?ChineseSpellCodeParameter : IParameterHandler |
| 07 | ????????public?void?Execute(StringBuilder sb,?string?value) |
| 10 | ????????????foreach?(char?item?in?value) |
| 12 | ????????????????sb.Append(Hz2Py.Convert(item.ToString()).Substring(0, 1)); |
? ? ? ? 經過參數模塊解釋{CN:廣州}=GZ
? ? ? ? 通過這種方式可以擴展出很多很多不同的可配置的參數規則來滿足應用的需要。
整體使用效果
針對最開始的那個業務號詳細定義規則如下:{CN:廣州}{D:yyyyMMdd}{N:{D:yyyyMMdd}/0000}{S:RJ}
view sourceprint?
| 1 | string[] rule =?new?string[]{ |
| 2 | ????"{CN:廣州}{D:yyyyMMdd}{N:{D:yyyyMMdd}/0000}{S:RJ}" |
| 4 | foreach?(string?item?in?rule) |
| 6 | ????string?value = BNRFactory.Default.Create(item); |
| 7 | ????Console.WriteLine(item); |
| 8 | ????Console.WriteLine(value); |
相關文章:
原文地址:http://www.ikende.com/blog/fc23df1797d443c2a052ea3c1fcd7a17
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的通用业务流水号功能设计的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。