25255


私は、一人で開発していたためMVCなどはあまり気にせず開発を行っていました。  
しかし、チーム開発を行うことになったため、その開発手法をどうしようか悩んでおります。

まずはMVCだろう。  
ということでネットでiOSにおけるMVC開発手法を調べたのですがどうにもしっくりきません。

こちらのサイトも参考になるのですが、  
[これが最強のMVC(iOS)](http://qiita.com/koitaro/items/b3a924245fd72f22871a)  
このかたの開発手法ですと、どうやら「Modelの再利用ができない」そうなのです。  
それってダメなんじゃないの？と、素人の私は思っております。

iOSでのMVCの実現はどうすればよいでしょうか。


CC BY-SA 3.0
2016-05-28T18:26:41.710
25253
2016-06-15T11:13:14.123
2016-05-29T09:30:56.000
13404
13404
question
swift ios mvc
iOS開発でのMVCとは


_iOSでのMVCの実現はどうすればよいでしょうか。_  
やはり、iOSの開発元であるAppleのドキュメントを当たっておくべきでしょう。

[Cocoa Core Competencies/Model-View-
Controller](https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-
CocoaCore/MVC.html#//apple_ref/doc/uid/TP40008195-CH32-SW1)  
AppleがMVCをどう捉えているか、図とともに簡単な解説があります。

[iOSアプリケーション
プログラミングガイド](https://developer.apple.com/jp/documentation/iPhoneAppProgrammingGuide.pdf)  
([App Programming Guide for
iOS](https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html))  
「アプリケーションの構成」の節の中で、iOSアプリで使用されるオブジェクトをModel/View/Controllerに分けて分類した図があります。

[Objective-
Cプログラミングの概念](https://developer.apple.com/jp/documentation/CocoaEncyclopedia.pdf)  
([Concepts in Objective-C
Programming](https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaEncyclopedia/Introduction/Introduction.html))  
ご質問内のリンク先でも参照されていますが、「Model-View-Controllerパターン」と言う章にApple流のMVCの解説があります。但し、OS
X用として書かれたものにiOS用の修正を施した形ですのでiOSに用意されたフレームワークにはうまく当てはまらない内容も含まれています。

[Model-View-Controller for iPhone
OS](https://developer.apple.com/videos/play/wwdc2010/116/)  
少し古いですが、WWDC
2010でのセッションビデオです。英語音声のみの1時間近いビデオですが、iOSでのMVCについて考えるならば一度は目を通しておくべきでしょう。英語音声がわからなければpdf資料に目を通すだけでもざっくりとした感覚は掴めると思います。  
ビデオは10のBest Tipsという構成ですが、その中のDO NOTの部分を開発メンバーに徹底しておくだけでも、かなり有効ではないかと思います。

> The 10 Best MVC Tips Ever  
>  #1. Learn MVC for iPhone OS  
>  #2. Use MVC to Divide Work  
>  #3. Don't Fight the Framework
>
>   * Don't misuse framework classes  
>  (フレームワークにあるクラスの誤った利用をしてはいけない)
>   * Don't re-implement framework classes  
>  (フレームワークにあるクラスの再実装を行ってはいけない)
>   * Don't make trivial UIKit subclasses  
>  (UIKitの自明なサブクラスを作ってはいけない)
>

>
> #4. Don't Abuse Views
>
>   * xxx Views Don't Own Data xxx  
>  (ビューがデータを保持してはいけない…かなり強調されています)
>

>
> #5. Plan for iPhone and iPad  
>  #6. Strive for Loose Coupling
>
>   * Don't skip MVC layers when messaging  
>  (オブジェクト間のメッセージのやり取りでMVCの階層をスキップしてはいけない)
>   * Don't mix MVC roles in one object  
>  (MVCの役割を一つのオブジェクトに混在させてはいけない)
>   * Don't declare model data in your view classes  
>  (ビュークラスの中でモデルデータを宣言してはいけない)
>

>
> #7. Choose the Right Data Model
>
>   * x Defaults/Preferences  
>  (デフォールト/設定をデータモデルに使うのはダメ)
>

>
> #8. Decompose Controller Work
>
>   * Avoid making EverythingControllers  
>  (「なんでもコントローラー」を作るのは避けること)
>   * x Class checks in delegate methods  
>  (デリゲートメソッドの中でクラス判定をするなんてのはダメ)
>

>
> #9. Take Charge of Your Object Graph  
>  #10. Coordinate State Changes
>
>   * Don't Cut Out the Controller  
>  (コントローラーをすっ飛ばさない)
>

元ビデオ(pdf資料)を見れば、もう少し具体的に説明されているものもあります。わかりにくいところがあれば、まずは元ビデオを当たってください。

元ビデオではMVCパターンの恩恵として「Flexible and Easy to
Change(柔軟で変更が容易)」なソフトウェアを作れることとしていますので、「Modelの再利用ができない」のではApple的MVCの観点からはとても最強とは言えないですね。


CC BY-SA 3.0
2016-05-28T23:17:36.137
25255
2016-05-29T09:38:59.857
2016-05-29T09:38:59.857
13972
13972
25253
answer