[英]Observer/Notification vs Delegate
假设我有以下应用:
在此应用程序中,我有一个带有两个按钮的菜单,一个按钮将我带到“帖子”屏幕,另一个按钮将我带到“喜欢的帖子”屏幕。
实际的帖子在两个视图中的渲染方式完全相同,不同之处在于,其中一个帖子中的所有帖子都将选择“赞”按钮(“喜欢的帖子”屏幕),而另一个帖子中的某些帖子将未选中“赞”按钮(帖子)屏幕)。
例如,如果我在帖子屏幕中,并且单击某个帖子的“赞”按钮,则PostView将向PostController报告其“赞”按钮已被单击,PostController将使用Server类更改该帖子的“赞”状态post,然后PostController将更新PostView的like按钮,使其处于选中状态或未选中状态(与之前的状态相反)。
现在,如果我单击“喜欢”按钮以在“帖子”屏幕中更改“喜欢”状态,则应该在“帖子”屏幕和“喜欢的帖子”屏幕这两个地方都更新“喜欢”按钮视图。 我可以想到两种方法:
1)PostController报告(通过委托)到PostsController的状态已更改,PostsController报告(通过委托)到MenuController的状态,MenuController告诉LikedPostsController一些帖子的like状态已更改,LikedPostsController告诉其PostController告诉其状态PostView以更新“喜欢”按钮(如果已更改为选中)或从LikedPostsController的视图中删除帖子(如果已更改为未选中)。
2)使所有PostControllers成为服务器的观察者,然后服务器可以在每次帖子的赞状态更改时发送通知。
哪一个更好,为什么?
谢谢。
如果服务器同时包含两个列表:帖子,喜欢的帖子,则让服务器通知感兴趣的观察者会更有意义。 在基本级别上,喜欢/取消链接的帖子应像帖子列表刷新一样进行处理。 这简化了应用程序的设计,因为对两个列表中的任何一个感兴趣的组件都可以订阅该列表(观察它),并且还提供了组件之间的解耦。 尽管我必须说我不太喜欢调用此组件Sever,但是作为服务器组件,它只应发出服务器API请求。
另一种方法迫使您添加和维护多个委派级别,还耦合了组件,因为根控制器将需要知道需要询问多少个控制器来进行更新。 而且,如果另一个列表起作用(例如,带有书签的帖子),您将需要相应地更新控制器,这可能很乏味且容易出错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.