私はリアクティブの世界に頭を入れようとしていますが、ベストプラクティスに関してはまだ理解が不十分です。ReactiveCocoa は、MVC の VC 側で最も多く使用されているようです。モデル内で使用する方法を探していました。
現在の私の考えは、モデル オブジェクトに ' saveRequests 'と呼ばれるRACSubjectプロパティを設定することです。モデル オブジェクトで何かが変更されると、そのsaveRequestsプロパティで ' sendNext :' が呼び出されます... 基本的に自分自身をダーティとしてマークします。
AppDelegateでは、親モデル オブジェクトのsaveRequestsシグナルをサブスクライブし、次のシグナルでディスクに保存します (ディスク操作の過負荷を避けるために 2 秒ごとにバッファリングします)。これは機能しているように見えますが、saveRequest シグナルをカスケードすることでさらに進めたいと考えました。
他のモデル オブジェクトの配列を所有するモデル オブジェクトがあります。これらのオブジェクトの 1 つが saveRequest シグナルをトリガーすると、親オブジェクトがその saveRequest シグナルをトリガーするようにします。子オブジェクトが追加されたときに親が各子オブジェクトをサブスクライブすることで、これが機能します。
ただし、子モデルオブジェクトが親から削除された場合、親が子からのそれ以上のsaveRequestsからサブスクライブを解除するようにします-子オブジェクトが割り当て解除された場合にのみ自動的にサブスクライブが解除されることを理解しています(子供は何か他のものにつかまっている)。
それで、いくつか質問があります:
- モデルが自分自身をダーティーとしてマークし、持続性をトリガーする方法として、これは賢明なアイデアでしょうか?
- RACSubjectを使用するのはおそらく最適ではないことを読みましたが、代わりにRACSignalを使用する必要がありますか? また、その理由は?
- 各子オブジェクトからサブスクライブを解除するには、 RACDisposableを使用する必要がありますよね? シグナルをサブスクライブするときに返されるものを使用する唯一の方法ですか?その場合、親オブジェクトでそれを保持する必要がありますか?
- saveRequest シグナルのカスケードに関しては、ここで四角い車輪を再発明しているのでしょうか? RAC API を使用するには多くの方法があるようです。私のニーズを満たすより良いソリューションはありますか?
前もって感謝します - この Reactive は魅力的ですが、考え方を変える必要があり、ベスト プラクティスに従わないと悪用される可能性が非常に高いようです。
ローリー