發表文章

目前顯示的是 1月, 2021的文章

軟體架構設計 與 DDD 相關問題的答客問

圖片
軟體架構設計 與 DDD 相關問題的答客問 圖片來源:https://c4model.com/ 前言 由於我最近蠻多文章在介紹 Clean Architecture 與 DDD 領域驅動設計與開發以及 C4 Model,但是套用到他目前的專案中卻不知道如何開始?再者,TDD 只是概念上了解,但是在真實的專案中如何開始?包括我的 OOAD 課程中使用的 Modeling 的分析方法在 TDD 下真的也可以使用?UML 不會回歸 Waterfall 嗎?這些讓人一頭霧水? 問題一: 您部落格中提到的 C4 Model 的概念究竟是什麼?我現在在現有專案中要怎麼使用? 回答:  我在前一篇文章中提到了 Simon Brown 的 C4 Model,也是我在當時 DDD 的分享中主要內容之一。 圖(一)、以決戰 OOAD 課程中的線上房貸申請系統為例的 C4 Model 為什麼當時我會特別提到 C4 Model?主要是因為, 我覺得他的概念不錯的地方在於它是走 DDD 的角度來發展的,很多人說他為什麼要另外創創造一個表示法?部分比較傳統的開發者甚至是批評他的內容是四不像, 但是這我覺得其實是種誤解,因為其實作者有說明 C4 其實沒有限定使用哪一種表示法,我覺得 C4 最棒的地方(也是有些朋友會誤解的)在於它將軟體分為 4 個層次(Level), 這四個 Level 並不是指分層的結構 , 而是作者用一種抽象化的方式將軟體從最外的 System Context 視角(C4的System Context 也可對應到 DDD 的 Bounded Context),由外一塊塊的往內窺視,因為作者覺得軟體架構就像 Google Map 一樣,由最頂端往下看就是一顆地球,接著放大某些視角,就可以看見台灣,再放大台北市就可以看見都市、接著再放大就會看見街道,而街道 = Code ,就是最細節的部份 。 套用 C4 的最主要目的,其實是希望透過這樣的『抽象』來建立一個【領域專家】與【開發團隊】溝通沒有隔閡的通用語言(Ubiquitous Language)、來讓『技術視角』與『業務視角』的溝通可以像 Google Map 視角一般,開發人員可以看見要建造哪一個『街道』,而領域專家也可以 看到整個地球的『哪一個國家的(街道)會被建造或是修改』。 而透過這樣的抽象,對應到