3

特定のコードに関する特定の質問ではなく、プログラミングの概念に関する質問があります。

私は 2 つのモデル オブジェクトを持っています。1 つは Core Data に関連し、もう 1 つは Twitter に関連しています。

それらは互いに相互作用する必要があります。Twitter オブジェクトはデータベースからいくつかのつぶやきを必要とする場合がありますが、Core Data オブジェクトはいくつかのつぶやきをデータベースに書き込みたい場合があります。

各クラスにパブリック メソッドを記述し、各クラスにそれらのメソッドを呼び出させることができます。

ただし、これは非常に密結合であると感じており、オブジェクト間の通信に別の方法が必要です。

このシナリオでは、プロトコル デリゲート システムの方が適切でしょうか?

たとえば、Twitter クラスで TwitterDataSource プロトコルを宣言し、Core Data クラスがそのプロトコルのデリゲートとして機能します。そしてその逆。

どうもありがとう、

ヴァジーブ

4

2 に答える 2

2

あなたは正しいです、その結合はきついでしょう。結合を緩めたい場合は、Mediator 設計パターンの使用を検討してください。物事が変化するにつれて、メディエーターが 2 つのオブジェクト間の通信を処理する方法を変更するだけで済み、2 つの個々のオブジェクト自体は変更しません。

UML メディエーターの設計パターン
(ソース: devlake.com )

メディエータ情報の流れ

于 2013-03-09T18:48:07.253 に答える
1

それらは互いに相互作用する必要があります。Twitter オブジェクトはデータベースからいくつかのつぶやきを必要とする場合がありますが、Core Data オブジェクトはいくつかのつぶやきをデータベースに書き込みたい場合があります。

その場で止めさせてください。それは誰が見てもひどいデザインパターンです。権力の分離は、あなたの人生を楽にするのではなく、プロジェクトに分断をもたらし、各オブジェクトが相互に参照できるようにすることで、これを修正する必要があります。とにかく、これらのオブジェクトの両方のアクティビティは、コントローラーの概念に該当します。最初の操作は、特にデータベース コントローラーに完了したことを通知する必要がある場合に、非同期操作にリファクタリングできます。デリゲートを考慮する代わりに、データベースに書き込む NSOperation サブクラスを作成し (もちろん、シリアルに)、データベース コントローラーに、操作の結果と、他のオブジェクトから入ってくるツイートの両方を仲介させます。データベース。相互参照はもうありません (これは双方向性ではありません)、デュアルコントローラー オブジェクトや煩わしさはもうありません。

于 2013-03-09T19:25:26.143 に答える