我应该公开ISubject <t>或IObservable <t>和IObserver <t>?</t> </t> </t>

时间:2010-10-22 14:59:33

标签: c#-4.0 system.reactive

我有一个值,我希望用户能够订阅并推送到,所以在我的课程内部,我正在使用Subject&lt; T&gt;。

当将该值作为属性公开时,我最好将其作为ISubject&lt; T&gt;曝光。或者分割ISubject&lt; T&gt;是否更好?进入IObserver&lt; T&gt;和IObservable&lt; T&gt;?

选项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,对命名约定的任何想法也欢迎。

1 个答案:

答案 0 :(得分:1)

分离这两个属性可以提供更大的灵活性('set'可以写入不同的主题),但更大的问题是:您是否希望此类的消费者致电OnCompletedOnError

如果没有,您应该公开一个写入主题的SetIsLightOn方法,并将IsLightOnValues公开为IObservable<bool>