我有一个关于编程概念的问题,而不是与某些特定代码相关的特定问题。
我有两个模型对象,一个与核心数据有关,另一个与Twitter有关。
他们需要互相交流。 Twitter对象可能需要来自数据库的一些推文,而Core Data对象可能想要将一些推文写入数据库。
我可以在每个类上编写公共方法,并让每个类调用这些方法。
然而,我觉得这是一个非常紧密的耦合,我想在对象之间进行一些其他的通信方法。
在这种情况下,协议代理系统会更合适吗?
例如,Twitter类声明TwitterDataSource协议,Core Data类充当该协议的委托。而反之亦然。
非常感谢,
Vazzyb
答案 0 :(得分:2)
你是对的,那种耦合会很紧张。如果您想放松耦合,请考虑使用Mediator design pattern。当事情发生变化时,您只需要更改介体处理两个对象之间的通信的方式,而不是两个单独的对象本身。
UML mediator design pattern http://www.devlake.com/design-patterns/mediator/mediator.PNG
答案 1 :(得分:1)
他们需要互相交流。 Twitter对象可能需要来自数据库的一些推文,而Core Data对象可能想要将一些推文写入数据库。
让我在那里阻止你。无论你是谁,这都是一个糟糕的设计模式。你的权力分离,而不是让你的生活更轻松,在你的项目中造成了分歧,你现在必须通过使每个对象相互引用来弥补。无论如何,这些对象的两个活动都属于控制器的概念。第一个可以重构为异步操作,特别是如果它需要通知数据库控制器它已完成。编写一个写入数据库的NSOperation子类(当然是串行编写),而不是考虑委托,并使数据库控制器调解操作的结果,以及从写入其中的另一个对象进来的推文。数据库。没有更多的相互引用(这是不双向性),没有更多的双控制器对象,没有更多的麻烦。