DDD 中為人所忽略的『軟體工程』與『工程實踐』方法


圖片來源:https://zhuanlan.zhihu.com/p/32196548?from_voters_page=true

我們知道架構設計需要從業務角度出發,我也寫過許多類似的內容,像是:『從使用者需求、談架構設計』、『您的軟體架構夠敏捷嗎?』等等、這些都是從業務角度出發嗎?這可以說對,但也可以說不完全對。。。怎麼說呢?

我們談論 軟體開發/架構設計 時,常聽到有人說,技術團隊與業務團隊溝通不良,導致技術團隊做白工!或者是技術團隊聽不懂業務團隊在說什麼?搞不清楚重點。而業務團隊也常常抱怨技術團隊沒辦法溝通,總是說著一堆技術專有(名詞/詞彙)導致無法溝通下去!


很熟悉吧?相信這是大家常聽到許多人嘴巴在說的。


我們再回到我一開始講的,業務角度出發,這出發點是對的沒有錯,但是我講的是我們開發軟體系統是要開發出符合客戶期望 + 能夠替客戶解決問題 + 符合客戶所想的,對!所以即便你與業務單位溝通融洽、沒有聽不懂的、雙方也沒有疑問,但是這不代表你做出來的系統就完全符合客戶所期望,還有,也不代表實作出來的系統是不是很容易地在這個客戶的『商業需求』上很容易地擴充 與 能夠進行最低成本的修改,對!不見得喔!XD


業務與技術單位溝通沒有隔閡,不代表技術完成品是妥當的!

業務與技術單位溝通沒有隔閡,不代表技術完成品是妥當的!

業務與技術單位溝通沒有隔閡,不代表技術完成品是妥當的!


敏捷有一個非常重要的出發點就是,替客戶創造價值,並在反覆設計/反饋/ Retro 中修正方向以達成客戶期望,但是... 這個過程走得不扎實,光是技術債爾後就會把你壓死,也就是說:


能否達成客戶期望是一回事!達成客戶期望後的產出以後你自己能不能維護那又是另外一回事。

能否達成客戶期望是一回事!達成客戶期望後的產出以後你自己能不能維護那又是另外一回事。

能否達成客戶期望是一回事!達成客戶期望後的產出以後你自己能不能維護那又是另外一回事。


近年來我的文章 & 教學大部分圍繞在一個重點就是在需求內使用適當的技術下【產生】適當的軟體架構來解決商業需求,產生的過程、如何產生?甚至如何讓你商業需求直接(對應/轉換)程式碼一直是我研究的重點,近幾年來開始盛行的 DDD 也是在降低業務團隊 (我這裡精確的是 USER,USER 不等同於業務團隊這是有差別的!) 開發團隊 的溝通成本,而降低了溝通成本後,但軟體付諸實現時,那個『工程方法』是否 100% 將你的 domain modeling 轉換成『程式碼』?我覺得,這段是許多人所忽略的、或者甚至說不在意的,但這其實是很可怕的!因為它產生的問題有可能大到你得放棄掉原有的解決方案而令爐灶。


所以,我們再回過頭來,就算在領域驅動開發 DDD 下,即便 DDD 已經將『戰術』、『戰略』等規則、什麼時候該關注什麼,該做什麼、界定與說明得非常清楚,專案形同『作戰』,舉個例子:打仗時擒賊先擒王這道理大家都懂,但是在關鍵時刻我需要百步穿楊的技術來擊穿敵人將領的盔甲,但是關鍵時刻卻底子不純熟扎實而射偏了也是枉然。


圖(一)、DDD 與 MDE 之間的關係



許多工程領域方法想要解決的就是這個問題,當然工程領域方法非常多樣化,這裡舉 DDD 為例子、DDD 背後的實作也是得依靠 MDE (Model Driven Engineering) 工程技術來實現,而這些工程技術一部份使用的 notations 可能會透過 UML 來呈現、而 OOA / D 也是工程領域方法中實現的其中之一的(細節)的實踐方法的部分,也是許多人忽略或覺得難學的部分,但往往才是最重要的 〔OOAD 與 DDD 在實踐上的差異可以參考我上一篇文章:在領域驅動下使用 Clean Architecture 實現高可用軟體架構〕,但程式碼是軟體開發 & 專案開發最重要的產出,也是實際生財的內容,如何讓程式碼與 (Domain Modeling/商業需求) 對應也是我多年來畢生所致力於研究的部分,DDD/MDE/MDD/OOAD/UML 只是研究過程需要的養分而已。

喜歡我的內容歡迎加入我的紛絲團 & 或者與我聯繫。

我提供企業內訊/顧問/架構與框架的客製化設計/Redis Cache 導入 等等。




關於 Gelis:

資深 .NET 技術顧問

FB 社團 (軟體開發之路):

https://www.facebook.com/groups/361804473860062/

FB 粉絲團 (Gelis 的程式設計訓練營):

https://www.facebook.com/gelis.dev.learning/

我講授過的課程 SlideShare:

https://www.slideshare.net/GelisWu


以下是我經營的項目與內容:

(1). 企業內訓課程

(2). 專業顧問


企業內訓課程:

1. .NET Core 3.1 從入門到進階

先前實體課程連結

2. 跨平台的 Web API Framework 框架設計

先前實體課程連結

3. 決戰 OOAD 系列課程 - 使用 UML

先前實體課程連結

4. 單元測試 UnitTest 與 Moq 物件實務課程

先前實體課程連結

5. 快速開發系列 - C# Project Templates 範本設計


留言

這個網誌中的熱門文章

軟體架構設計:API 設計準則(二)、API Design-First 原則、策略與開發流程

常見的程式碼壞味道(Code Smell or Bad Smell)

什麼是 gRPC ?