<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 tplant 快速概覽代碼的領(lǐng)域模型

          共 1742字,需瀏覽 4分鐘

           ·

          2021-07-16 04:34

          接地氣的 DDD


          看到技術(shù)雷達發(fā)表的《使用函數(shù)式語言建立領(lǐng)域模型》文章,非常開心,因為它使用了 TypeScript 來做落地說明,這是一個非常接地氣的 DDD。


          ef7fd5a41d54c57ca674724e00a6dc89.webp

          有不接地氣的 DDD 嗎?參考《領(lǐng)域驅(qū)動設(shè)計》這本書和相關(guān)(主觀的)評價:


          0af0ab8eb84cb8457b86cb35c69a7650.webp? ? ? ?391e47118a8a8b9f218caf25509e773c.webp?


          為什么說《使用函數(shù)式語言建立領(lǐng)域模型》就非常接地氣了呢?因為采用了 TypeScript。TypeScript 是 JavaScript 語言的超集,既有 JavaScript 所有的好處,又避免了 JavaScript 飽受詬病的動態(tài)類型帶來的問題。JavaScript 是很強大的,借瀏覽器這個宿主打遍天下無敵手,又借 NodeJs 滲透到服務(wù)器端。如果一定要糾結(jié)學習編程從哪門語言開始的話,那么當然是從學習 JavaScript 開始,沒有第二種更好的選擇。


          TypeScript ?基于 JavaScript 構(gòu)建了類型系統(tǒng),而《使用函數(shù)式語言建立領(lǐng)域模型》則很好地演示了如何通過 TypeScript 的類型系統(tǒng)來設(shè)計領(lǐng)域模型。就是說,通過 TypeScript 的類型系統(tǒng),實現(xiàn)了代碼和領(lǐng)域模型的等價,不僅能夠用它在敏捷開發(fā)過程中進行溝通,而且保證跑著的系統(tǒng)真的就是使用了這樣的領(lǐng)域模型,也就是說,把領(lǐng)域驅(qū)動設(shè)計落了地。


          如果只設(shè)計,不落地,那其實就是在吹牛嘛,不能當真的。多少團隊畫出的設(shè)計圖和實際代碼天差地別的?我想有經(jīng)驗的程序員心理都清楚。


          e942c9fe72fab1dec20d015d929e6e27.webp


          到底什么是設(shè)計?


          很多人傾向所謂的設(shè)計先行,寫代碼前先寫設(shè)計文檔,畫圖。這里隱含的意思是,代碼是實現(xiàn),而不是設(shè)計。但是《使用函數(shù)式語言建立領(lǐng)域模型》糾正了這一觀點:代碼才是設(shè)計


          代碼=設(shè)計=模型=文檔



          實際上代碼比較擅長表達設(shè)計內(nèi)容,從本質(zhì)上講,源代碼是一個文檔,可以完美地描述產(chǎn)品的每個當前設(shè)計決策。

          《使用函數(shù)式語言建立領(lǐng)域模型》


          代碼才是真正的設(shè)計,其他只是 PPT。但是《使用函數(shù)式語言建立領(lǐng)域模型》也說了,雖然代碼是設(shè)計,但是領(lǐng)域?qū)<铱刹灰欢茏x懂代碼(雖然 TypeScript 的語法簡單易學,但是我估計多數(shù)領(lǐng)域?qū)<疑踔聊承?Java 程序員,是從本能上排斥的),這制約了代碼=模型這樣的等式,存在鴻溝。這也是為什么統(tǒng)一建模語言(UML)大行其道的原因,它是一門表達軟件產(chǎn)品的圖形化語言。


          既然 UML 是溝通利器,然而容易和代碼脫節(jié),正如作者說的:


          我還記得我的第一份工作,每當有代碼或者設(shè)計改動時,都要去更新UML類圖以及數(shù)據(jù)庫設(shè)計文檔。這些文檔大概充當著共享模型的作用,但是最終這些設(shè)計類圖和文檔都慢慢變得不可信,因為沒有任何手段保證文檔會被及時更新。《使用函數(shù)式語言建立領(lǐng)域模型》


          終極解決方案


          UML 是一種視圖。就像任何編程語言,其實本質(zhì)上只是二進制指令的一種高級視圖。既然最終運行的軟件跑的是二進制指令,而我們可以用高級語言去查看,那么同樣我們也可以把源代碼以一種圖形化的方式去查看。也就是說,將人工繪制 UML 圖,變成自動生成,那么就不存在代碼和 UML 圖脫節(jié)的問題了。想用 UML 視圖查看源代碼哪個版本,就基于該版本生成一份 UML 圖就好。


          tplant


          如果我們使用 TypeScript 來做開發(fā),那么已經(jīng)有開源工具可以自動從 TypeScript 代碼生成 UML 圖了,這個工具就是本人參與開發(fā)的 tplant!


          ef7faf54273dc93f8eeeba44cd9a3045.webp


          使用錄屏


          a6df7e4fbe3788a5090b1eca3d429a72.webp


          文字版使用說明


          npm install --global tplant
          cd your-typescript-project-folder
          tplant --input src/**/*.ts --output output.svg
          open output.svg


          總結(jié)


          盡管《使用函數(shù)式語言建立領(lǐng)域模型》使用了 TypeScript 將 DDD 落地,但是在和不愿意看代碼的人之間仍然存在溝通鴻溝。本文厚著臉皮推薦了自己參與開發(fā)的一個開源工具 tplant,將 TypeScript 自動轉(zhuǎn)成 UML,彌補了《使用函數(shù)式語言建立領(lǐng)域模型》唯一的缺憾。


          如果有人說連 UML 都不愿意看,說只想看 PPT,那么請他自行開發(fā)一個將代碼轉(zhuǎn)成 PPT 的工具吧。總之,不要相信 PPT,一切文檔都應(yīng)該基于代碼生成。



          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  加勒比有码 | 中文字幕在线无码视频 | 亚洲成人色老头77777性爱网 | 亚洲 欧美 中文字幕 | 天天爽天天澡天天爽视频 - 百度 无码毛片一区二区三区四区五区六区 |