2014-02-27 37 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