領域驅動設計思想在乙個小工具上的實踐

2021-08-03 16:47:33 字數 832 閱讀 5684

領域驅動設計(ddd)概念已經提出很多年,但在公司的企業軟體系統中從未應用,近期ddd被領導越來越看重,因此開始了學習探索之路。

本人在學習期間,正好需要做乙個小型sql指令碼執行工具。這個工具的主要需求梳理後,分為如下幾項:

1、可以單獨執行乙個sql指令碼,也可以批量執行;

2、批量執行時,預設按照指令碼所在目錄、指令碼檔名排序後的順序逐個執行;

3、批量執行時,也可以編輯指令碼列表,包括移除、開啟指令碼檢視、調整執行順序;

4、指令碼在「未進入批量執行列表」、「執行失敗」狀態允許編輯;

5、執行時,定位到執行的語句塊,輸出執行日誌,包括成功或者失敗、如果失敗提供出錯資訊;

6、提供多個資料庫連線,執行指令碼時選擇需要的資料庫。

當需求梳理出時,屬於本工具的「領域物件「就基本分析出來了(上述標紅的概念)。實際的大系統,大專案當然難度比這複雜,但是過程是以昂揚的,逐步梳理、逐步細化、精準。這個過程以我目前的體會,大概總結為以下四步:

第一步,獲取豐富的業務內容,越豐富越好,因為其中包含了領域物件的行為與屬性;

第二步,不考慮已經成熟的領域概念,對沒有著落的業務行為、屬性找到它的歸屬--找到領域概念;

第三步,為領域概念下定義,明確領域物件的邊界,進一步確定物件之間如何溝通協作;

第四步,再次進入業務系統,可以以典型業務場景為容器,把這些概念放進去錘煉,逐步完善,最終形成清晰的領域模型。

就上面這些標紅的概念,也是我在邊做工具邊修改的過程中逐步提煉和完善的,最終形成了清晰、準確、完整的小小模型。下圖是大概的業務模型:

diy乙個小工具

仔細分析任務,其實關鍵點就是環境變數,建立乙個新程序,然後把環境變數塊傳遞進去,變可完成任務,環境塊是乙個string,name value 而且對於unicode 和ansi 的對待方式不同,如果是unicode,createprocess時要傳遞 dword dwcreationflags這個引...

介紹乙個小工具 SSL exporter

kubeadm 安裝時的證書有效期設定為 1 年,雖說有 sealos 這樣的不知名安裝器以及各種方案來更新證書,但是對於像我一樣經常跟不知 的 kubernetes 集群打交道的人來說,這個有效期就是達摩什麼的利劍,不一定什麼時候會砍到脖子上。如果能用 prometheus 對證書有效期進行監控或...

介紹乙個小工具 Linqer

這些天寫linq挺煩人的,就上網搜搜可有什麼好的sql轉linq的工具,咦,馬上就看上了linqer。哈哈,介紹一下使用方法吧 第一步 執行這個神馬檔案。第二步 指定乙個路徑給它。他會生成乙個linqer.exe可執行的檔案。第三步 執行這個exe檔案,點選add按鈕,第四步 在彈出的add介面中,...