【问题标题】:How to implement observer pattern for a swift Dictionary如何为快速字典实现观察者模式
【发布时间】:2019-04-24 21:55:11
【问题描述】:

我有一个管理器类,它修改成员 Dictionary<Id, MyObject> 变量的状态。

是否可以交出对此Dictionary 的引用并为所有更改设置观察者?我想避免手动实现观察者模式,即手动注册监听器和触发通知的方法。

【问题讨论】:

  • 除了制作一个包装字典和 RxSwift PublishSubject(或其他可观察源)的包装对象之外,我没有看到任何其他方法,使转发方法具有信号更改所需的钩子对观察者。但我会提醒这一点,让这些东西爆炸,性能明智,真的很容易。你的用例是什么?
  • 我有一个管理模型的类(从网络,收集传感器数据等),我想在 IOS 应用程序的UITableView 中显示它。
  • 字典是干什么用的?这似乎是一个不必要的“中间人”。您可以使您的数据源(互联网 API、传感器等)可观察,并直接为您的 UI 订阅它们。似乎不需要(从我有限的上下文中)存储任何数据。
  • 我不熟悉 RxSwift 以及管理 obversable 有多么容易,但我认为正是由于源类型的多样性,直接在 UI 上管理源 / observable 将是一团糟。最重要的是,我有一个命令行工具,它使用相同的管理器类(没有 UI。)
  • 我还想稍后在本地和/或远程保存这个模型......所以我想把模型类(目前是字典)作为一个单元。

标签: swift observer-pattern


【解决方案1】:

我建议你改变你的方法的方向。你认为你有一个模型(例如字典),它是一个权威来源,它会就地更新,然后会通知订阅的观察者这个变化。

相反,我建议您翻转它:您有一组可观察对象(您的互联网 API、传感器等),它们是您的原始数据源。这些可以由您的“数据管理器类”订阅,其工作是验证和过滤数据。该对象本身就是一个可观察对象,它是模型的权威数据源。数据直接发送给订阅的观察者(没有中间人)。如果您需要持久化该数据,那么持久化系统只是可能的订阅者之一,还有多种可能的订阅者(GUI、CLI、集成测试等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2013-10-28
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    相关资源
    最近更新 更多