13

だから私はどこでもの使用Subject<T>が「悪い」ことを読み続けています - そして私は推論にちょっと同意します.

ただし、使用を避けて例を示す最善の方法を考えようとしています。

Save()現在、プロパティを変更するとクラスを永続化する必要があるときに呼び出される保護されたメソッドを持つ、永続化された構成クラスの抽象クラスがあります。このメッセージは、シリアル化サービスがリッスンしてクラスをシリアル化するインターフェイスをSubject<T>介して公開される にメッセージを送り込みます。IObservable<T>これは、当時これを実装するための最も明白で単純かつ迅速な方法のように思われました。

では、サブジェクトを使用せずにこれを行う RX の方法は何でしょうか? 代わりにイベントを公開し、Observable.FromEventPattern()それをサブスクライブするために使用しますか? -これは、より複雑な方法のようです。

4

2 に答える 2

16

の使用が悪いというほどではありませんSubject<T>- 「モナドに入る」何らかの方法が必要です - それは「取得するIObservable<T>というアカデミックな方法です。どこかから始める必要があります。

Subject<T>既存のオブザーバブルを連鎖させるのではなく、サブスクリプションから使用すると、問題がさらに発生します。被験者は、Rx 機械の端に存在する必要があります。

提供されているエントリ ポイント ( FromEventFromEventPatternFromAsyncReturnなどToObservable()) がどれも機能しない場合は、使用Subject<T>は完全に有効です。また、上記のいずれかを簡単に使用できるようにするためだけに、余分な複雑さを追加する必要はありません。ほとんどの場合、サブジェクトまたはサブジェクトのような構造が隠れて使用されます。

あなたの場合は、問題ないように聞こえますSubject<T>AsObservable()実装の詳細を隠すために、それを公開する方法を検討する必要があるかもしれません。

于 2014-02-17T08:58:21.063 に答える
2

オブザーバブルに入る簡単な方法は、アクションを使用することです

private Action<ObservableArgs> _action;

オブザーバブルを作成する

public IObservable<ObservableArgs> GetObservable()
{
    return Observable.FromEvent<ObservableArgs>>(
                ev => _action += ev, 
                ev => _action -= ev);
}

次に、使用してオブザーバブルに追加します

public void OnNext(ObservableArgs args)
{
    _action?.Invoke(args);
}
于 2018-06-22T08:09:16.320 に答える