【问题标题】:Should I expose ISubject<T> or IObservable<T> and IObserver<T>?我应该公开 ISubject<T> 还是 IObservable<T> 和 IObserver<T>?
【发布时间】:2010-12-03 17:15:52
【问题描述】:

我有一个值,我希望用户能够订阅和推送,所以在我的班级内部我使用 Subject

当将此值作为属性公开时,我最好将其公开为 ISubject 还是将 ISubject 拆分为 IObserver 和 IObservable 更好?

选项 1:

    private readonly ISubject<bool> isLightOn = new Subject<bool>();

    public ISubject<bool> IsLightOn
    {
        get
        {
            return this.isLightOn;
        }
    }

选项 2:

    private readonly ISubject<bool> isLightOn = new Subject<bool>();

    public IObservable<bool> IsLightOnOut
    {
        get
        {
            return this.isLightOn.AsObservable();
        }
    }

    public IObserver<bool> IsLightOnIn
    {
        get
        {
            return this.isLightOn.AsObserver();
        }
    }

哪个更好,为什么?如果是选项 2,也欢迎对命名约定提出任何想法。

【问题讨论】:

    标签: c#-4.0 system.reactive


    【解决方案1】:

    分离这两个属性给你更多的灵活性('set' 可以写到不同的主题),但更大的问题是:你希望这个类的消费者调用OnCompletedOnError

    如果不是,您应该公开一个写入主题的SetIsLightOn 方法并将IsLightOnValues 公开为IObservable&lt;bool&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多