2010-10-22 62 views
1

我有一个值,我希望用户能够订阅并推送到,所以在我的课程内部我使用主题<T>。我应该公开ISubject <T>或IObservable <T>和IObserver <T>?

当露出这个值作为属性我会尽力公开为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,对命名约定的任何想法也是受欢迎的。

回答

1

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

如果没有,你应该揭露SetIsLightOn方法写入主题,揭露IsLightOnValues作为IObservable<bool>

相关问题