0

私はリアクティブの世界に頭を入れようとしていますが、ベストプラクティスに関してはまだ理解が不十分です。ReactiveCocoa は、MVC の VC 側で最も多く使用されているようです。モデル内で使用する方法を探していました。

現在の私の考えは、モデル オブジェクトに ' saveRequests 'と呼ばれるRACSubjectプロパティを設定することです。モデル オブジェクトで何かが変更されると、そのsaveRequestsプロパティで ' sendNext :' が呼び出されます... 基本的に自分自身をダーティとしてマークします。

AppDelegateでは、親モデル オブジェクトのsaveRequestsシグナルをサブスクライブし、次のシグナルでディスクに保存します (ディスク操作の過負荷を避けるために 2 秒ごとにバッファリングします)。これは機能しているように見えますが、saveRequest シグナルをカスケードすることでさらに進めたいと考えました。

他のモデル オブジェクトの配列を所有するモデル オブジェクトがあります。これらのオブジェクトの 1 つが saveRequest シグナルをトリガーすると、親オブジェクトがその saveRequest シグナルをトリガーするようにします。子オブジェクトが追加されたときに親が各子オブジェクトをサブスクライブすることで、これが機能します。

ただし、子モデルオブジェクトが親から削除された場合、親が子からのそれ以上のsaveRequestsからサブスクライブを解除するようにします-子オブジェクトが割り当て解除された場合にのみ自動的にサブスクライブが解除されることを理解しています(子供は何か他のものにつかまっている)。

それで、いくつか質問があります:

  • モデルが自分自身をダーティーとしてマークし、持続性をトリガーする方法として、これは賢明なアイデアでしょうか?
  • RACSubjectを使用するのはおそらく最適ではないことを読みましたが、代わりにRACSignalを使用する必要がありますか? また、その理由は?
  • 各子オブジェクトからサブスクライブを解除するには、 RACDisposableを使用する必要がありますよね? シグナルをサブスクライブするときに返されるものを使用する唯一の方法ですか?その場合、親オブジェクトでそれを保持する必要がありますか?
  • saveRequest シグナルのカスケードに関しては、ここで四角い車輪を再発明しているのでしょうか? RAC API を使用するには多くの方法があるようです。私のニーズを満たすより良いソリューションはありますか?

前もって感謝します - この Reactive は魅力的ですが、考え方を変える必要があり、ベスト プラクティスに従わないと悪用される可能性が非常に高いようです。

ローリー

4

1 に答える 1

2

MVC パラダイムでは、モデルはその変更についてリスナーに通知する責任があります。モデルの永続化は、通常、明確に定義された条件によってトリガーされる調整されたアクションです。変更のたびにモデルを永続化する必要がある場合は、それを行う必要があります。それに対するベストプラクティスはないと思います。ただし、スロットリングとバッファリングは良い考えです。

John Reid は、このトピックに関する優れた投稿をしています。http://qualitycoding.org/mvc-tdd/彼は、モデル ビュー コントローラー システムを TDD (テスト駆動開発) する方法を基本的に説明しています。彼はモデルから更新を取得するために通知を使用しますが、この点で ReactiveCocoa への自然な交換があります。IMHO ReactiveCocoa は、通知監視のような非表示の状態ではない Disposables を介してサブスクリプションを処理する明示的な方法を提供するため、さらに優れています。

どのように実装する必要があるかについては、モデルによって大きく異なります。一般的な永続化ユーティリティについては、軽量の Github の Mantle https://github.com/github/Mantleまたはコア データ ベースの Magical Record https://github.com/magicalpanda/MagicalRecordを参照してください。

于 2013-06-04T13:34:25.413 に答える