2014-02-27 36 views
2

我經常遇到在多對多關係中選擇交互模式的問題。以下示例演示了實現相同目標的四種不同方式。四種類型的介體

的目標是從一個組實體(DeliveryCompanyCollegeSupermarket)傳遞消息(廣告)到另一個(LazyBobCleverAnnFastJon)。很明顯,我們需要一個調解員(AdBoard),這將有助於發佈商將他們的廣告發送給適當的人員和訂閱者,並通知他們有關提議。

對廣告的迴應目前沒有顧慮,但如果它很重要,我們可以認爲它將來有必要。無論如何,這響應必須有一個不同的路徑(我們不迴應廣告與其他廣告吧?)

第一:

所有的用戶都必須實現描述他們之間的分歧的接口。調解員與他們一起注入併爲發佈者的目的實現一個接口。

Mediator-1

二:

第一的反向版本。現在發佈商實現了一個描述他們的偏好的界面它由調解器使用,爲用戶的目的實現一個接口。

Mediator-2

三:

中保實現兩個接口:用於發送有針對性的廣告(後端)和上有趣的話題(前端)接收廣告。後端注入所有發佈者,前端注入所有訂閱者。

Mediator-3

四:

的第三反向版本。現在中介注入了許多實現其接口的發佈者和訂閱者。

Mediator-4

問題

難道這些變種達成同樣的成功目標是什麼?

在發展的早期階段,每一個都可以毫無疑問地選擇,對不對?如果不是,選擇的算法是什麼?

+0

你能解釋它們的區別嗎?你不確定的是什麼決定? – Meier

+0

差異應該從圖表中清楚,但我會在一分鐘內添加一些解釋。我不確定選擇哪一個。我應該兩次擲硬幣嗎?你會怎麼做? – astef

回答

1

鑑於您希望最小化耦合,理想情況下,公司和JobSeekers只使用AdBoard的接口,但它們不需要任何結構更改。

但是,如果JobSeeker可以訂閱(並且現在對此進行建模至關重要),那麼您需要IAdSubscriberInterfaceAdBoard需要聚合訂閱者。

如果JobSeekers只是在看他們有時間的AdBoard,則AdBoard需要對JobSeekers一無所知。

除非有某種商業關係,否則AdBoard也可能不需要知道有關AdPublishers的任何信息。

圖片中缺少的是廣告。 AdBoard彙總了廣告。廣告可能需要有關AdPublisher的一些信息。它可以與AdPublisher保持關聯。 或者,如果您想進一步最小化耦合,則在創建時只需將公司名稱等所需信息複製到廣告中,就像使用基於紙張的廣告一樣。

+0

老實說,這裏太多我不同意/不明白。讓我們從頭開始。 「鑑於你想要最小化耦合,理想情況下公司和JobSeekers只是使用AdBoard的界面」 - 你的意思是第三個變體,不是嗎?但爲什麼它比其他人少呢? – astef

+0

它的耦合度較低,因爲公司無需爲了使用AdBoard而實現IAddPublisherInterface。 – Meier

+0

你的意思是實現接口比使用接口更難?但爲什麼?如果我們遵循ISP,那麼使用某個接口的類必須調用每個成員,並在某個時間「遍歷」實現者的所有不變量。與實現者一樣,必須實現所有成員並滿足所有不變量。 – astef