[iOS] アプリ開発日記 スパゲティ化した初期化処理をなんとかする

2013/05/22

こんにちは。きんくまです。

Habit Keeperという日課アプリをAppStoreで発売しております。

で、今回はそのアップデートの日記みたいなものです。

前回最後にアップデートしたのが3月でして、そろそろ次のアップデートをしたいなと思ってます。

というか、アップデートをしたかったんですが、どうやっていいかわからず困ってしまっていたというのが正直なところです。
えーと、機能が増えていくと、あちらを立てるとこちらが立たずとか、このときにこうなるとか、分岐が増えていったりします。
なるべく依存関係はなくすように書いているのですが、機能が増えるとどうしても重なる部分が出てきてしまって、いろいろと考えることが増えていくんですよね、、。

よくやってたプログラムの流れ

これまで、FlashとかJSとかクライアント系プログラムで自分がよくやってた流れを図にしてみました。

flow_fig1

ユーザー入力を受け付けてからは、画面が分岐したりするんですが、それまでは一方通行の処理が続きます。
途中http通信で外部のデータを拾ってきたりするんですが、一方通行です。
迷いようがないです。

で、この中の初期化処理部分で、機能追加するときに困ったなとなっておりました。
各機能で分岐が必要なのですが、それをどうやってつないだらよいのかがわからず頭の中がこんがらがってました。
分岐にも、アラートを出してユーザーからのレスポンスにさらに分岐するものや、データをチェックして内部的に分岐を繰り返すものなどが各機能ごとにありどうしてよいやらと、途方にくれる感じ、、。

flow_fig2

んで、どうすんのこれ?と。「どうつなぐの?…今でしょ!」とか使い方間違えて言ってみたってわからんもんで困ってしまう。
本屋にいって、「ソフトウェアの設計書」みたいのを探してみたり、ネットで検索してみたりしたんですが、なんていうかピンとこないんですよ。
たぶん、書いて合ったのかもしれないけど、理解できてないせいか見つけられなかった、、。
うわーこれ困った! 俺、何がわかってないかもわかってないという状態じゃんw という感じで時間がすぎていく。

かといって、「わからないままは絶対にすすめたくない」と私のゴーストがささやくわけですよ。いったん進めてしまうと、これは大変そうだとなんとなくわかるんですよね。

それで、この間ふと調べものをしててアプリケーションのライフサイクルの図を見ていました。
>> App States and Multitasking

そしたら、ピンと来まして。あ、これを使えば良いんじゃん!と。
ようするに、処理を分岐して、枝分かれに分かれてしまったあとをどうやって細かくつなぐかを考えるのではなくて、

1. ひとつの機能のチェック項目をユニット化
2. 各ユニット同士をあらかじめ決めた順番で結ぶ

とやればOKだけだったんじゃんと。
これって、前から画面遷移では各画面ごとにしっかりユニット化して作ってたのに、どうして機能や状態ではそういうことを思いつかなかったんだろうと、、。

整理した初期化部分

flow_fig3

こうして処理をユニットないしグループとして見ることさえできてしまえば、あとはそれをクラス化したりできるので、管理がとっても楽になります。

自分で見返して思ったんですが、これって一番始めの図の「外部リソース読み込み」でやってることと同じなんですよね、、。そこは「なんたらLoader」みたいの作ってしっかり処理しているのに、どうして気がつかないのか、、。
発想の転換とか気付きって大事だなと思いました。

とかいいつつ、これに気づいたときに「俺って天才じゃねwww ……..今でしょ!」とか思ってしまったのはナイショです。


自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る