0

CoreData エンティティ X と、このエンティティ XController のコントローラーがあります。これで、X エンティティのコレクションと XGroupController を含む別のエンティティ XGroup ができました。

問題は、XGroupController が XController と対話する必要があることです。XGroupController に XGroup を渡して観察し、X エンティティから XController を取得するだけでよいでしょう。

質問は次のとおりです。エンティティ内のコントローラーへの参照を (保持サイクルを避けるために弱い) 格納することは良い考えですか? ちょっと「ダメ」な感じです。このための別の設計パターンはありますか?

[編集] 追加情報: XController/XGroupController はビュー コントローラーです。「間違っている」と感じた理由は、ビューレイヤーがモデルレイヤーにあってはならないからです。したがって、@TechZen は最初の段落で正しいです。

しかし、その参照がない場合、どうすればよいでしょうか。私が見る方法は、XGroupController にすべての既存の XController を渡し (さらに、変更されたときにそれらを更新し)、XGroup 内の項目が変更されたときに、対応するコントローラーを見つけることです (その X エンティティの XControllers プロパティが XGroup にあるかどうかを確認することによって)。そして最後に XController と対話します。

モデルがすでに非常にうまく処理しているものについては、もう一度作業を行う必要があります。コントローラ レイヤでグループをもう一度処理しなければならない場合、モデル レイヤは意味がありませんか?

場所/複雑さの点での違いは非常に重要です。何か不足していますか? (おそらく、私のシナリオでは、モデルを介して XGroupController が XController に提供する必要がある情報を保存するのは意味がないことを追加する必要があります)。

4

1 に答える 1

0

「コントローラー」がMVCビュー/インターフェースコントローラーを意味する場合、カプセル化を破るため、それは間違っています。データ モデルは、そのデータがどのように表示されるかをまったく気にする必要はありません。

「コントローラー」がその名前の単なるエンティティである場合、フェッチされた関係を使用して、2 つのコントローラーが互いに通信できるようにする必要があります。これにより、オブジェクト グラフ内の循環関係が防止されます。

于 2010-06-11T14:32:43.043 に答える