我经常遇到在多对多关系中选择交互模式的问题。以下示例演示了实现相同目标的四种不同方法。
目标是从一组实体(DeliveryCompany
,College
,Supermarket
)向另一组(LazyBob
,{{1}传递消息(广告) },CleverAnn
)。显然,我们需要一个调解员(FastJon
),这将有助于两个发布商向适当的人和订阅者发布广告,并通知他们有趣的提案。
现在不再关注广告,但如果重要,我们可以假设将来有必要。无论如何,这个回复必须有不同的路径(我们没有回复其他广告的广告,对吗?)
首先
所有订阅者必须实现描述其差异的界面。 Mediator随之注入,并为出版商的目的实施界面。
第二
第一个反向版本。现在,发布商实现了描述其偏好的界面。它由调解器使用,为用户的目的实现接口。
第三
Mediator实现了两个界面:用于发送目标广告(后端)和接收有趣主题(前端)的广告。后端注入所有发布者,前端注入所有订阅者。
第四:
第三版的反向版本。现在调解员注入了许多实现其接口的发布者和订阅者。
问题:
这些变种是否成功达到了目标?
在开发的早期阶段,每一个都可以毫无疑问地选择,对与否?如果没有,选择的算法是什么?
答案 0 :(得分:1)
鉴于您希望最小化耦合,理想情况下,公司和JobSeekers只使用AdBoard
的接口,但它们不需要任何结构更改。
但是,如果求职者必须订阅(并且现在必须对此进行建模),那么您需要IAdSubscriberInterface
,而AdBoard
需要聚合订阅者。
如果JobSeekers只是在AdBoard
有空的时候看AdBoard
,AdBoard
需要对JobSeekers一无所知。
除非存在某种业务关系,否则AdBoard
可能也不需要了解有关AdPublishers的任何信息。
图片中缺少的是广告。 {{1}}汇总了广告。广告可能需要一些有关AdPublisher的信息。它可以与AdPublisher保持关联。 或者,如果您想进一步减少耦合,公司名称等所需信息只会在创建时复制到广告中,就像纸质广告一样。