2010-12-27 7 views
5

最近私はMVCパターンを読んで、自分のiPhone開発に適用したいと考えています。しかし、パターンのバリエーションが多すぎるように見えるので、どのように適用するべきか正確にはわかりません。Model-View-ControllerパターンはiPhone開発にどのように適用されますか?

私が収集する限り、ビューは実行されたアクションをコントローラに通知し、コントローラはデータモデルを(必要に応じて)更新します。データモデルは、データの変更が発生するたびにビューに通知し、ビューはデータの表示を適切に更新します。

この基本モデルでは、コントローラはデータモデルの知識しか持っていません。しかし、私はiPhoneアプリ内でこのデザインを採用する方法を理解できないようです。

次のページでは、コントローラーがデータ・モデルとビューの両方を認識し、モデルとビューの間のすべての通信がコントローラーを介して行われるパターンの代替バージョンを示唆しています。モデルとビューがコントローラにアクセスできることも示唆されているようです。データモデルが何らかの通知(通知またはKVO)を介してコントローラとやり取りし、ビューがアクションを介してコントローラとやりとりすることを提案するのは正しいでしょうか?

この2番目のモデルは正しいですか?

http://www.bogotobogo.com/DesignPatterns/mvc_model_view_controller_pattern.html

多くのおかげで、

ダニー

+1

http://stackoverflow.com/questions/3845951/discuss-on-mvc-implementation-on-iphoneの重複と思われます – raaz

答えて

6

は、私は、iOSでのMVCのポールHegartysの説明は非常に役に立ちました。 see his Stanford iTunes U video。 MVCは分で開始し、予想通り22

編集
ビデオのリンクがあなたをもたらすことはありません。それはです。1. Cocoa Touch、Objective-C、Tools、およびMVCの紹介(2010年9月21日)

+0

このビデオは非常に有用であり、そのシリーズのすべてのビデオを見つけました...必ずお読みください – vivianaranha

+0

ビデオは確かに非常に有用です。それを投稿するための乾杯! :) 他のすべてのポスターにも多くの感謝。私は今、もっと理解が深まっていると感じています。 – Danny

1

iOSの開発は、MVCパターンの方を向いています。

通常、viewControllerとモデルで行われます。ビューはInterface Builderでビルドされ、コントローラに割り当てられ、モデルパーツは他の場所から取得されます。

私は、ココアタッチの場合、パターンの2番目の「バージョン」は、通常何が起こっているのかを最もよく表していると言います。

MVCの背後にあるアイデアは、モデルとビューを再利用できるということですが、コントローラーはしばしば問題に適応しています。 これはiOS開発でも当てはまります。特にインタフェースビルダーを使用している場合はそうです。

ビューはアクション/デリゲートを介してviewControllerに接続され、モデルはKVO通知またはコントローラが新しいデータを取得することによってその変更をブロードキャストします。

Appleの開発者ポータルから利用可能なコードがたくさんあります。まず、そのコードのいくつかを調べてください。あなたの目と心がMVCパターンを探すのに慣れていれば、イベントをよりよく抽象化するために、上にデリゲートパターンを使って常時使用することがわかります

2

MVCは長い間ずっと続きました。誤った引用符)をパターンに追加します。しかし、私が見てきたほとんどのMVC実装では、概念はほとんど同じです。

私は、AppleがMVCをどのように定義しているかに焦点を当てます。 Cocoa Design PatternsガイドおよびSDKサイトからダウンロードしたサンプルコード(MVCNetworkingの例)に記載されています。

iOSでは、モデルとViewController(コントローラとビューの両方のマージされた役割)がよくあります。

また、Martin Fowler氏は、GUI Architecturesにいくつか素晴らしいMVCを持っています。

1

私の意見では、2番目の方が良いです。モデルとビューは完全に分離する必要があります。ビューがモデルからの通知を受け取る場合、ビューはモデルのデザインにに依存します。ここにコントローラを配置することで、強固に結合された循環依存性が作成されます。 最後に、それぞれの部分を独立して開発することはできません。分断征服戦略は使用することができません。一般的な例について

私のアドバイス:

  • できるだけビューとモデルは、受動的かつ独立したことを確認します。主要な突然変異は、外部操作のみで行う必要があります。積極的に変更すべきではありません。
  • コントローラーをアクティブにして、コントローラーと他のコントローラーの両方を制御します。

iOSでは、UIViewは完全に受動的なビューです。ほとんどの場合、すべての主要な突然変異は常にUViewControllerによって外部的に行われます。モデルパーツは、必要に応じて完全に実装する必要があります。 (または、モデルがコントローラの中に十分に小さければそれを統合することもできますが、私は推奨しません)

大きな機能を備えたUIViewでは、サブスケールのMVCパターンが使用されます。フラクタル!

関連する問題