停下腳步、思考看看
最近發生一件事情,就是我在 DDD 大會所分享的內容『實踐 Clean Architecture(實作高可用性的軟件架構)』被人說題目過於高大上,或者說這個 Clean Architecture 不是他想的那個 Clean Architecture.. 或者是有某種超自然現象蒙蔽了他的雙眼導致他不見的情事... 等等、的確我這個題目訂得非常不好,內容的編排上也沒有貼近主題,對各位聽眾著實抱歉,當初這個題目的制定,其實是針對先前筆者撰寫過的文章:
- 敏捷的軟體架構設計:可擴展的軟體架構
- 您的軟體架構夠敏捷嗎?(二)- 持續演進的軟體架構
- 您的軟體架構夠敏捷嗎?(三)- 實現最後的設計
- 從使用者需求,談架構設計
- 從使用者需求、談架構設計(二)- Clean Architecture 一個整潔的架構篇
這五篇系列文章、再加上先前替金融保險業、竹科、運輸業 客製化了一個 Web API Framework 框架。這個框架當初的開發架構如下:
圖片(一)、Easy Architecture Framework 開發架構
它具體想展現的效益如下:
圖片(二)、Easy Architecture 預期達到的效益
這個框架後來我也有開相關的課程,因為 .NET Core 的跨平台的浪潮已經開始,因此我也順勢地藉由當時的 .NET Standard 2.0 開始支援 Reflection 機制而將原有的 Web API Framework 升級至 .NET Core 2.1 的環境之中,於是催生了這個課程。
圖片(三)、跨平台的 Web API Framework 框架開發
而這個跨平台的框架開發課程也一連開了三個梯次如下:
第一梯: https://mystudyway.kktix.cc/events/softshare-web-api-framework
第二梯: https://mystudyway.kktix.cc/events/softshare-web-api-framework-second
第三梯: https://mystudyway.kktix.cc/events/softshare-web-api-framework-third
而最近 2-3 年學習的 Clean Architecture 的設計理念,發現我當初設計的 Easy Architecture 框架,幾乎實現了 Clean Architecture 的基本目標:
-
獨立於框架:也就是說,一個好的軟體架構不應該相依於一些功能強大的軟體程式庫,因為這樣會讓你這個軟體架構的擴充性受制於那個產品。
-
可測試:好的軟體框架應該要可以在沒有 UI、Web Service/Web API、資料庫 的時候進行測試,也就是類似在,有妥善的介面 (Interfaces) 下,應該可以撰寫 Isolation Unit Test 的概念
-
獨立於 UI:好的框架應該獨立於 UI,也就是不受至於 UI,我可使用任何一種 UI,我可以更改使用任何一種 UI,比如:ASP.NET MVC/Web Form/WPF 、而不需要修改我的商業邏輯
-
獨立於資料庫:在你的商業邏輯上,我可以任意抽換為 Mango DB、MSSQL Server、Oracle 等,也就是你的業務規則不應該綁訂資料庫
-
獨立於任何外部代理:也就是說,你的業務規則應該不受外界的介面所影響。
但 Framework 內若對照 Clean Architecture 目前還缺少 Aggregate Root 概念與 Presenter Use Case Output port 具體的準則與做法。
公開演講講得不好,在這裡和大家說抱歉,但小弟這裡沒什麼超自然現象與蒙蔽雙眼情事化發生,小弟有的只是多年在企業端執行專案(流通業、金融業、海運、政府機關)等實務的專案開發經驗、該 DDD 的演講我也的確實講得不好,因為當初準備的內容相當多,本來想在課程中全部講Clean architecture 的開發,但是一直講開發又怕底下的睡著,因為覺得講 DDD 的架構設計應該用一個實際的例子講如何實踐高可用才有說服力,但是因為我又想講模型如何與程式碼關聯、所以一定要有實作的部分、但是只有 50 分鐘應該講不完,於是又拿出先前開發的 generate code 套件修改為 DDD 專屬的,我想講一個直接以domain model來產生基礎的程式碼,但是我又想帶入 DDD 的觀念,於是又加入許多 DDD 的內容,於是刪掉了一些投影片,最後講起來變成四不像.. 實在非常不好意思。
但話說回來,這些年來,我的技術與我的評價是我的客戶多年來因為我搞定他們的系統、成功建置他們的平台而建立的,演講沒講好也趁機停下腳步讓我思考看看自己究竟要的是什麼?決不是像某人說的,為了累積自己的聲量?... 當初確實想挑戰講好這個題目,我把它視為一種挑戰,結果我錯了,所以,未來我接這種公開演講我得多思考,如果不是我擅長的 UML、OOAD、Web API Framework 設計、C#、ASP.NET、Blazor.... 等等、我想我應該是不會接了。
最後.. 小弟部落格只有多年在業界專案開發相關經驗分享、這是大家看的到的,絕沒有什麼高大上、甚至還有什麼特異功能的存在,更不可蒙蔽你的雙眼,(謎之音)...在客戶端做專案時,客戶哪那麼容易被你蒙蔽雙眼?更不用說還有懂技術的客戶...遇到刁難的客戶,在驗收時後,你就知道了...
好了,就想發發牢騷,因為我如果不為自己說話,誰要為你說話呢?大家下次見了!
留言
張貼留言