DDD歐洲會議紀要 - 第一天 — Matthias Noback
Eric Evans:主題演講(“上下文中的語言”):
從基礎知識開始(單詞在上下文中有意義;當我們明確指出這個上下文的邊界時,我們最終得到一個有界的上下文),Eric討論了兩個主要的主題:大泥球,以及微服務上下文中有界的上下文。
遺留應用程式總是以負面的方式構建,好像標記上遺產後就可以擺脫了,但我個人非常喜歡這些遺產,始終存在解決遺留程式碼的衝動。Bubble Context (PDF) 可以在現有模型旁邊建立行之有效的新模式。要在新模型和舊模型之間保持安全緩衝區,您可以構建反腐敗層(ACL)。Eric提到的一個有趣的事情是緩衝區在兩個方向上工作。ACL還允許舊模型保持執行,而不會受到Bubble Context中正在發生的所有新事物的干擾。
鑑於有界上下文可能與或不與實際的子域對齊,很可能遺留上下文實際上是個大泥球,具有統一模型,並且只是在許多義大利式麵條線之間編織入了大量的領域知識。然而,即使它是一團糟,並且每天使用它變得越來越困難,它仍然可以稱為“成熟的生產環境”。問題是:它是否仍然符合業務觀點?如果是這樣,我們可以通過執行本地重構來提高可維護性和變更成本。如果不是,那麼改變任何東西都會非常困難。如果模型的基本假設發生變化,返工將非常昂貴。
事實上,對於我目前正在進行的專案,我們正在研究一個模組(或上下文)是否需要一些重構,因為技術上已經很難使用它了,然而,該公司仍對現狀非常滿意,並且它對其流程至關重要。
可以在遺留程式碼區域中使用的一種重要的領域驅動方法是分析不同的子域,並找出哪些是通用的,哪些是業務的“核心”。例如,在上述專案中,實際上有兩個候選者用於上下文級別的改進。一個與Sales(這是此財務應用程式的核心)有關,一個與Addressbook記錄相關(它非常支援Sales部分)。人們可以說它甚至是通用的,因為現成的解決方案可能更可取。我們也不想在那裡花費大量的設計或開發工作。
Eric提到術語“古雅上下文Quaint Context”作為人們認為“遺留”的上下文的合適名稱。它可能使用過時的技術,並且變得難以維護。不可能在那裡做出重大改變(如上所述,因為這些基本假設不容易改變),所以另一個好名字可能是“Patch-by-Patch Context”。
使用微服務架構,處理遺留環境的另一種選擇成為Eric稱之為“暴露的遺留資產”(又一個不錯的術語!)。這將是一個遺留應用程式,它通過生成對該環境中的實際微服務有用的訊息,開始適應微服務環境。例如,資料庫觸發器可用於生成事件。外部事件本身不必像導致它們的內部事件那樣低階。
Eric談到微服務架構的其他幾個有趣的方面,但我想在這裡簡要提一些其他相關的想法。Eric回顧了15年的領域驅動設計,並提出到現在我們可能需要定義DDD本身。他不希望DDD只是一個俱樂部,但要求知識分子的誠實。如果您嘗試應用DDD並以某種方式失敗,您應該分享這個故事。如果你對DDD的某些方面持懷疑態度,請談談它。我喜歡它歸結為如何專注於核心領域,共同探索模型,以及在明確有界的上下文下講無處不在的語言。太好了!
Rebecca Wirfs-Brock:開發您的設計啟發式工具包:
這是一個訪問受限的研討會,所以我很幸運能參加。Rebecca 曾在會議的前一版中談過啟發式,這引發了我對這個想法的興趣。研討會是關於它背後的過程。它有一些有趣的指標,比如關於概念 的PDF 和Billy Vaughn Koen的一本書:方法的討論。絕對要檢查的東西!
Rebecca 將“啟發式”定義為一種實用的方法,一種經驗法則。當您發現在某種情況下最有效的方法時,啟發式演算法是您隨時間收集的內容。它們可能暗示如何解決設計問題,或者如何找出下一步該做什麼,或者如何與某些事物聯絡起來。
軟體開發中的一個困難情況的例子是當你遇到“臭”程式碼時。出了點問題。它需要修復,但是:你現在這樣做嗎?決不?只在某些情況下?有人可能會說:如果你發現問題,請修復它。另一個人會說:如果沒有破壞,請不要修理它。或許:永遠不要修復它。不要碰任何東西,因為它可能會破裂。
在這個問題上我們都有一些直觀的方法,我發現它非常有趣:
- 這種方法隨著時間而變化。
- 很多人會有很多不同的方法。
Rebecca 建議保留一份期刊,描述和反思你如何實際解決設計問題。我們根據一些固定的食譜練習收集啟發式方法。這是一個例子:
問題:每當遇到程式碼有味道時,我應該修復程式碼味道嗎?
啟發式:只有在您處理程式碼時才能修復它們。
示例:如果您只是閱讀程式碼,請不要改進它。如果您因為請求了新功能而潛入並進行更改,或者必須修復錯誤,請新增測試並修復壞味。
您可以根據自己的工作收集這些內容,在與想要學習的其他人交談時,您可以開始收集更多內容。當發現其他人使用哪種啟發式方法時,有助於挑戰他們。提出問題,找出異常,應該考慮的許多其他微妙的事情,等等。