1

この質問は、OOPのMVCパターンに関する概念的なものです。プロットは次のとおりです。RESTWebサービスで動作するリッチクライアントアプリケーションを使用しています。サーバー上のリソースに対してGETリクエストを実行すると、サーバーはXML形式の応答を返します。応答はRSSフィードのように見えます。クライアントアプリケーションは、このXMLを解析して読み取り可能なmodに表示する必要があります。

基本的にサーバーデータベーステーブルを反映するモデルオブジェクトを作成しました。また、パーサーとビューコントローラー(および明らかにビュー)もあります。

これが今日の仕組みです。ビューコントローラは、パーサーに解析を開始するように指示し、パーサー(SAXタイプ)はXMLを読み取り、モデルオブジェクトをインスタンス化して、そのプロパティに詳細をロードします。パーサーがアイテムの処理を完了するたびに、ビューコントローラートラフデリゲートメソッドに通知します。解析されたアイテム(タイプはモデルオブジェクト)をViewControllerに送信します。ビューコントローラは、このアイテムをコレクションに追加します。

パーサーがXMLの解析を終了すると、ビューコントローラーに通知し、コレクションの場合はビューコントローラーが各アイテムを読み取り、ビューを構築します。

これが私の質問です。

  1. これは良い実装ですか?
  2. コレクションの所有者は直接モデルである必要があると思うので、View Controllerはモデルに解析の開始を要求し、パーサーはView Controllerではなくモデルに通知し、最後にモデルはコレクションをViewControllerに送り返します。これは良いですか?
  3. モデルとパーサーをマージする必要がありますか?
4

2 に答える 2

2

ここにあなたの質問についてのいくつかのポイントがあります:

  1. MVCにはバリエーションがあります。モデルまたはコントローラーが状態の変化またはイベントについてビューに通知する必要があるかどうかについての厳密な規則はありません。それはすべてアプリケーションの詳細に依存します。
  2. パーサーとビューの間の通信は、最初に説明した方法では、おそらく正しい方法ではありません。ビューを構築するためにパーサーとやり取りするのではなく、ビューにデータが入力されたコレクションを取得することをお勧めします。これはビューの仕事ではありません。また、単一の関数(コレクションの構築など)を複数のコンポーネントに分散させることはお勧めできません。
  3. モデルに解析を含めるか、別のコンポーネントであるパー​​サーを使用するか。モデルをアプリケーションの他の部分から切り離して考えることをお勧めします(たとえば、ビューでモデルを表示する必要があるなど)。その分離で、構文解析がモデルに自然に属するものであるかどうかを確認します。その場合は、それをモデルに含めます。それ以外の場合は、別のコンポーネントにします。私の推測では、それはモデルに属していないので、別のコンポーネントである必要があります。
于 2012-01-31T16:12:14.930 に答える
0

モデルは通常、それ自体を作成しません。コントローラは、モデルから1つ以上のオブジェクトを返すリポジトリを呼び出します。リポジトリ パターンについてもう少し読むことができます。

于 2012-01-31T16:05:59.800 に答える