代理和数据源协议
代理协议是奇妙的。它们是实现MVC模式的简单的、熟悉的和灵活的方式,它们更会使你养成松耦合的好习惯并且教你明智的API设计。
这个是 MGTileMenu’s delegate protocol.
有太多经典的代理和数据源协议供我们用到几乎所有的组件中。如果你正在显示数据,这个准确的数据源协议可能更接近于:
- 我有多少事物?
- 事物X对应的属性Y的值是多少?
同样的,在几乎任何的情况中,这个准确代理协议可能采用下面的形式:
- 这个事物应该做那些嘛?
- 这个事物将要做那些。
- 这个事物刚好做了那些?
这也被称为Should, Will, Did协议模式,这也巧妙的连结了之后的Will-Did通知模式。
让我们来讨论一下你可能会觉得有争议的话题:我发现将代理协议合并到数据源协议中被完美的接受了(也就是说将他们整合到一个协议中)。我在MGTileMenu和几个其他的组件中这样做了。
我完全接受分离他们的原则,并且我能想到很多你想保持他们分离的例子。通常,苹果也是保持他们分离的。那好吧。
可是,就我的经验看,在大多数例子中合并他们是很好的。大多数人将数据源方法和代理方法放到同一个地方。我从来没有因为合并这些协议而抱怨过,我几乎不能记得一个存在分开的协议在不同的地方使用的情况。
如果你重视清晰,或者有将代理从数据源中分离出来的需求,那么很明显你应该那样做。我只是不认为如果你合并他们会觉得不好。
请发表评论