Должен ли я выставить ISubject <T>или IObservable <T>и IObserver <T>? - PullRequest
1 голос
/ 22 октября 2010

У меня есть значение, на которое я хочу, чтобы пользователи могли подписываться и на него давить, поэтому внутренне в своем классе я использую тему .

Когда я выставляю это значение как свойство, ялучше всего выставить его как ISubject или лучше разделить ISubject на IObserver и IObservable ?

Option 1:

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

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

Option2:

    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 Ответ

1 голос
/ 03 декабря 2010

Разделение двух свойств дает вам большую гибкость («set» может писать в другую тему), но главный вопрос: ожидаете ли вы, что потребители этого класса будут вызывать OnCompleted или OnError?

Если нет, вы должны выставить метод SetIsLightOn, который пишет субъекту, и выставить IsLightOnValues как IObservable<bool>

...