幽默:兩個沒有使用DDD的幽默

banq發表於2021-01-09

幽默1:多虧了微服務,我們的JOINS(SQL語句)現在可以跨HTTP了。
banq評:SQL的JOIN是跨表操作,這種跨表操作可能會將本是松耦合的兩個資料表耦合在一起,變成一個整體,相互綁架,無法各自獨立擴充套件。如果使用DDD有界上下文設計微服務,清晰劃分好微服務的邊界,微服務之間如果需要通訊,透過鬆耦合的訊息機制聯絡,而不是直接把SQl JOIN操作延申到微服務之間操作,透過HTTP實現微服務之間實現同步呼叫,完成類似跨表實現的功能。
這種方式其實還是資料庫思維的延續,或者說,當進入微服務世界,卻沒有引入DDD來管理資料操作,沒有引入DDD對微服務進行指導制約設計:

DDD>微服務>SQL JOINs

如果缺少DDD只是,則變成:

SQL JOINS>微服務

因為SQL和DDD都是解決業務問題不同的方式,而微服務只是一種技術架構,只是強調微小,而沒有說明如何變得微小,DDD的有界上下文是說明如何切分變得微小,如果你的認知中沒有DDD這種思維,那麼你又要實現微小的業務功能,那麼最終變成使用SQL JOINs透過HTTP整合多個微服務實現一個大的整體功能。
 
幽默2: 10年前,我們擁有一個難以管理的整體,其中包含資料庫和伺服器端渲染的Web前端。 現在,我們有了一個無法管理的NoSQL資料庫系統、複雜的JS前端以及微服務的死星。
banq評:引入微服務和NoSQL以後,系統從過於集中走向另外一個極端:過於瑣碎,這樣的系統一盤散沙,難以管理,微服務+NOSQL=切斷耦合,但是不是所有耦合都能切斷,代表事物天生自然的耦合就無法切分,比如窗戶由玻璃和窗框組成,這·三者耦合是一種聚合,天然組成在一起才代表一個窗戶,否則分開就沒有窗戶這個事物存在了。
微服務和NoSQL只是指明方向,需要切斷耦合,但是沒有告訴我們如何保留聚合,放棄普通關聯關係,也就是高聚合低關聯,DDD的有界上下文和聚合體現了高聚合低關聯的設計原則,因此,微服務+NOSQL組合中如果沒有DDD,必然也會走向失敗。
 

相關文章