【问题标题】:Bidirectional communication between model objects in Objective CObjective C中模型对象之间的双向通信
【发布时间】:2013-03-09 18:39:47
【问题描述】:

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

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

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

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

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

协议委托系统在这种情况下是否更合适?

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

非常感谢,

Vazzyb

【问题讨论】:

  • 您可能希望模型之间有一个控制器来执行任何协调需要做的事情,可能包括将一些代码从模型移动到控制器。

标签: objective-c model-view-controller


【解决方案1】:

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


(来源:devlake.com

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-12
      • 2017-12-24
      • 2014-05-24
      • 1970-01-01
      相关资源
      最近更新 更多