我有一个值,我希望用户能够订阅并推送到,所以在我的课程内部,我正在使用Subject< T>。
当将该值作为属性公开时,我最好将其作为ISubject< T>曝光。或者分割ISubject< T>是否更好?进入IObserver< T>和IObservable< T>?
选项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,对命名约定的任何想法也欢迎。
答案 0 :(得分:1)
分离这两个属性可以提供更大的灵活性('set'可以写入不同的主题),但更大的问题是:您是否希望此类的消费者致电OnCompleted
或OnError
?
如果没有,您应该公开一个写入主题的SetIsLightOn
方法,并将IsLightOnValues
公开为IObservable<bool>