Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Ken Morishita
12,479 views
iOSやAndroidアプリ開発のGoodPractice
iOS/Androidアプリ開発のGoodPracticeのようなものです。
Technology
◦
Read more
62
Save
Share
Embed
Download
Downloaded 57 times
1
/ 46
2
/ 46
3
/ 46
4
/ 46
5
/ 46
6
/ 46
7
/ 46
8
/ 46
9
/ 46
10
/ 46
11
/ 46
12
/ 46
13
/ 46
14
/ 46
15
/ 46
16
/ 46
17
/ 46
18
/ 46
19
/ 46
20
/ 46
21
/ 46
22
/ 46
23
/ 46
24
/ 46
25
/ 46
26
/ 46
27
/ 46
28
/ 46
29
/ 46
30
/ 46
31
/ 46
32
/ 46
33
/ 46
34
/ 46
35
/ 46
36
/ 46
37
/ 46
38
/ 46
39
/ 46
40
/ 46
41
/ 46
42
/ 46
43
/ 46
44
/ 46
45
/ 46
46
/ 46
More Related Content
PDF
IOS/Androidアプリの3つの大事な設計方針
by
Ken Morishita
PDF
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
by
Ken Morishita
PPTX
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
by
Ken Morishita
PDF
プロダクトオーナーが知るべき97のこと
by
toshihiro ichitani
PDF
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
by
Koichiro Matsuoka
PPTX
Ruby World Conference 2019 rubyによる超大量データ配信
by
Daisuke Yamazaki
PPTX
ドメイン駆動設計の学習曲線とブレークポイント
by
増田 亨
PPTX
概念モデリング再入門 + DDD
by
Hiroshima JUG
IOS/Androidアプリの3つの大事な設計方針
by
Ken Morishita
iOS/Androidアプリエンジニアが理解すべき「Model」の振る舞い
by
Ken Morishita
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
by
Ken Morishita
プロダクトオーナーが知るべき97のこと
by
toshihiro ichitani
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
by
Koichiro Matsuoka
Ruby World Conference 2019 rubyによる超大量データ配信
by
Daisuke Yamazaki
ドメイン駆動設計の学習曲線とブレークポイント
by
増田 亨
概念モデリング再入門 + DDD
by
Hiroshima JUG
What's hot
PDF
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
by
京大 マイコンクラブ
PDF
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
by
Yusuke Hirao
PDF
OKRガイドライン抜粋版_2019年3月_freee finance lab
by
freee株式会社
PDF
LEANSTARTUPアンチパターン #devlove #leanstartup
by
Itsuki Kuroda
PDF
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
PDF
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
PPTX
Goで実装した UPSIDERの決済金額リミット機能
by
Miki Masumoto
PPTX
ミクシィ 21卒向け Android研修
by
akkuma
PDF
[Container Runtime Meetup] runc & User Namespaces
by
Akihiro Suda
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
by
Itsuki Kuroda
PDF
失敗から学ぶAndroid設計話
by
chigichan24
PPTX
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
by
U-dai Yokoyama
PDF
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
by
Koichiro Matsuoka
PDF
インフラCICDの勘所
by
Toru Makabe
PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
by
Shin Ohno
PDF
Project Facilitation From Hiranabe
by
Yasui Tsutomu
PDF
デザインパターン
by
gaaupp
PDF
5G時代のアプリケーション開発とは - 5G+MECを活用した低遅延アプリの実現へ
by
VirtualTech Japan Inc.
PDF
正しいものを正しく作る塾-設計コース
by
増田 亨
PDF
ユーザーストーリー駆動開発で行こう。
by
toshihiro ichitani
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
by
京大 マイコンクラブ
プログラム組んだら負け!実はHTML/CSSだけでできること2015夏
by
Yusuke Hirao
OKRガイドライン抜粋版_2019年3月_freee finance lab
by
freee株式会社
LEANSTARTUPアンチパターン #devlove #leanstartup
by
Itsuki Kuroda
世界でいちばんわかりやすいドメイン駆動設計
by
増田 亨
イミュータブルデータモデル(入門編)
by
Yoshitaka Kawashima
Goで実装した UPSIDERの決済金額リミット機能
by
Miki Masumoto
ミクシィ 21卒向け Android研修
by
akkuma
[Container Runtime Meetup] runc & User Namespaces
by
Akihiro Suda
フロー効率性とリソース効率性、再入門 #devlove #devkan
by
Itsuki Kuroda
失敗から学ぶAndroid設計話
by
chigichan24
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
by
U-dai Yokoyama
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
by
Koichiro Matsuoka
インフラCICDの勘所
by
Toru Makabe
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
by
Shin Ohno
Project Facilitation From Hiranabe
by
Yasui Tsutomu
デザインパターン
by
gaaupp
5G時代のアプリケーション開発とは - 5G+MECを活用した低遅延アプリの実現へ
by
VirtualTech Japan Inc.
正しいものを正しく作る塾-設計コース
by
増田 亨
ユーザーストーリー駆動開発で行こう。
by
toshihiro ichitani
Viewers also liked
PDF
Model View Presenter for Android
by
shinnosuke kugimiya
PDF
BigQuery勉強会 Standard SQL Dialect
by
Ken Morishita
PDF
Docker勉強会2017 実践編 スライド
by
Shiojiri Ohhara
PDF
Fighting history of CGFloat in Swift
by
Hirohito Kato
PDF
A4でまとめるClean architecture概要
by
Hirohito Kato
PPT
プログラミングで言いたい聞きたいこと集
by
tecopark
PPTX
Visual studioとそのライバル
by
Tadahiro Ishisaka
PDF
Digitization-software is eating the world
by
Kenji Hiranabe
PDF
160625 cloud samurai_adds_migration_160625
by
wintechq
PDF
Rdra in 東京
by
Zenji Kanzaki
PDF
デザイン・制作をはじめる前に 取り組む事
by
kenji goto
PDF
HTML5 Conference 2013 HybridCast
by
Satoshi Shoda
PDF
メガネ型デバイスの未来について考える
by
Sho Okada
PDF
新規ビジネスデザイン研修 DYA2 テキスト<サンプル版>
by
Satoru Itabashi
PDF
Jenkins実践入門 第二版 What's New
by
Masanori Satoh
PPTX
開発者の方向けの Sql server(db) t sql 振り返り
by
Oda Shinsuke
PDF
KPTAふりかえり体験研修のご紹介
by
ESM SEC
PPSX
Rdra4越境アジャイル
by
Zenji Kanzaki
PDF
ピクト図解(R)表記ルールver1.0
by
PICTO ZUKAI
PDF
Ad設計
by
Naoki Abe
Model View Presenter for Android
by
shinnosuke kugimiya
BigQuery勉強会 Standard SQL Dialect
by
Ken Morishita
Docker勉強会2017 実践編 スライド
by
Shiojiri Ohhara
Fighting history of CGFloat in Swift
by
Hirohito Kato
A4でまとめるClean architecture概要
by
Hirohito Kato
プログラミングで言いたい聞きたいこと集
by
tecopark
Visual studioとそのライバル
by
Tadahiro Ishisaka
Digitization-software is eating the world
by
Kenji Hiranabe
160625 cloud samurai_adds_migration_160625
by
wintechq
Rdra in 東京
by
Zenji Kanzaki
デザイン・制作をはじめる前に 取り組む事
by
kenji goto
HTML5 Conference 2013 HybridCast
by
Satoshi Shoda
メガネ型デバイスの未来について考える
by
Sho Okada
新規ビジネスデザイン研修 DYA2 テキスト<サンプル版>
by
Satoru Itabashi
Jenkins実践入門 第二版 What's New
by
Masanori Satoh
開発者の方向けの Sql server(db) t sql 振り返り
by
Oda Shinsuke
KPTAふりかえり体験研修のご紹介
by
ESM SEC
Rdra4越境アジャイル
by
Zenji Kanzaki
ピクト図解(R)表記ルールver1.0
by
PICTO ZUKAI
Ad設計
by
Naoki Abe
Similar to iOSやAndroidアプリ開発のGoodPractice
PDF
もう怖くないモバイルアプリ開発!
by
Toshiki Iga
PDF
もう怖くないモバイルアプリ開発!【デブサミ関西2014】
by
Toshiki Iga
PDF
効率的なアプリ開発のベストプラクティス
by
yayugu
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
by
Yusuke SAITO
PDF
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
by
masashi takehara
PPT
スマートフォンPKG開発成功
by
Akira Yamaguchi
PPTX
Orange Cube 自社フレームワーク 2015/3
by
信之 岩永
PPTX
20150326 ベストアプリの裏側勉強会
by
Kenta Kuwata
PDF
Eight iOS/Android開発の裏側
by
Kenta Kuwata
PDF
iOS アプリのメンテナンス性を高めるための基本的な考え方
by
kakegawa-atsushi
PDF
Human Interface Guidelines(iOS版) まとめ資料
by
Yuuki Noseda
PDF
#cmdevio2016 (レポート: F-2) iOS × Android 並行開発についてのトピック
by
cm_saito
PDF
Developers.IO / Developer day 2015 ”モバイル アプリ開発現場でよくある課題と対策”
by
Takeshi Fukasawa
PDF
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
by
irgaly
PDF
iQONの開発手法 at iQONエンジニアセミナー
by
Imamura Masayuki
PPTX
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
PDF
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
by
幸雄 村上
PDF
Swift勉強会2
by
Hikari Yanagihara
PDF
Android cleanarchitecture
by
Tomoaki Imai
PPTX
インタラクションデザインの考察
by
Hidetoshi Mori
もう怖くないモバイルアプリ開発!
by
Toshiki Iga
もう怖くないモバイルアプリ開発!【デブサミ関西2014】
by
Toshiki Iga
効率的なアプリ開発のベストプラクティス
by
yayugu
iPhoneアプリ開発の歩き方〜Swift編〜
by
Yusuke SAITO
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
by
masashi takehara
スマートフォンPKG開発成功
by
Akira Yamaguchi
Orange Cube 自社フレームワーク 2015/3
by
信之 岩永
20150326 ベストアプリの裏側勉強会
by
Kenta Kuwata
Eight iOS/Android開発の裏側
by
Kenta Kuwata
iOS アプリのメンテナンス性を高めるための基本的な考え方
by
kakegawa-atsushi
Human Interface Guidelines(iOS版) まとめ資料
by
Yuuki Noseda
#cmdevio2016 (レポート: F-2) iOS × Android 並行開発についてのトピック
by
cm_saito
Developers.IO / Developer day 2015 ”モバイル アプリ開発現場でよくある課題と対策”
by
Takeshi Fukasawa
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
by
irgaly
iQONの開発手法 at iQONエンジニアセミナー
by
Imamura Masayuki
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
by
幸雄 村上
Swift勉強会2
by
Hikari Yanagihara
Android cleanarchitecture
by
Tomoaki Imai
インタラクションデザインの考察
by
Hidetoshi Mori
iOSやAndroidアプリ開発のGoodPractice
1.
iOS/Androidアプリ開発の Good Practice 2015年7月 ゆめみ 森下 1
2.
はじめに • ゆめみ内でのiOS/Androidアプリ開発におけるPractice(実践・慣習)を まとめたものです • 書きかけなので随時更新していきます 2
3.
用語の整理 基本的な単語や、ゆめみ内で使う特殊な単語の定義もあるので整理しておきます 3
4.
プラットフォーム別の用語とこの資料の表記 iOSのclass, protocol Androidのclass,
interface この資料の表記 AppDelegate/UIApplication Application Application -‐ Activity Activity UIViewController Fragment ViewController (略してVC) NSUserDefaults Preference Preference 4
5.
同期/非同期 な呼び出し-‐リターン • 「同期的な呼び出し-‐リターン」 •
呼び出し終了時に戻り値が戻ってくるタイプ • 構造上同期的であることが強制されている • 「非同期的な呼び出し-‐リターン/通知」 • callbackや通知などで制御が戻ってくるタイプ • その制御がいつ戻ってくるかは実はわからない • 呼び出し終了前に呼ばれるケースも有り得ることには注意 5
6.
非同期の「Callback的」「通知的」 の違い 6
7.
非同期の「Callback的」「通知的」 の違い 7
8.
非同期の「Callback的」「通知的」 の違い • 「通知的」な方には、
add/remove というような 明示的な通知の「受け取り開始」「受け取り解除」がある • 「callback的」な方では、「解除」は難しい • ライフサイクルが短いInstanceは「通知」を使うのが基本になる • そうしないと、自分が無効な状態なのにcallbackを受け取ってしまう • 例) Fragment-‐>Model, ViewController-‐>Model • ライフサイクルが必ず長いInstanceはCallbackでもOK • 例) Model -‐> API, Service -‐> API, Model -‐> Data系 8
9.
必須Practice 9
10.
必須Practice • Gitによるバージョン管理 • Crashレポートツールの導入 •
Debug/Release や 環境別のビルドの切換をコードを書き換えないで 行うこと 10
11.
Gitによるバージョン管理 • ソースコードのバージョン管理にはGitを使っています • ブランチの切りやすさや、大規模でも高速である、など利点が大きい •
基本ルール • 少なくともリリースしたプロダクトは過去の任意のバージョンを再現可能なこと • 自動生成されるものはCommitしない • .gitignore をちゃんと設定する • *.class や ビルドされたバイナリ等 • ビルドに必要な画像はOK、動画は・・・仕方ないときもある • Androidだと R.java などもコミット不要 • Git-‐Flow的なブランチ運用にする • master: リリースしたソースコードのブランチ (リリースしたらTAGを打つこと) • develop: 次期リリースするソースコードが合流するブランチ • feature/*: 特定の機能開発ブランチ。コミット単位でなるべく意味を持たせること。 11
12.
Crashレポートツールの導入 • リリース後の不具合を早急に発見するために必ず導入しましょう • ゆめみでは
Crashlytics を標準的に使っています • https://try.crashlytics.com/ 12
13.
Debug/Release や 環境別のビルドの切換を コードを書き換えないで行うこと •
例えば、通信先host名, API Key, Log出力などの切換です ■標準的な実現方法 • Android • Gradle+BuildConfig+(環境変数) • iOS • #ifdef DEBUG + #defineなどのプリプロセッサ+定数定義 • 場合によっては、 *.h ファイルの動的な生成 13
14.
推奨Practice 14
15.
推奨Practice • 内部の基本アーキテクチャはMVPパターンに近いものにする • アプリケーションのアーキテクチャは徐々に発展させていく •
理想の開発に占める労力の割合は「View 80%」「その他 20%」 • 定数は「環境情報」「Configuration情報」「内部定数」に分ける 15
16.
ViewController 内部の基本アーキテクチャはMVPパターン Application Activity View View Entity Model Container (for DI) APIPreference ViewController Model DB/NoSQL プレゼンテーション層 ビジネス層 データ層 PresenterVCとPresenterはわ けない場合もある StateMachine StateMachine 通知的IF File/Cache set 複数のVCに跨る時がある 各種Container (for
DI) 16
17.
MVPパターン? • MVCパターンみたいなものだけど、ViewがModelを直接参照しない で、PresenterがModelの値をViewにセットする(ようなイメージ) • http://tech.recruit-‐mp.co.jp/mobile/android-‐architecture/ •
普通はViewがModelを直接参照しないので、この形式といえばこの 形式になっているはず • 大事なこと • 「Model」が存在すること • 「ViewController」は肥大化するので、Presenterの機能を分離する設計があ るということを知っておくこと 17
18.
MVPパターン、と言っても全体構成としては 色々あります http://tech.recruit-‐mp.co.jp/mobile/android-‐architecture/ より 18
19.
Modelってなんだ? • とりあえずこれを読んでみて欲しい • 「iOS/Androidアプリエンジニアが理解すべきModelの振る舞い」 •
http://www.slideshare.net/mokemokechicken/iosandroidmodel • 「プレゼンテーション層」から見れば、 • データのCRUDや処理を依頼できる「サーバ」みたいなレイヤー • 非同期のリターンは「通知」でもらう • Modelは非常に長命でContainerのようなDI機能からもらうイメージ • データや状態は公開されているが、カプセル化・抽象化されている • 安全な操作、状態の矛盾を防げるようにする 19※実際の名前はどうでも良い
20.
具体例 • Presentation層のAPI callback実装
→ Model通知実装 への書き換え • Android • https://github.com/mokemokechicken/android_refactor_training/blob/master/doc/exa mple_1.md 20
21.
アプリケーションのアーキテク チャは徐々に発展させていく 21
22.
アプリケーションのアーキテクチャは徐々に 発展させていく • アプリ開発においては次のようなライフサイクルを持つことが多い • 最初はViewだけのMockを作る •
次第に通信部分と連携するようになる • 徐々に仕様変更(View遷移、通信周り、キャッシュ周り)や微調整を行う 22
23.
最初はViewだけのMockを作る ViewController Application Activity View ViewViewControllerプレゼンテーション層 +(ダミーデータ) +(なんちゃってロジック) この時は、ビジネス層なんて要らない コアな画面を1つ2つちゃんと作って、 他はパワポの画像を貼っておく、とかで良い 標準パーツとか使わない方が 完成品とのイメージの差がなくてむしろ良い 機能ではなく、見た目のゴールを再現する 空いた時間でアーキテクチャの基本を試行錯誤しておく アーキテクチャのプロトタイプを内部で考える 23
24.
次第に通信部分と連携するようになる ViewController Application Activity View ViewViewControllerプレゼンテーション層 +(ダミーデータ) +(なんちゃってロジック) API通信機能 データ共有機能 データ操作機能 このまま拡張してはダメ、絶対。 ここで建て付けは整理すること。 ☓ ☓ ☓ ビジネスロジック☓ が、ここで注意 24
25.
次第に通信部分と連携するようになる ViewController Application Activity View View Entity Model Container (for DI) API ViewController Model プレゼンテーション層 ビジネス層 データ層 通知的IF +(なんちゃってロジック) API通信機能 データ共有・操作機能 +(ダミーデータ) VCをなるべく軽くする ダミーなどは残ることもある 機能単位にModelを作る set ビジネスロジック 25
26.
徐々に仕様変更や微調整を行う • 最初に(自分たちが)描いた図に近づいていくことになる • 「全部盛り」になったときのクラス構成をイメージして、開発者同士が共有 しておく •
そうすれば「もうここは次の設計ステージに移行した方がいいね」と一言で通じる • そうでないとなかなか議論がまとまらない • この辺りからReviewしたコードのみMerge OK、などのルールにすると良い かもしれない • 最初からそうでも良いですが • 人員に余裕がないと辛いですが 26
27.
理想の開発に占める労力の割合 27
28.
ViewController 理想の開発に占める労力の割合 Application Activity View View Entity Model Container (for DI) APIPreference ViewController Model DB/NoSQL プレゼンテーション層 ビジネス層 データ層 PresenterVCとPresenterはわ けない場合もある StateMachine StateMachine 通知的IF File/Cache set 80% 20% アピールポイント パターン化が難しい よく変更がある 自動化やパターン化容易 決まれば変更は少ない 28
29.
• 危険信号 • 簡単な遷移やUIの変更が難しい •
WiFiだと快適に動くのに3G回線だとすぐ固まる、落ちる • 画面がちらちらする。レイアウトが乱れている • よくある原因 • 画面ベースで開発しているため、画面の遷移や構成要素が変わると対応できない • 開発時はWifiで無計画に作っているので、非同期の問題に気がつかない • 要件や仕様を最低限満たすことに集中していて画面を見ていない。システム都合 で画面がおまけになっている • 解決する3つの手順 • 通信と表示制御を分離して整理する • これによりシステム都合で画面が制限されることが少なくなる • 画面単位でファイルを作るのではなく、機能単位になるように切り口を変え、パーツ に分解する • 隠れフラグ(static変数類、ローカルストレージ、ViewのIDや状態)を排除して、状態 管理をまとめる 29
30.
定数の管理 30
31.
定数は「環境情報」「Configuration情報」「内 部定数」に分ける • 環境情報: デプロイ先などで変わる値 •
dev1, staging1, staging2…, production などの環境 • 通信先URLなどのEndpoint • ID/PASS, SNSや外部サービスのAPI-‐Key • 署名の鍵 • Configuration情報: Release/Debugなどで変わる値 • Log Levelなどの値 • Debug機能のOn/Offなど • 内部の定数: 単純に内部で使っている定数 31
32.
環境情報 • 環境情報はビルドやデプロイのタイミングで注入できるのがベスト • 事前に数種類(dev用,
内部staging用, staging用, production用)定義してお いて、ビルド時に選択できるというのでも良い • Android • Gradle+ buildConfigField (+ 環境変数)などが便利 • iOS • config_dev.h, config_production.h などを事前に定義して、ifdefでimportを分ける • もしくは、 ビルド時に動的に.hを生成する 32
33.
Configuration情報 • 下記のような仕組みをまとめられるようなものを準備する • Android •
例えば、BuildConfig.DEBUGによって異なる値が返るような何かを作る • iOS • 例えば、#ifdef DEBUG などで異なる値が定義・returnされる何かを作る 33
34.
内部定数 • Android • static
public final で定数にするか、 getterで提供する • iOS • #define などで定義する 34
35.
具体例 • 環境情報・Configuration情報の書き方 • Android:
https://github.com/mokemokechicken/android_refactor_training/blob/maste r/doc/example_2.md 35
36.
実装が難しいので注意する点 36
37.
アプリケーションの起動時の処理 37 アプリの起動シーケンスは複雑になりやすい。 「初回起動時(ID取得・PushToken取得)」「2回目起動時」 「Homeから復帰」「Push通知やIntent/URL Schemaからの起動」 での分岐や、 初期データを入力しているか(誕生日とか)どうかで画面を分岐 データがDLされているか分岐 などがあり得る。 これらが非同期での処理になるので、実装が少しむずかしい。 → StateMachineを使うとかなり改善する →
気合で実装することもあるが、このロジックをActivityに持たせない方が良い
38.
ViewControllerの状態は複雑になりやすい 38 一つの画面(ViewController/Presenter)で 多数の非同期イベント(通信、UIイベント、Observeイベント)を制御するので。 → これもStateMachineを使うと簡潔になる
39.
アンチパターン よく見かけるものたち・・・ 39
40.
「Application/Activity/Fragment」や「AppDelegate/ViewController」に 他のObjectから参照されるような値・状態を持っている。 • static publicな何かになることが多い •
ViewControllerをsingletonにしてしまう人もいる ■ アンチパターン: 「いつも便利Global変数」 ■ 問題点 ■ 解決方法 何がいつ更新するかが発散していくので、保守性が著しく下がる。 厳密な状態管理が難しいので、不整合が起こりやすい。 ViewControllerはsingletonにしてはいけない! 「Model」を作る Viewの状態を共有したいなら、状態を「Presenter」に管理させ、Presenterを共有させる 40
41.
Application, BaseActivity, BaseViewControllerがどんどん多機能になっていく。 通信機能やデータ保存機能などが実装されている。 ■
アンチパターン: 「万能Baseクラス」「Frameworkクラス肥大化」 ■ 問題点 ■ 解決方法 ActivityやViewControllerは、そういう役割を持つべきではない。 通信機能を利用するために、 他のObjectから ViewControllerの参照が欲しくなり、 依存関係が破綻していく 余分な機能をApplicationやVCに持たせない。 他のレイヤーのClass(Model, API, DB)に実装する。 41
42.
1Methodが200行を超える。 (2000行を超えるものを見たことがある・・・) ■ アンチパターン: 「大作書きおろしメソッド」 ■
問題点 ■ 解決方法 非常に可読性や保守性が下がる。 単体テストをまず書くことができない。 設計を見なおして、分割する。 42
43.
同じ switch (mode/type/state)
{ case ... } が至る所にできる ■ アンチパターン: 「増殖switch」 ■ 問題点 ■ 解決方法 可読性、保守性がすごい速度で下がっていく。 mode/type/stateの追加・変更が難しい。 全てを把握しないとコードが読めなくなる。 「いつも便利Global変数」と合わさると絶大な破壊力になる。 modeやtypeなら: Object指向的な解法 stateなら: StateMachineの導入 43
44.
Activityがたくさんある Activityが消えることを考慮していない ■ Androidアンチパターン ■ 問題点 ■
解決方法 不具合が起こりやすい。 画面のViewはFragmentで管理する。(画面毎にActivityを作らない)。 端末のDeveloper Modeで Homeボタンを押したら Activityが必ず消えるOptionをOnに設定して開発する。 44
45.
他:警告・チェックポイント 45
46.
警告・チェックポイント • Viewの状態で、Presenterなどの処理がわかれている • If
(view.isEnable()) とか… • ViewController, Presenter から直接APIやPreferenceを参照している • 設計思想に反している • GAタグなどで(遷移元、遷移先)を記録するのは大変である • 仕様を調整してもらって、GAタグ(表示画面) にしてもらうのが吉 • そうでない場合は、かなり大きくその工数を見積もる必要がある ※良い方法があると良いですが 46
Download