Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Androidアプリ開発にクリーン
アーキテクチャを取り入れよう
(OSS編)
2016/02/25
notice,inc.
http://www.notice.co.jp/
@notice_inc
アーキテクチャ編の復習
質問がありましたので、ディスカッションしておきましょう。
Q.1 「オニオンアーキテクチャと同じくたまねぎのようなレイヤー構成になっているが、その意味は?」
Domain Modelをコアとしたアーキテクチャだからです。...
Day1 Keynote in DroidKaigi 2016
これ見てくれたら、今日は話すことなし。
「OSSの動向を捉えた実装方針」
https://speakerdeck.com/wasabeef/day1-keynote-
in-dro...
開発環境
Android Studio
Eclipse+ADTはオワコン
新しいSDKを使うなら、Android Studioを選択。
Gradle※(build tool)でOSSを簡単にインポート。
※グラドルではないよ。グレイドル
Ret...
Binding/DI
ButterKnife – Jake Wharton
面倒なfindViewById()のボイラープレートを抹殺
@Bind(R.id.button) Button button
リスナーもbindできるよ。
@OnCli...
Networking
Okhttp3+Retrofit2 – Square/J.W.
API作成最適コンビ。Retrofit2はbeta4まできたね。
http://square.github.io/okhttp/
http://square....
Reactive eXtentions/Promise
RxJava/RxAndroid/RxBinding
Rxbinding – Jake Wharton
TextViewの入力文字列を文字列があるかどうかの真偽値に変換(map)して、
サ...
View/Presenter
Mortar(モルタル) - Square
Bundleサービスを提供してくれる。
永続化できるViewPresenterが利用できる。
Dagger2と相性よし。
Flow/Path – Square
Fragm...
Database
Realm(レルム)
 SQLiteの代替データベース。ActiveRecordのように利用できる。
 autoincrementなし。offset,limitなし。cascadingもなし。
 SQLをガンガン使いたい...
Others
Gson(ジーサン) - Google
Json-POJO間をシリアライズ・デシリアライズする。
Timber(ティンバー) - Jake Wharton
ログファサードとして利用できる。
Logと違って、フォーマットできる。
T...
Testing
ActivityInstrumentationTestCase2
• ユニットテストでアクティビティが必要なら、こ
のクラスを継承して、Activityのユニットテスト
ができます。
• 非同期APIのテストは、CountDon...
Upcoming SlideShare
Loading in …5
×

Androidアプリ開発にクリーンアーキテクチャを取り入れよう (OSS編)

1,314 views

Published on

アーキテクチャ編の続編。クライアント企業様向け資料をアップロードしています。

Published in: Software
  • Be the first to comment

Androidアプリ開発にクリーンアーキテクチャを取り入れよう (OSS編)

  1. 1. Androidアプリ開発にクリーン アーキテクチャを取り入れよう (OSS編) 2016/02/25 notice,inc. http://www.notice.co.jp/ @notice_inc
  2. 2. アーキテクチャ編の復習 質問がありましたので、ディスカッションしておきましょう。 Q.1 「オニオンアーキテクチャと同じくたまねぎのようなレイヤー構成になっているが、その意味は?」 Domain Modelをコアとしたアーキテクチャだからです。 上下ではなく、コア(interface)を実装(implement)が包み込んでいく(DI)メタファ。 Q.2 「データベースは、下位層ではなく外界とすれば、いいのでは?」 The Onion Architecture - Jeffrey Palermo http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ その通り! “The database is not the center. It is external. ” じゃあ、センターはなに? “Remember that the Domain Model is the very center.”
  3. 3. Day1 Keynote in DroidKaigi 2016 これ見てくれたら、今日は話すことなし。 「OSSの動向を捉えた実装方針」 https://speakerdeck.com/wasabeef/day1-keynote- in-droidkaigi-2016 でも、お仕事します。 クリーンアーキテクチャを支える OSSのご紹介
  4. 4. 開発環境 Android Studio Eclipse+ADTはオワコン 新しいSDKを使うなら、Android Studioを選択。 Gradle※(build tool)でOSSを簡単にインポート。 ※グラドルではないよ。グレイドル Retrolambda(レトロラムダ) Android Studioなら、SAM(Single Abstract Method)型はlambdaで書けるけど、 Retrolambda(backport tool)を使うとJava8のlambdaで書ける。 SAM型なら、こんなに簡単に書ける。 before: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { … } } after: button.setOnClickListener(v -> { … });
  5. 5. Binding/DI ButterKnife – Jake Wharton 面倒なfindViewById()のボイラープレートを抹殺 @Bind(R.id.button) Button button リスナーもbindできるよ。 @OnClick(R.id.submit) public void submit(View view) Dagger2 – Google/Square Component/Module単位にDIできる。 使ってみたけど正直、難解 バターナイフではケガしないが、短剣は危険(笑)
  6. 6. Networking Okhttp3+Retrofit2 – Square/J.W. API作成最適コンビ。Retrofit2はbeta4まできたね。 http://square.github.io/okhttp/ http://square.github.io/retrofit/ 拙記事:「Retrofit2のRxJavaCallアダプタを試す」 beta<=2での話。 http://qiita.com/notice_inc/items/74a7e98b54dd2838c559 Picasso(ピカソ) - Square 画像ダウンロード・キャッシュ Volley(ボレー) - Google HTTPクッキーの扱いにバグがあるんで、セッション使うアプリはやめといたほうがいいよ。 自分でHttpStackつくれってよ。えぇ、これ仕様?? 特にLaravelは、セッションキー以外にXSRFトークンがクッキーされるんで、つぶしてしまいます。 弊社では独自パッチして使ったよ(非公開)。 NetworkResponse does not support multiple cookies https://github.com/mcxiaoke/android-volley/issues/87
  7. 7. Reactive eXtentions/Promise RxJava/RxAndroid/RxBinding Rxbinding – Jake Wharton TextViewの入力文字列を文字列があるかどうかの真偽値に変換(map)して、 サーチボタンを活性・不活性する。 @Bind(R.id.text) TextView textView; @Bind(R.id.search) Button search; RxTextView.textChanges(textView) .map(text -> text.length() > 0) .subscribe(enabled -> search.setEnabled(enabled)) jdeferred/android-promise まだ、使ったことないけど、試してみるか。
  8. 8. View/Presenter Mortar(モルタル) - Square Bundleサービスを提供してくれる。 永続化できるViewPresenterが利用できる。 Dagger2と相性よし。 Flow/Path – Square FragmentManagerの代替。 スクリーン・画面遷移を抽象化したフレームワーク。 ヒストリーも扱える。 Mortarとあわせて、画面状態・画面スタックを保存・復元。 リクリエーション地獄から解放される。 実際使うには、もう少し内部の理解が必要そう。 Flow and Mortar – Thorben Primke https://realm.io/jp/news/using-flow-mortar/
  9. 9. Database Realm(レルム)  SQLiteの代替データベース。ActiveRecordのように利用できる。  autoincrementなし。offset,limitなし。cascadingもなし。  SQLをガンガン使いたいなら、止めた方がいい。  Realmエンティティのメンバへの代入が即データベースに反映する (トランザクション必要)。便利だか、逆に切り離したいとき不便。そ もそも、エンティティをモデルとして利用すべきではない(でも、面 倒だし)。  iOS/Swiftでも使えるが、Objective-Cが混在すると、Objective-C版し か使えないのが、残念。 いまんとこ、Objective-C版しか使ったことないけど。
  10. 10. Others Gson(ジーサン) - Google Json-POJO間をシリアライズ・デシリアライズする。 Timber(ティンバー) - Jake Wharton ログファサードとして利用できる。 Logと違って、フォーマットできる。 Timber.d(“[%s] %d”, “hoge”, n) Logクラスを使うと、リリース時のログ抑制ができなくなる。 拙記事:「アンドロイドアプリのログ出力にTimber+Log4Jを使う」 http://www.notice.co.jp/archives/3852
  11. 11. Testing ActivityInstrumentationTestCase2 • ユニットテストでアクティビティが必要なら、こ のクラスを継承して、Activityのユニットテスト ができます。 • 非同期APIのテストは、CountDonwLatchを利 用してウェイトします(ウェイトクラス作成)。

×