*

iOSプログラミングのキモ(行き当たりばったりなプログラミングでも、何とか形にするために守っていること その2)

先週に引き続き、今週も文字中心のエントリーです、今回は 下記3つのことを書いていきます。

  1. Mediator デザインパターンを積極的に使う
  2. 出来るだけ早くエンティティクラスを定義して、クラス間の情報やりとりをシンプルにする
  3. エンティティクラスはO/Rマッパーと連動させると尚良し

Mediator デザインパターンを積極的に使う

Mediator デザインパターンは以前書いたiOSプログラミングのキモ(MainViewController説明 NSNotification/NSNotificationCenter これ大事)をデザインパターンに当てはめた場合の表現です。
NSNotification.001

NSNotification.002

以前使った図の使い回し(^^; ですが・・
Wikipediaの解説では

Mediatorパターンを用いると、オブジェクト間の通信は mediator によってカプセル化され、オブジェクト同士で直接通信せず、mediator を介して行うようになる。これにより通信するオブジェクト同士の依存関係を削減し、結合の度合いを下げることができる。

と書いてあります。
Objective-Cでは NSNotification/NSNotificationCenterがまさしく mediator の役割を果たしています。JavaではObserverがそれに相当します。

行き当たりばったり(急な機能追加・変更)の多い プログラムでは、オブジェクト(インスタンス)同士を疎結合にしておくことで お互いのクラスとしての変化(機能追加・変更)の影響を極力低くさせて行くことが出来るようになります。
またNSNotificationやObserverでは メッセージを複数のインスタンスに送ることが出来るので イベントドリブン(ボタンが押されたら これやって・あれやって的な しくみのこと)で構成されるGUIプログラム等には有効です。

Mediatorパターンの弱点は インスタンス同士の結合度やとても低いため、プログラム全体の動きのトレースがやりづらいことです。
また、複数のメッセージを送った場合、受け取った側の処理の順番は分からないので、順番を規定したい場合には 何かしら工夫が必要です。

出来るだけ早くエンティティクラスを定義して、クラス間の情報やりとりをシンプルにする

実装の初期の段階では、メソッドの引数がint型1つだけでも、機能追加・変更に伴い 引数が増えることがよくあります。メソッドの引数に増減が生じると、そのメソッドを呼んでいる全てのクラスが影響を受けます。重要なメソッドほど 様々なところから呼ばれていたりするので 修正が大変ですし、バグが混ざり込みやすくなり問題です。

たとえ最初は簡単な引数が1つしかなくても、今後 増えたり変更する可能性があるメソッドは 引数に独自のエンティティクラスを与えるようにして表面上 メソッドの引数は変わらないようにしておいた方がその後の実装が楽になります。

一度実装したプログラムはその後 機能追加・変更があっても いじる箇所を極小に出来る工夫が大事、それが不具合の発生を減らし効率のよいプログラムを組むキモです。

エンティティクラスはO/Rマッパーと連動させると尚良し

エンティティクラスのインスタンスを複数扱うことがわかっていたら出来るだけ早いタイミングでO/Rマッパーを導入していきましょう。iOSの場合はCoreDataというとても強力なO/Rマッパーがあります。

スクリーンショット 2014-05-20 14.37.53

スクリーンショット 2014-05-20 14.44.01
写真はXCodeでエンティティクラスの定義をしている画面です。

テーブルを定義したら、対となるエンティティクラスを生成します。XCodeからでもエンティティクラスは生成出来ますがコマンドラインから使えるmogeneratorが便利です。

CoreDataでは 内部でSQLliteを使っていますが、SQL文は使わず 独自のメソッドで目的のインスタンスをSQLiteから取り出します。しかしそのメソッド郡は癖があって あまり使いやすいとは言えません。

私は MagicalRecordをCocoaPodを使ってインストールしています。
CoreData単体よりも使いやすさはアップします。

CoreDataの使い方はそれだけで 何回かに分けて解説すべき内容なので、今回のエントリーでは 簡単に紹介するだけに留めます。

CoreData、mogenerator、MagicalRecordの使い方は「Mogenerator + MagicalRecordでCoreData入門」に丁寧に解説されています。ぜひ読んでみてください。

まとめ

前回・今回と2回に分けて「行き当たりばったりなプログラミングでも、何とか形にするために守っていること」を紹介してきました。行き当たりばったりな開発でなくても、開発途中の仕様追加・変更は 常に発生します。決められた工数の中で出来るだけそれに対応していくために 今回紹介した方法が役に立つと思います。

関連記事

FileQ iOS版を開発しようと思った理由

私の会社では FileQというファイル転送サービスを 2008年3月末から始めています、かれこれ6年

記事を読む

サイト管理 Mezzanine

Django上で動くCMS Mezzanine 用のモジュールを作ってみる その1

Django上で動くCMS Mezzanine上で動く、モジュールを作っていきます。 Mezzan

記事を読む

iOSプログラミングのキモ(iOS7から使えるようになったマルチタスク機能、NSURLSessionUploadTask の困った現象)

このブログでも度々書いてきたFileQ iOS版ですが、今月末に Appleに申請できそうな

記事を読む

FileQ iOS版 公開しました。

5/2にFileQ iOS版を無事、公開しました。Appleの審査もスンナリ通り ホットしています(

記事を読む

iOSプログラミングのキモ(AppDelegate説明 NSUserDefaultsに設定情報を格納する )

QTubeは、YouTubeを閲覧するときに 国別コードを設定しています。国別コードは iOSに設定

記事を読む

iOSプログラミングのキモ(行き当たりばったりなプログラミングでも、何とか形にするために守っていること その1)

FileQ iOS版がリリースされて、のんびりしたい気持ちもありますが、FileQ Android版

記事を読む

iOSプログラミングのキモ(デバッグをやりやすくするための工夫:Debug.hのインクルード )

前回 紹介した Debug.h は、使う際 以下のようにソースファイル(ここでは拡張子が m のもの

記事を読む

iOSプログラミングのキモ(サードパーティ製ライブラリをサクッと入れるcocoapods)

iOSプログラミングでは 便利なライブラリがたくさんあります。特にUI系のライブラリは豊富で自分で作

記事を読む

iOSプログラミングのキモ(AppDelegate説明 iPhone5以降とiPhone4S以前を画面サイズで判別する )

iPhone5以降 画面サイズが2パターン(iPhone6ではさらに増えるかも・・(^^;))になっ

記事を読む

iOSプログラミングのキモ(iOS7から使えるようになったマルチタスク機能、NSURLSessionはこう使え!)

今日はQTubeのソースに関する話題ではなく、現在開発中のアプリで使っているNSURLSession

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

FileQ Hosting 月額99円 容量1GB


サイト管理 Mezzanine
Django上で動くCMS Mezzanine 用のモジュールを作ってみる その1

Django上で動くCMS Mezzanine上で動く、モジュールを作

ホーム Mezzanine
Django上で動くCMS Mezzanine を インストールする MacOSX Yesemite 編

Mezzanineは Django WEBフレームワーク上で動くCMS

EclipseにGWT(Google Web Toolkit) Plugin for Eclipseを入れようとしてハマった

最近PHPでちょっとした業務システムを作りました。業務システムの特徴と

ブログを半年やった成果を Google Analytics から眺める

今年の1月からブログを書き始め、そろそろ半年が経とうとしています。

母校で特別 講義をやってきました。

少し 間が空いてしまいました(^_^;) ちょっと前になりますが

→もっと見る

mautic is open source marketing automation
PAGE TOP ↑