Start Developing iOS Apps Today(8)~デザインパターンの使用

2014. 03. 10
●デザインパターンの使用

デザインパターンは一般的なソフトウェア技術の問題を解決します。
パターンは抽象的な設計で、コードではありません。
デザインを採用する時は、特定のニーズに一般的なパターンを適用します。
作成するアプリの種類が何であろうとも、フレームワークで使用されている基本的なデザインパターンを知るのは良いことです。
デザインパターンを理解すると、より効果的にフレームワークを使用するのに役立ち、より再利用や拡張、変更が容易なアプリを記述することができます。

design_patterns_2x.png



●MVC

モデル - ビュー - コントローラ(MVC)は、どのiOSアプリにおいても優れた設計の中心となります。
MVCでは、アプリのオブジェクトをモデル、ビュー、またはコントローラの3つの役割のいずれかに割り当てます。
このパターンでは、モデルはアプリのデータの追跡を維持し、ビューはユーザインターフェイスの表示とアプリのコンテンツを構成し、コントローラはビューを管理します。
コンテンツを持つビューを生成してユーザ操作に応答することによって、コントローラはモデルとビュー間の通信のためのゲートウェイとして機能します。

ModelViewController_2x.png

ToDoListアプリを構築していく中で、MVC中心の設計を踏襲してきました。
ストーリーボードに構築したインターフェイスはビュー層を構成します。
XYZAddToDoItemViewControllerとXYZToDoListViewControllerはビューを管理するコントローラです。
チュートリアル:データの追加」で、アプリのビューとコントローラで動作するデータモデルを組み込みます。
独自のアプリの設計を始める時は、設計の中心にMVCを維持することが重要です。



●ターゲット - アクション

ターゲット - アクションは特定のイベントが発生した時に、あるオブジェクトが別のオブジェクトにメッセージを送信するという、概念的に単純な設計です。
アクションメッセージはソースコードで定義されたセレクタであり、(メッセージを受信するオブジェクトである)ターゲットはアクションを実行することができるオブジェクトで、一般的にビューコントローラです。
アクションメッセージを送信するオブジェクトは通常、タップやドラッグ、値変更等のユーザ操作に応答してイベントをトリガすることができる(ボタン、スライダ、スイッチなどの)コントロールです。


例えば、ユーザが(ユーザインターフェイスに作成した)Restore Defaultsボタンをタップする度に、アプリのデフォルト設定を復元すると仮定します。
まずデフォルト設定を復元するためのロジックを実行する、アクションrestoreDefaults:を実装します。
次に、そのメソッドを実装したビューコントローラにrestoreDefaults:アクションメソッドを送信するために、ボタンのTouch Up Insideイベントを登録します。

target_action_2x_20140220154507194.png

貴方はToDoListアプリで既にターゲット - アクションを使用しています。
ユーザがXYZAddToDoItemViewControllerのDoneボタンをタップした時、unwindToList:アクションをトリガします。
この場合、Doneボタンはメッセージを送信するオブジェクトであり、ターゲットオブジェクトはXYZToDoListViewControllerで、アクションメッセージはunwindToList:、そして送信されるアクションメッセージをトリガするイベントはDoneボタンをタップするユーザです。
ターゲット - アクションは、相互作用を定義してアプリの様々な部品間で情報を送信するための強力な仕組みです。



●デリゲーション

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

delegation_2x_20140220215301aae.png

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

貴方はまだデリゲーションで作業をしていませんが、「チュートリアル:データの追加」でXYZToDoListViewControllerクラスに動作を追加する時に一例を見ることができます。

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



参考文献

Apple/Start Developing iOS Apps Today

0 CommentsPosted in 資料





QuietControl 30 wireless headphones
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
10 | 2017/11 | 12
Sun Mon Tue Wed Thu Fri Sat
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

QuietControl 30 wireless headphones
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR