デザインパターンを使用


デザインパターン は、ソフトウェア・エンジニアリングの共通の問題を解決します。パターンは抽象的なデザインで、コードではありません。それを使うと、データモデルとアプリの残りとの相互作用の構造を定義するのに役立ちます。デザインを採用した場合、特定のニーズへの一般的なパターンを適応させます。作成しているアプリはどのようなタイプであれ、フレームワークで使用される基本的なデザインパターンを知っておくのは良い事です。デザインパターンを理解すると、より効果的にフレームワークを使用することができますし、より再利用可能な、より拡張可能な、変更が容易なアプリを書くことができます。


design_patterns_2x


MVC


モデル - ビュー - コントローラ(MVC) は、iOS アプリのための優れたデザインの中心となります。MVC は3つの役割:モデル、ビュー、コントローラーのいずれか1つにアプリ内のオブジェクトを割り当てます。このパターンでは、モデルは、アプリのデータを追跡し、ビューはユーザーインターフェイスを表示し、アプリの内容を構成し、コントローラは、ビューを管理します。ユーザーのアクションに応答し、データモデルからの内容でビューを占める事によって、コントローラはモデルとビューの間の通信のゲートウェイとして機能します。


ModelViewController_2x


これまで ToDoList アプリをビルドしてきたので、MVC 中心のデザインを踏襲してきました。ストーリーボードに築いたインターフェイスは、ビュー層を構成します。AddToDoItemViewControllerToDoListViewController はビューを管理するコントローラです。チュートリアル:データを追加 では、あなたのアプリのビューとコントローラで動作するようにデータモデルを組み込みます。独自のアプリのデザインを開始すると、デザインの中心に、MVC を考えることが重要です。


ターゲットアクション


ターゲット·アクション は、特定のイベントが発生したときに一つのオブジェクトが他のオブジェクトにメッセージを送信する、概念的にシンプルなデザインです。アクションメッセージ は、ソースコードに定義されるセレクタであり、ターゲット は、メッセージを受信するオブジェクトで、典型的には、ビュー·コントローラのアクションを行うことができるオブジェクトです。アクションメッセージを送信するオブジェクトは、通常コントロールですが、ボタン、スライダー、またはスイッチのような、タップ、ドラッグ、または値の変更など、ユーザーとの対話に応じてイベントを引き起こすことができます。


たとえば、ユーザーが (あなたがユーザー·インタフェースに作成した) [デフォルトに戻す] ボタンをタップしたらいつでも、アプリのデフォルト設定に復元することを想像してみてください。まず、あなたは、 restoreDefaults: アクションを実装し、デフォルト設定を復元するためのロジックを実行します。次に、 restoreDefaults: アクション・メッセージをビューコントローラに送信して、そのメソッドを実装する為に、ボタンのタッチアップ・インサイド・イベントを登録します。


target_action_2x


すでに ToDoList のアプリ内でターゲット·アクションを使用しました。ユーザーが AddToDoItemViewController 内の [Save(保存)] ボタンをタップしたとき、それは unwindToList: アクションをトリガします。この場合、[Save(保存)] ボタンはメッセージを送信するオブジェクトであり、ターゲット・オブジェクトは ToDoListViewController であり、アクションメッセージは unwindToList: であり、アクション・メッセージを引き起こし送信されるイベントはユーザーが [Save(保存)] ボタンをタップする事です。ターゲット·アクションは、相互作用を定義し、アプリのさまざまな部分の間で情報を送信するための強力なメカニズムです。


デリゲート


デリゲート は、アプリ内のあるオブジェクトの代わりに動作するか、または別のオブジェクトと連携して動作するシンプルかつ強力なパターンです。デリゲート・オブジェクトは他のオブジェクトへの参照ーデリゲートーと、それにメッセージを送信するのに適切な時に、そうします。メッセージは、デリゲート・オブジェクトが処理しようとしているか、処理したばかりのイベントのデリゲートに通知します。デリゲートは、アプリに自身のまたは他のオブジェクトの外観 (または状態) を更新することによって、メッセージに応答することができるし、場合によっては切迫したイベントが処理される方法に影響を与える値を返します。



delegation_2x


デリゲートパターンは、既存のフレームワーククラスでは一般的ですが、アプリ内で2つのカスタムオブジェクト間のデリゲートを実装することもできます。一般的なデザインでは、子ビューコントローラを、その親ビューコントローラに何らかの値 (通常はユーザーが入力した値) を通信できるようにするため、デリゲートを使用します。


あなたはまだデリゲートを使っていませんが、チュートリアル:データを追加 では、あなたの ToDoListViewController クラスに動作を追加する時、その例を見るでしょう。


これらは、iOS の開発中に遭遇する最も一般的なデザインパターンのほんの一部ですが、他にもたくさんあります。Objective-C の詳細について学ぶにつれ、あなたのアプリで適用することができる、他のデザインパターンを見つけるでしょう。






前の章:データ組み込み

次の章:ファウンデーションでの作業

目次
Xcode の新機能