日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅析:通过自定义DSL实现一个序列号生成器

發布時間:2024/8/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅析:通过自定义DSL实现一个序列号生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原始文章首發于個人博客

一、什么是DSL

DSL是(Domain Specified Language)的簡稱,中文含義為:領域專用語言。
設計者通過特定的語義,描述一些在特定的應用場景中出現的東西。

二、為什么要使用DSL

設計并使用DSL的優勢在于:在解決特定問題時,有更簡潔、更強大的語義表達能力。可以使用更少的代碼(或配置)來描述問題,開發效率高。

我們在日常工作中,往往會在大量重復性的工作上浪費大量時間。針對這種共性很強的工作,我們設計一個具有通用性和簡潔性的描述性語言,可以減輕我們的工作負擔,也可以使項目代碼更簡潔易讀。

三、分析業務需求

在公司內部系統開發中,有一個這樣的需求:

需要設計一個序列號生成器,它能放在不同模塊代碼中,根據不同模塊的序列號生成規則生成序列號。

通過分析生成規則,發現序列號生成器需要包含的功能有:

1. 在不同業務模塊中生成的模塊CODE不一樣
2. 需要包含當前日期。但生成的日期格式每個模塊可能會不一樣。(有的是yyyy-MM-dd,有的是yyyyMMdd等)
3. 需要生成流水號。流水號各個模塊需要生成的位數可能不一樣,有的需要定長4位,有的需要定長3位。位數不足的有的需要左補0(或者左補其他符號)

四、DSL設計

通過上述的需求分析,我們不難看出:

  • 各個業務模塊的序列號生成策略有一定的共性:比如都可能包含:日期、流水號等
  • 序列號生成策略中的變量僅有:模塊編碼、日期、流水號這三項,且業務模塊對于流水號的需求僅定長不同
  • 綜上所述,便有了2種解決思路:

  • 設計一個序列號生成工廠組件,提供:模塊編碼、日期、流水號等生成策略選項,由開發人員在實際開發過程中自己調用相關方法,按需使用。
  • 考慮到每個模塊都對應一個唯一的模塊編碼(模塊編碼要有,但是可以不作為生成序列號的一部分被顯示),因此可以將業務模塊和對應的模塊編碼相綁定。然后再利用注解,在對應的模塊編碼上指定相應的生成策略。
  • 第一種“手動指定策略”的思路我們先不詳細說。這里來詳細說說第二種思路。

  • 先將各個業務模塊對應的模塊編碼梳理出來,整理成一個配置類
  • 在配置類中的模塊編碼上,使用注解指定該模塊對應的序列號生成規則
  • 打算使用類似于EL表達式中取值的方式(即:類似于:xxx的方式)(注:后續代碼中為了方便,直接用了的方式來取值,就沒有寫{xxx}的方式)(注:后續代碼中為了方便,直接用了{}的方式來取值,就沒有寫xxx便了)來實時計算并填充數據
  • 將計算出來的序列號返回
  • 因為在業務需求中只有4個變量,所以我們首先得給那4個變量起個名字:
    例如:

    • 模塊編碼可以使用: ${module_code}來表示
    • 日期可以使用:${date}來表示
      等等…

    五、詳細代碼設計

    • 首先準備一個配置類,將梳理好的模塊編碼都放進去
    • 使用自定義注解指定序列號生成策略

    如上圖所示,電腦前有新的同學肯定已經發現了:里面還內嵌了一個@Appender注解。啥是@Appender注解?
    @Appender注解定義長這樣:

    這是因為考慮到后期的代碼擴展性,我將流水號生成的策略(占幾位,補什么符號等)抽離出來,使用@Appender注解可以起到靈活配置的作用。

    • 寫一個腳本解析器,用于解析注解中的序列號生成策略
  • 首先讀取注解內容

  • 計算或獲取實際內容,然后替換掉生成策略腳本中對應的變量占位符
    (注:為了精細化控制日期顯示格式,所以在代碼中用了多種日期格式變量)

  • 字符替換方法詳情:

    六、總結

    上面只是簡單地談一談一種基于自定義DSL,結合注解形式來寫一個序列號生成器地思路。還有很多細枝末節的東西沒有說到,例如:

    • 如何保證每天生成的流水號從1開始順序累加? --redis或其他分布式鎖機制
    • 如何用最短代碼將多個模塊共用同一套生成策略?
    • 如何同時集成“自動生成”和“手動生成”兩種方式?

    如果展開說那又可以水一篇博文了,這篇文章主要說一下思路,也算是給自己做一個經驗累積~

    總結

    以上是生活随笔為你收集整理的浅析:通过自定义DSL实现一个序列号生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 美女扒开腿免费视频 | 国产网友自拍 | av香蕉网| 美日韩av在线 | 素人fc2av清纯18岁 | 性xxxx另类xxⅹ | 成人在线免费高清视频 | 伊人影院视频 | 韩国美女av | 欧美一级艳片视频免费观看 | 日女人免费视频 | 一区二区国产精品视频 | 日韩一区免费视频 | 自拍偷拍亚洲一区 | 国产精品视频一区二区在线观看 | 国产v在线观看 | 国产经典一区 | 人妻少妇精品视频一区二区三区 | 亚洲人精品午夜射精日韩 | 中文字幕在线视频免费观看 | 国产亚洲女人久久久久毛片 | 不卡av在线 | 91福利在线观看视频 | 亚洲操操操 | 国产精品无码电影 | 视频一区二区欧美 | 探花视频在线版播放免费观看 | 国产精品日韩一区二区 | 亚洲插插插 | 午夜理伦三级做爰电影 | 精品人妻无码一区二区三区换脸 | 色综合久久久久久 | 久久人人爽人人人人片 | 天堂av电影在线观看 | 成人午夜精品福利 | 精品一二三四区 | 国产三级三级三级三级三级 | 怎么可能高潮了就结束漫画 | 亚洲av人无码激艳猛片服务器 | 9999国产精品 | 黄色av观看 | av自拍 | 少妇第一次交换又紧又爽 | 魔女鞋交玉足榨精调教 | 国产一区二区三区麻豆 | 国产高清免费在线观看 | 夜夜操av | xxx精品| 日日爱886 | 日韩成人av在线播放 | 色播视频在线观看 | 久久久久久久av | 蜜臀av一区二区三区激情综合 | 欧美黄频| 国产香蕉视频在线 | 成人免费网站视频 | 国产美女极度色诱视频www | 欧美在线观看一区二区三区 | 日韩高清一区二区 | www午夜 | 青草视频免费在线观看 | 日本免费一区二区三区四区 | 97视频久久久 | gav在线 | 国产精品999视频 | 亚洲欧美在线综合 | 国产精品视频一二三 | 欧美激情在线一区二区 | 亚洲国产精品视频 | 91国模少妇一区二区三区 | 深夜精品视频 | av网站免费大全 | 成人www. | 国产男人搡女人免费视频 | 伊人青青草视频 | 丰满的人妻hd高清日本 | 奇米影视网 | 在线波多野结衣 | 久久久久久久久91 | 91丨国产丨白丝 | 国产亚洲精品久久久久动 | 91热爆视频 | 五月婷婷中文字幕 | 啪啪免费视频网站 | 亚洲成a人片 | 日大逼| 国产另类ts人妖一区二区 | 免费三级大片 | 欧美高潮视频 | 欧美成人r级一区二区三区 中文无码一区二区三区在线观看 | 亚洲一区二区综合 | 男人用嘴添女人下身免费视频 | 中国白嫩丰满人妻videos | 黄91在线观看| 激情图片网站 | 成人深夜福利视频 | 久久涩视频 | 欧美理论在线观看 | 天天干夜夜撸 |