MVCをX-Codeに当てはめてみる

iPhoneで新規プロジェクトを作ったときは、とりあえずControllerが作成される。
そう、これは、MVCアーキテクチャで作れとのことである。

MVCモデルとは?

  • Model:データの格納
  • View:画面レイアウトと表示
  • Controller:データと表示のコントロール

の処理系統を3つに分類して考えるやりかたの事だ。

Objective-Cでの実装

まずは、クラス図です。

プロジェクトをViewBaseで作成した場合は、mainと、mainのDelegateと、Controllerが作成された状態で始まる。
mainとDelegateはControllerを作成するために必要なものであり、最初は無視しても問題ない。
Controllerには同じ名前のxibファイルがある。これがViewです。
xibは起動時に自動的に読み込まれるので、何もせずともビルドをすれば、このViewが表示される。
ただし、このままではViewにCoreGraphicsを使った描画が行えないので、使いたい場合は独自にViewを作成する必要がある。
[Action]->[追加]->[新規ファイル]->Objective-C class](UIView)とすれば、作成出来る。
Modelは自分で作成する必要がある。
[Action]->[追加]->[新規ファイル]->[Objective-C class](NSObject)とすれば、作成出来る。
各オブジェクトのつなげ方は、上図の通りだが解説を行うと、Controllerのヘッダー(.h)にViewとModelを保持できるように、ポインタを宣言。同時にsetter、gatterを自動生成してもらうために、ヘッダー(.h)に@propertyを宣言、メソッド(.m)に@synthesizeを宣言。同様にViewのヘッダー(.h)にModelのポインタ、@propertyを宣言、メソッド(.m)に@synthesizeを宣言。
ControllerのviewDidLoadでModelの作成、Viewを作成&addView&Model参照をする。
このようにする事で、ControllerとViewからModelを参照する事ができ、必要な操作が行えるようになる。
ビジネスロジックをControllerに組み込むか、Modelに組み込むかは意見が分かれる所だが、Model単体で必要なロジックはModelに組み込み、複数のModelを操作する場合は、ControllerとModelの間に中間層のControllerを置くと作成しやすくなる。