發表文章

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

學習 Event Storming 事件風暴的感想

圖片
學習 Event Storming 的一點感想 前言 近幾年,工作坊非常流行,也順便分享我的感想。 先說明,Event Storming 的初始概念非常棒,小編也從不排斥各種軟體開發的方法論與流程,但在接觸了 Event Storming 後,對於軟體開發的初心者來說,當中可能有兩個小陷阱。 Event Storming 最近一直在看 Event Storming ,也曾聽聞有人說用事件風暴來取代 UML Methodology,但 UML 充其量只是個 Methodology,你又不是導入 RUP,所以我特別強調這個 XDD,那麼..言歸正傳、的確,事實上我是同意一項軟體產品所需要的領域知識往往是跨團隊的,沒有任何單一團隊可以掌握它的全貌,但要如何媒合不同背景知識的人做有效溝通非常的困難,所以即便是求討論會議除了需要各利害關係人參與之外、客戶能加入討論更能釐清許多需求認知的問題、避免走過多冤枉路,UML 各個圖形的繪製也必須是團隊一同繪製、而不是單一個 Member 來繪製,因為對於商業流程的理解、包含名詞的使用、團隊有共識需使用客戶端的專有名詞與語言。 看完 Event Storming 我倒認為重點不在於 Event Storming,透過 Event Storming 確實很容易找出商業流程的核心價值、風險、與機會,但注意了,我覺得這裡有一個小陷阱就是,重點是在於〔團隊 與 多方角色 所進行討論的『這一個過程』中,便利貼只是風暴過程中的工具而已〕。 我們進行需求討論的的『多方討論』即是邀請任何有興趣的人、也不用限制討論範圍,但這裡還有第二個陷阱,在討論特定功能流程 Process Modeling 時,當你有了 Command、Event、Actor、System、Policy 或 Read Model... 等,準備進行 Software Design 軟體設計時,這裡我非常推崇 Aggregate 與 Bounded Context 等概念,因為這算是 OOA(Object Oriented Analysis) / OOD(Object Oriented Design) 的缺陷部分(OOAD 不是沒有缺陷、近期學習 DDD 時我發現可以補足 OOAD 不足之處),但我要講的第二個小陷阱是,當你在進行 Software Design 時,仍...

DDD 領域驅動設計文章導讀

圖片
DDD 領域驅動設計文章導讀 pictrue from:https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E5%BB%BA%E6%A8%A1%E8%AF%AD%E8%A8%80 前言 其實我接觸 DDD 的時間並不長,我進行專案工作的時間幾乎 20 個年頭的我,接觸與真的實務應用 DDD 也不過是 2019 年底左右,當時 Containers & Microservices 正盛起,連帶的讓 DDD 的開發方法論在台灣萌芽(雖然 DDD 與微服務沒什麼直接關係、許多是商業炒作)包括微軟在推的 Docker 與 運行在 Cloud/Azure 的 AKS(Azure Kubernetes)等等,都有許多官方 Docs 文件說明著如何運用 DDD 的設計導向微軟的微服務模型、或是『使用 .NET 設計與實作微服務模型』等等,不過當然,這還是沒什麼直接的關係XD 只不過,你要弄清楚的是,DDD 不是萬靈丹能夠解決你將現有系統無痛的上 Cloud 的 Microservices 環境,而是,透過 DDD 的 Bounded Context/Context Map 概念,可以幫助你切割現有單體式系統中服務的商業體系、像是如何切割 Context、各 Context 之間如何(通信 / 溝通) 等等。 以下,我將先前所有撰寫過的 DDD 相關的文章,依照學習上的順序,為讀者們做個導讀。 學習 DDD 其實有些門檻,以下我列幾種情境供各位參考:  一、寫程式 1-2 年、物件導向基礎還在學習者  二、寫程式超過 5 年、物件導向已熟悉(包括:SOLID, GoF Design Patterns)  三、[延伸第二點]也接觸過 OOA/OOD 並有過專案開發經歷過完整分析設計流程 + 抽象化能力(若有接觸過分析階段的 UML 更加分) 四、已經熟悉 OOA/OOD 與 OOP 也具備上述三點條件,並實作過 Clean Architecture 為什麼第三點我要特別提到『若有接觸過分析階段的 UML 更加分』呢? (1)分析階段的 UML 是什麼?(2)以及為什麼一定要使用 UML? 我先回答第二個問題,UML 只是眾多分析階段圖形的一種,像是 BPMN, SysML 也都是業界的商業...

#讀書趣(1):Patterns of Enterprise Application Architecture

圖片
  今天重看這本電子書:【Patterns of Enterprise Application Architecture】 我分享一下我以我現在的觀點重讀過這本書的觀點,因為上一次讀這本書已經 10 多年前,當時對於許多實作內容其實懵懵懂懂也都只是在專案上使用,由於當時專案非常忙碌(幾乎每日加班到晚上12點趕最後一班捷運 XD) 對於書上提及的 Patterns 也沒太多時間去深入探討與理解。 今天,我就以我現在的經歷、對軟體開發技術的認知 + 實作經驗 來重讀 與 介紹本書籍。 我一個一個章節來為大家分享讀書心得: Chapter 1 Layering 對於『分層』定義不熟悉的朋友,建議熟讀這章節。 Chapter 2: Organizing Domain Logic 前面幾章就屬這章節最有意思,文中提到隨著商業邏輯的越來越複雜,不管你使用哪一種軟體架構當你要添加功能其實就越來越困難,因為很難有一種能夠衡量領域複雜性的方法存在(很有意思、這到目前也都還是如此)不過在我最近讀了 DDD 相關書籍後這部分有所改觀了! Chapter 3 Mapping to Relational Database 這個章節說明一般應用程式存取關聯式資料庫常用的策略,如果您是剛入門不久的 Developer 真的建議好好讀這篇。 這裡提到早期的大型主機後來不盛行被SQL取代的原因,開發人員不夠了解SQL查詢與底層效能索引調教之間關係,導致後續許多問題的發生。接著,就是一些實務上操作 SQL 一些策略,像是一個特定領域 Domain 就與該特定領域 Table 互動、另一種,是 Customer 應該隔著一層 Mapper 才操作 SQL、而不是直接操作,Customer 應該只負責特定領域,不該了解太多 create/load/save 的細節。接著,就是我很熟悉的 O/R Mapping 其實、這章節對我來說並沒有學到新東西、因為我現在實作遠超過這些。 Chapter 4: Web Presentation 在現在 Web 蓬勃發展的現代來說,這個章我就真的沒學到什麼東西,書中使用的 技術 有些老舊了,對基本 Web 不熟悉者可以參考看看。 Chapter 5: Concurrency (by Martin Fowler and David Rice) 本章節也建議開發者一定...