株式会社ユーザベースの技術チームブログです。クラッシュしないアプリ制作の鉄則TweetNewsPicksサービスの開発を行っている大川です。本日はNewsPicksのスマホアプリがどんな設計になっているかを紹介します。社内LTネタを元にしています。階段の部分はどうやってるの?(『NewsPicksのUIデザイン』)文字が読みやすいように工夫しているの?などいろいろと観点はあるとは思いますが、まずは全体として絶対に守っている「竜骨」とも言うべきコアの設計についてお話しします。どのアプリでも必ず守るべき鉄則となります。ViewControllerに密結合させないということです。大前提として、下記の3レイヤーに分けた設計を行います。プレゼンテーション層は、ユーザーの操作に従ってViewのコントロールを行います。ビジネス層は、データそのものや、データの取り扱い責務を担います。Viewへのデータ変更通知も行います。Viewのいかなる変更もビジネス層には影響しません。デバイスにも依存しない領域です。データアクセス層は、サーバーのAPIに問い合わせを行ったり、ローカルストレージ(PreferenceやSQLite、WeakCacheなど)にアクセスします。スマホアプリの最大の特徴は、タッチスクリーンで操作が行われると言うことです。ViewControllerはめまぐるしく生成、消滅を繰り返します。0.5秒も経たずに画面を遷移することもしばしばです。ビジネス層のServiceがViewControllerのインスタンスをがっちり握っているとしたらどうなるでしょう。Technologyカテゴリのニュース一覧をとってこようとしたとき、サーバーに問い合わせに行って帰ってきたときには、ユーザーはもうTechnologyカテゴリを閉じていて、経済カテゴリを見ているかもしれません。Callback先のTechnologyカテゴリのViewが既に解放されてしまっているということです。メモリ解放が行われた場所にそのままCallbackすれば、必ずクラッシュします。1度アプリがクラッシュすると、84%のユーザーが離脱するというデータもあるようです。これは大変な問題です。なんとかしなくてはいけません。Patternを使えば、通知の受取人がいなければそのまま無視するだけという構造をつくりだすことができます。iOSではNSNotification、AndroidではBroadcastReceiverのような仕組みを使うと良いでしょう。1つの要求に対して1つの返事を返す、という構造にしなくて良くなるため、せっかちなユーザーの操作に影響されてシステム全体が遅くなってしまう問題を回避することができます。Patternによる極めて疎な結合をさせるように心がけるべし、という言い方もできます。ちなみにViewが解放されるときに必ずObserver解除をしないと、それがクラッシュ要因になってしまいます。ViewControllerに密結合させないという鉄則でした。NewsPicksもSPEEDAも積極的にエンジニア採用活動をしております。ユーザベースのデザイナー、広田です。新オフィスにてエンジニア...2014-12-16NewsPicks(iOS)の設計思想NewsPicksチームインターン生の保田です。開発を担当している杉浦です。»プロフィール『経済情報で、世界を変える』をミッションに、企業・業界情報プラットフォーム「SPEEDA」やソーシャル経済ニュース「NewsPicks」、ABMを強力にサポートする「FORCAS」、スタートアップの情報収集を圧倒的効率化「entrepedia」などを提供する株式会社ユーザベースの技術チームブログです。多国通貨」をハンズオンしたら快適で楽しかったGo言語でオブジェクト指向プログラミングの基本(型編)月別アーカイブ検索@Uzabase_Techさんのツイートスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。