3

我有一个关于编程概念的问题,而不是与某些特定代码相关的具体问题。

我有两个模型对象,一个与 Core Data 相关,一个与 Twitter 相关。

他们需要相互交流。Twitter 对象可能想要一些来自数据库的推文,而 Core Data 对象可能想要将一些推文写入数据库。

我可以在每个类上编写公共方法并让每个类调用这些方法。

但是,我觉得这是一个相当紧密的耦合,我想要一些其他的对象之间的通信方法。

在这种情况下,协议委托系统会更合适吗?

例如,Twitter 类声明一个 TwitterDataSource 协议,Core Data 类充当该协议的委托。反之亦然。

非常感谢,

瓦兹布

4

2 回答 2

2

你是对的,耦合会很紧。如果您想放松耦合,请考虑使用Mediator 设计模式。随着事情的变化,您只需要更改调解器处理两个对象之间的通信的方式,而不是更改两个单独的对象本身。

UML 中介设计模式
(来源:devlake.com

中介信息流

于 2013-03-09T18:48:07.253 回答
1

他们需要相互交流。Twitter 对象可能想要一些来自数据库的推文,而 Core Data 对象可能想要将一些推文写入数据库。

让我在那儿阻止你。无论你是谁,这都是一种糟糕的设计模式。您的权力分离并没有让您的生活更轻松,而是在您的项目中造成了一个鸿沟,您现在必须通过让每个对象相互引用来弥补这一鸿沟。无论如何,这些对象的两个活动都属于控制器的概念。第一个可以重构为异步操作,尤其是当它需要通知数据库控制器它已完成时。与其考虑委托,不如编写一个写入数据库的 NSOperation 子类(当然是串行的),并让数据库控制器调解操作的结果,以及来自另一个对象的推文,这些推文被写入数据库。不再有相互引用(这是不是双向性),没有更多的双控制器对象,没有更多的麻烦。

于 2013-03-09T19:25:26.143 回答