2011-07-17 11 views
12

たとえば、名前のリストを取得してNSMutableArrayに保存しているとします。コントローラ(UIViewController)またはモデル(Friendsオブジェクト)でデータをフェッチするために実際にサーバーを呼び出すメソッドを実装していますか?モデルビューコントローラ:コントローラまたはモデルはサーバからデータをフェッチしますか?

+0

モデルにする必要があります。 – doNotCheckMyBlog

答えて

8

これは、達成しようとしていることに依存する設計上の決定です。モデルが単一のサービスのコンテキストでのみ意味がある場合、またはモデルがサーバー上のすべてのデータにアクセスできるようにする場合は、サーバーへの接続をデータモデルに構築します。たとえば、TwitterやFlickrのようなサービスのクライアントを構築する場合など、これは意味をなさないかもしれません。

一方、サーバからファイルを取得していて、それが終了した場合は、コントローラで通信を行うのが理にかなっています。コントローラは、アプリケーションの特定の動作に対して、再利用可能性が低く、カスタマイズされている傾向があります。データがモデルのどこから来るのかを詳細に把握することで、モデルの再利用が可能になります。また、テストも簡単です。ローカルファイルを読み込んでモデルに格納するだけのテストコードを書くことができます。店舗は、具体的にフェッチするように設計されています(http://www.bignerdranch.com/book/ios_programming_the_big_nerd_ranch_guide_rd_edition_

:「ビッグオタクランチガイドIOSのプログラミング」

+0

これは私が得たものです。+1 – Nektarios

+0

これが決定を下す唯一の理由ではないはずですが、コントローラでクライアントとサーバ間の通信を行うことは、[通知](https ://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/MVC.html)メカニズムをモデルからコントローラに送信します。 – Drux

0

これは良い質問です。私は最良の方法はコントローラを使っていると思います。なぜなら、あなたのモデルを他のモデルが正しく動作するために必要とするのを避けるからです。私はあなたがモデルでそれをやって "適切なmvc"に違反しているとは思わないが。

0

モデルに入れたいと思います。あなたが行うことは、データのモデルを調べることです。モデルは、内部データストアや外部のもの(サーバーのようなもの)のいずれであろうと、モデルの処理方法を処理します。

0

1つの方法は、リポジトリパターンを使用することです。これを行うには、Modelフォルダにリポジトリオブジェクトを作成し、すべてのデータベース関連メソッドをそこに配置します。コントローラはリポジトリクラスを呼び出してデータを取得します。これにより、実際のモデルオブジェクトをデータベースアクセスメソッドから分離することができます。

0

は、私はアーロン・ヒレガスの本の中で発見されたMVCSパターン(モデル - ビュー - コントローラ・ストア)、使用しますサーバ、ローカルファイル、永続化されたコレクション、データベースなどから来ているかどうかにかかわらず、データを保存することができます。

非常に進化的なアプリケーションを構築できます。たとえば、Webサービスに基づいてアプリケーションを構築することができます。データを保持する日には、コントローラー内の1行のコードを変更することなくストアを変更するだけです。

それは私が個人的にDAO、またはデータヘルパークラスを作ると思いますたくさんのリポジトリパターン(http://msdn.microsoft.com/en-us/library/ff649690.aspx)(CF BobTurboの答え)

0

ようなものです。物事がより複雑になると、客観的なCの厳しいMVCに従うことは非常に難しいです。しかし、それをモデルやVCに入れることも間違いではありません。

関連する問題