March 10 15:18~16:31
▲圖1:Customer/Supplier(客戶與供應商)關係圖
上下游相依性
相依性,或稱為依賴、耦合,無論是在做人做事,或是在軟體開發上,都是一種讓人又愛又恨的特性。
父母對妳的男朋友不滿意,嫌他太窮、薪水太低,因此反對妳的婚事。妳不敢違背父母,也不想分手,因此一直處在進退兩難之間,終生大事的時程(schedule)因此被延誤了。身為專案經理的妳,卻是一點辦法都沒有。
你的部門需要客服部門提供API讓你們查詢並分析客訴情況與進貨廠商之間的關係,但是客服部門覺得這不是他們的工作,而且他們太忙根本沒有時間可以幫你們開發這個API。這件工作一直卡住,從老闆的眼中看來,工作交派給你的部門但卻一直沒有完成,你的部門因此黑掉,黑到發亮。
以上例子如圖1所示,女兒和父母之間的關係,你的部門和客服部門之間的關係,稱為Customer/Supplier(客戶與供應商),父母、客服部門是供應商,是價值鏈的上游(upstream),女兒、你的部門是客戶,是價值鏈的下游(downstream)。
***
解決方案
當兩個個體或組織屬於Customer/Supplier關係,而Supplier佔有絕對主導權或是完全不想鳥你的時候,身處於下游的Customer做起事來就會很辛苦。為了獲得父母的支援,妳可能選擇遵從他們的想法(Conformist):「好吧,既然父母不喜歡這個男朋友,我就再找一個合他們意的對象」,不然就擺爛裝傻雙方僵在哪邊。
除了完全服從之外,你還可以選擇切斷對上游的依賴。反正結婚後不想拿家裡的好處,就走自己的路(Separate Way)吧。
但如果你父母是好野人,完全切斷來自他們的幫助有時並不是明智之舉,因為妳可能會損失少奮鬥10年的機會。但妳又不想委屈自己放棄目前交往的對象,此時可以考慮找一個中間人,吸收父母之間對於妳男朋友不滿的負能量,在婚後一方面應付父母,另一方面保持自己家庭和樂。這個防止毀壞層(Anticorruption Layer)可以由妳自己當任,或是找父母信任的第三人,例如家族中的開明長輩或自己的哥哥、姊姊。
以上三種解法:Conformist、Separate Way、Anticorruption Layer,就是在《Domain-Driven Design》書中提到的三種不同的Bounded Context之間的關係。
除了上述這三種關係,還有第四種選擇可以避免下游被上游綁架,就是套用Dependency Inverse Principle(相依反轉原則),如圖2所示。
▲圖2:套用相依反轉原則改變上下游的相依性
你不用無止境地等待客服部門提供API,反之,幫你所需要使用的服務定義一個介面,然後便可以依據此介面開始開發程式。等程式寫好,你便可以跟老闆回報進度。
你:報告老闆,您要的功能我們開發好了。
老闆:我看看……嗯,沒錯,這就是我要的功能。什麼時候可以上線使用?
你:我們的部分已經沒問題了,但是客服部門還沒有完成他們的開放資料API,實際上線時間要問客服部門。
老闆:客服部門的人在嗎?!
透過相依反轉原則,你成功把球丟給客服部門,進度就不是卡在你們這邊了。
***
友藏內心獨白:等來等去等成仇。
沒有留言:
張貼留言