Учитывая преимущества композитных событий, предложенные Reactive Extensions (Rx) framework, мне интересно, перестают ли мои классы останавливаться. NET, а вместо этого выставляют наблюдаемые значения Rx.
Например, возьмите следующий класс, используя стандартные события .NET:
public class Foo
{
private int progress;
public event EventHandler ProgressChanged;
public int Progress
{
get { return this.progress; }
set
{
if (this.progress != value)
{
this.progress = value;
// Raise the event while checking for no subscribers and preventing unsubscription race condition.
var progressChanged = this.ProgressChanged;
if (progressChanged != null)
{
progressChanged(this, new EventArgs());
}
}
}
}
}
Много монотонной сантехники.
Этот класс вместо этого может использовать какой-то наблюдаемый вариант для замены этой функции:
public class Foo
{
public Foo()
{
this.Progress = some new observable;
}
public IObservable<int> Progress { get; private set; }
}
Гораздо меньше сантехники. Намерение больше не скрывается деталями сантехники. Это кажется полезным.
Мои вопросы для вас прекрасные люди StackOverflow:
- Было бы хорошо/стоит заменить стандартные .NET-события на IObservable <T> значения?
- Если бы я использовал наблюдаемый, какой бы я использовал здесь? Очевидно, мне нужно нажать на него значения (например, Progress.UpdateValue(...) или что-то еще).