【特集】

TigerのCocoaにみるMVCの完成 - スマートなデータモデルを実現するCore Data

13 MVCの協調動作

    木下誠  [2005/10/31]

    これで、MVCの協調動作の流れを説明する準備がついに整ったことになる。アプリケーションの動作を理解するには、あるアクションをトリガーにして、どういう流れで処理が起きるのかを説明するのが一番である。

    ここでは、ユーザが「追加」ボタンをクリックして、オブジェクトを追加するときの流れを説明しよう。結果として起きる動作は、テーブルに列が一個追加されることである。

      [ビュー→コントローラ]

    • ユーザのクリックイベントを、ビューレイヤにあるボタンが受け取る。
    • ボタンは、関連づけられている、コントローラレイヤのNSArrayControllerの、add:メソッドを呼び出す。
    • [コントローラ→モデル]

    • NSArrayControllerは、バインディングを使って、モデルレイヤの管理対象オブジェクトコンテキストを取り出す。
    • さらに、自分に設定されている、エンティティ名を用意する。
    • エンティティ名と管理対象オブジェクトコンテキストを使って、管理対象オブジェクトのインスタンスを作成し、コンテキストに追加する。
    • [モデル→コントロール]

    • モデルレイヤでは、コンテキストへの管理対象オブジェクトの登録を行う。
    • コンテキストを監視しているコントローラレイヤのオブジェクトへ、更新通知を行う。
    • [コントローラ→ビュー]

    • 更新通知を受け取ったコントローラは、設定されているPredicateを使って、モデルレイヤからオブジェクトを取り出す。
    • オブジェクトの値をチェックし、監視しているビューに更新通知を行う。
    • [ビュー]

    • 更新通知を受け取ったビューは、コントローラから値を取り出す。
    • ビューの表示を更新する。

    これが、完成された、Cocoa MVCの一連の流れである。

    Cocoa MVC動作の流れ

    文章で書くと、かなり冗長に感じるかもしれない。また、これだけ複雑な構造が必要なのか、疑問に感じる向きもあるかもしれない。

    だが、ここには多くの利点があることを確信を持って言える。まず、MVCの各レイヤが、完全に独立している。それぞれのレイヤ間のアクセスは、すべてキー値コーディングとキー値監視を使っていることに注目してほしい。これは、いかなるクラスやメソッドも、直接的な依存関係はないことを示している。実際に、TigerでCore Dataによるモデルレイヤの追加が行われたが、これは従来あったビューとコントローラの間には、なんの影響も及ぼしていない。

    そして、これらの設定の全ては、Interface Builderで行うことができる。文字通り、全ての設定だ。コードを書く必要があるのは、Core Dataの初期化処理を行う箇所だけだ。これすらも、テンプレートを利用すれば自動的に用意される。

    Interface Builderで設定が行えるということは、高いレベルでの抽象化が行われていることを意味している。MVC構造をサポートするための機構は、アプリケーション独自のロジックから完全に切り離されているのだ。

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン