Objective C中模型对象之间的双向通信

时间:2013-03-09 18:39:47

标签: objective-c model-view-controller

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

我有两个模型对象,一个与核心数据有关,另一个与Twitter有关。

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

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

然而,我觉得这是一个非常紧密的耦合,我想在对象之间进行一些其他的通信方法。

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

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

非常感谢,

Vazzyb

2 个答案:

答案 0 :(得分:2)

你是对的,那种耦合会很紧张。如果您想放松耦合,请考虑使用Mediator design pattern。当事情发生变化时,您只需要更改介体处理两个对象之间的通信的方式,而不是两个单独的对象本身。

UML mediator design pattern http://www.devlake.com/design-patterns/mediator/mediator.PNG mediator info flow

答案 1 :(得分:1)

  

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

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