領域驅動設計
從最早在學校學習 C++ 開始接觸程式,到轉行軟體工程師/資料科學家工作每天使用的 Python,完成任務之餘也總是會想怎麼樣做會更好。從程式語言本身的運用開始開拓眼界,學習演算法與資料結構、物件導向程式設計並嘗試理解設計模式,但總感覺和實務運用還是有種距離感。
在一個近期的專案中,我有機會實做了一個簡單的系統,負責提供 API 處理前端呼叫時傳來的使用者操作,並透過 SDK 向雲端服務資源提出相對應的請求,背後使用一個關聯性資料庫來管理任務及資料,過程中很直接的感受到多組成的系統在互動時程式中自然產生的複雜性和耦合。在完成功能需求的迭代過程中,雖然有將程式組織的更清楚,進行分層、分模組並使用了一些類別封裝,自覺有改善了後續維護和開發的難度,但也體會到缺乏一種更有系統的方法。
因緣際會找到 Eric Evans 的經典「領域驅動設計:軟體核心複雜度的解決方法」,也許是時機剛好,閱讀了重點章節之後,有種把許多觀念串連起來的感覺。雖然領域驅動的實際執行並非易事(如同書中提醒,有成本、需要技術和領域及開發人員的共同配合,像是 POC 的情境大概會不適合),但一些設計背後的觀念,應能成為未來指引。推薦一讀。
(Right click -> Open Image in New Tab to view original-size image)
(Right click -> Open Image in New Tab to view original-size image)
文章原發表於 linkedin,後轉移至此