9

私はiPhone用のマルチビューアプリに取り組んでおり、現在、ビュー(VIEW)を設定していて、それらのトランジション(CONTROLLER?)がうまく機能しています。次に、実際のプログラムデータ(MODEL)のオブジェクトを追加します。

私の質問は、Model View Controller(MVC)デザインパターンに準拠するようにデータをどのように構成する必要があるかということです。データ構造を実装するために個別のクラスを作成する必要があり、コントローラークラスがビューからそれらにメッセージを渡すことができることはわかっていますが、他に検討する必要のある組織上の考慮事項はありますか?特にCocoaTouch、Xcode、またはiOSに特有のものですか?

その他の詳細:事前に録音された、おそらくユーザーが生成したオーディオの再生も不可欠です。これらがモデル要素であることは知っていますが、それらが「V」と「C」にどの程度正確に関連しているかについては、まだ少しあいまいです。ユーザーアクションでオーディオの再生が必要な場合、コントローラーはモデルにメッセージを渡して適切なサウンドを準備する必要があると思いますが、再生の調整はどこでライブで行う必要がありますか?私が想像するViewControllerとは別の「PlayerController」では?

私のMVCnooberyに感謝し、ご容赦ください。

4

2 に答える 2

8

カレブは、問題について考える方法の良い紹介と概要を説明します。あなたの特定のケースでは、ここにあなたがあなたの説明を与えたかもしれないいくつかの部分があります:

  • クリップ(M)-実際のオーディオデータを保持する責任があります。データを解釈して情報を提供する方法は知っていますが、実際には何も再生されません。

  • プレーヤー(V)-実際にスピーカーでクリップを再生します。はい、それはMVCの一種の見方です。オーディオは単なる別の種類のプレゼンテーションです。そうは言っても、それがUIViewのサブクラスであることを示唆しているので、「PlayerView」と呼ぶことは決してありません。

  • PlayerView(V)-プレーヤーの画面表現。クリップについては何も知りません。

  • ClipManager(C)-システム内のすべてのクリップを追跡し、ネットワークからのクリップのフェッチ、キャッシュへの追加と削除などを管理するオブジェクト。

  • PlayerViewController(C)-ClipManagerからクリップを取得し、PlayerとPlayerViewを調整して、それを表示および再生するとともに、その他のUI要素(「戻るボタン」など)を調整します。

これは、理論上のオーディオプレーヤーアプリでどのように分解するかの一例にすぎません。それを行うための正しいMVCの方法はたくさんありますが、これはそれについて考える1つの方法です。

于 2011-03-08T04:23:22.747 に答える
7

ジョン・ワーフィン卿(そして、確かに彼の前の誰か)は、「キャラクターはあなたが暗闇の中にいるものです」と言いました。モデルとは、誰も見ていないときのアプリケーションのことです。画面に表示される方法に関係なく、アプリの動作を定義するのはデータとロジックです。

アプリケーションにコマンドラインインターフェイスを追加することにしたと想像してみてください。データの管理には引き続き同じ構造を使用する必要があり、データに基づいて並べ替え、選別、計算するためのロジックも同じである必要があります。ユーザーがアプリをどのように表示したり操作したりしても、重要/有用なままであるアプリ内のコードがモデルです。

モデルは非常に単純で、完全に標準オブジェクトで構成されている場合があります。iOSアプリは、多くの場合、数値の処理よりもデータの取得、保存、表示に重点を置いているため、辞書の配列だけのモデルや、数レベルの深さの辞書の階層があることも珍しくありません。Core DataのNSManagedObjectクラスを見ると、多くの点でNSMutableDictionaryに似ています。したがって、適切な場合は、標準オブジェクトを使用することを恐れないでください。

とはいえ、独自のモデルオブジェクトを作成することもできます。これは、データに適用する特定の要件がある場合、またはデータから情報を取得できるようにする場合に役立ちます。

初心者は、各コントローラーがどのようにモデルにアクセスできるのか疑問に思うことがよくあります。一部の人々は、これにシングルトンパターンを使用することを提唱しています。これは主に、単一の共有された、グローバルにアクセス可能なオブジェクトを提供するためです。これはお勧めしません。代わりに、アプリデリゲートなどの高レベルオブジェクトをアプリに作成/ロードし(多くの個々のオブジェクトのグラフになる可能性があります)、モデルへのポインターを必要とするビューコントローラーに渡します。これらのコントローラーが他のビューコントローラーを作成する場合、モデル(またはその一部)へのポインターを子コントローラーに再度提供できます。

それがお役に立てば幸いです。

于 2011-03-08T03:47:38.233 に答える