我经常遇到在多到多关系中选择交互模式的问题。下面的示例演示了实现同一目标的四种不同方法。
目标是从一组实体(DeliveryCompany、College、Supermarket)向另一组实体(LazyBob、CleverAnn、FastJon)传递信息(广告)。显然,我们需要一个中介(AdBoard),它将帮助出版商将他们的广告传递给合适的人和订阅者通知他们有趣的建议。
对广告的回应是出于现在的担忧,但如果它重要,我们可以假设,它将是必要的在未来。无论如何,这个回复必须有一条不同的路径(我们不会用另一个广告来回应广告,对吗?)
First:
所有订阅者都必须实现描述它们之间差异的接口。中介器被注入它们并实现一个接口,以满足发布者的目的。

第二版:
反向版本的第一。现在,发布者实现了一个描述他们的首选项的接口。它是由中介者使用的,它实现一个接口以满足订阅者的目的。

第三版:
中介实现了两个接口:发送目标广告(后端)和接收有趣主题的广告(前端)。后端注入所有出版商,前端注入所有订阅者。

第四:
第三版的反向版本。现在,中介被注入了许多实现其接口的发布者和订阅者。

问题
这些变体是否以同样的成功达到了目标?
在发展的早期阶段,我们可以毫无怀疑地选择其中的每一个,对吗?如果不是,选择的算法是什么?
发布于 2014-02-27 13:22:08
考虑到您希望最小化耦合,理想情况下,公司和JobSeekers只需要使用到AdBoard的接口,但它们不需要任何结构更改。
但是,如果JobSeeker能够订阅(并且现在对其建模是必要的),那么您需要IAdSubscriberInterface,而AdBoard需要聚合订阅者。
如果JobSeekers只是在有时间的时候查看AdBoard,那么AdBoard就不需要了解JobSeekers。
除非存在某种业务关系,否则AdBoard可能也不需要了解任何关于AdPublishers的信息。
图片中缺少的是广告。AdBoard聚合广告。广告可能需要一些关于AdPublisher的信息。它可以与AdPublisher保持联系。或者,如果您想进一步最小化耦合,所需的信息,如公司名称,只是复制到广告创建时,就像它也是用纸为基础的广告。
https://stackoverflow.com/questions/22066670
复制相似问题