はじめに
社内勉強会の資料をSlideShareのUPしました。
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
これについての要点をまとめます。
この資料はiOS/Androidのような クライアントアプリケーションにおける「Model」とは何か、という話です。
Modelとは何か?
Modelに「データやビジネスロジックを扱うコンポーネント」という役割を担わせるというのは多くの人がやっていることだと思います。しかし、サーバ側のWebアプリケーションとは異なり、クライアント側のiOS/AndroidアプリのModelには次の2つの振る舞いがとても重要です。
- 基本死なない(Singleton的である)
- 「通知」で変更を伝える(Callback的ではなく)
そのようなModelがなぜ必要か?
この2点の役割を持つコンポーネントがなく、特に何も考えずにスマホアプリを実装すると、次のような問題がたいてい起こります。
よくある問題点
危険な処理
一つ目は、 既に無効になっているObjectに対してCallbackが返ってきて、無効な処理を行う危険 です。
例えばAndroidで、ActivityがDestroyされているのに、通信のCallbackが戻ってきて、ViewやDialogの操作を行おうとして落ちるような問題です。
###無駄な処理
同様に 既に意味的に行う必要がないCallbackの処理 を行ってしまう問題もあります。
無駄と言っても、
通信結果のデータをViewに表示するだけならまだマシですが、
そのデータを更に加工したり、その後更に通信を行ったりしていると結構響いてきます。
###画面を行ったり来たりしていると重くなる
無駄な処理や通信等を重複して実行してしまう可能性があり、 ユーザが画面を行ったり来たししているうちに非常に遅くなったり、メモリが足りなくて落ちたりする問題 もあります。
これも通信が重複するくらいなら、まだ良いのかもしれませんが、センサーデバイスを起動したりLocalDBを一気に更新したりするような処理の場合かなり問題です。
解決方法
前述のModelの導入すると上手く解決できます。詳細は資料の方を見て頂ければと思います。
Webアプリ開発からスマホアプリ開発に移ってきた人ほど注意して欲しい
私もそうだったのですが、
Webアプリケーションをよく開発していた人は **「Model」**というと **「ああ、あれね」**と思い浮かびますが、 前述のような振る舞いの必要性が全く頭に浮かびません(たぶん)。Webアプリでは Objectのライフサイクル とか Singleton とか Observerパターン とか 普通考えないですからね。私も以前師匠のkaoru先生から色々教わりまして、そこで教えてもらったことを今回まとめてみました。なので、Webアプリの経験はあるからModelのことはわかっているけど、スマホアプリは日が浅い、という方は是非一読して頂けると何か得るものがあるんじゃないかと思います。
もちろん、単にアプリ開発を始めたばかりの人もこの辺の内容を理解しておくと、かっこいい設計のアプリが作れるようになると思います!
色々な設計はあると思いますが、少なくともこういう問題が起こりやすいことを認識しておくことと、
基本的にはこういう解法があるということを知っておいて損はないでしょう。
設計は議論をすると身に付くし深まりますので、みなさんも是非周囲の人と協議してみてください。