Enviar búsqueda
Cargar
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
•
10 recomendaciones
•
4,935 vistas
kan-notice
Seguir
アーキテクチャ編
Leer menos
Leer más
Software
Denunciar
Compartir
Denunciar
Compartir
1 de 15
Descargar ahora
Descargar para leer sin conexión
Recomendados
Android cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Hiroyuki Kusu
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
Kenichi Kambara
Jenkins導入ライブ
Jenkins導入ライブ
Hiasyoshi Suehiro
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
iOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotips
Yusuke Kita
Recomendados
Android cleanarchitecture
Android cleanarchitecture
Tomoaki Imai
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
【DroidKaigi2015】初学者に嬉しいAndroid開発環境(あとMVCとか)
Hiroyuki Kusu
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
Yuichi Adachi
Jenkinsを用いたAndroidアプリビルド作業効率化
Jenkinsを用いたAndroidアプリビルド作業効率化
Kenichi Kambara
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
Kenichi Kambara
Jenkins導入ライブ
Jenkins導入ライブ
Hiasyoshi Suehiro
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
MVPパターンによる設計アプローチ「あなたのアプリ報連相できてますか」
U-dai Yokoyama
iOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotips
Yusuke Kita
Kifの紹介
Kifの紹介
Keita Otsuka
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
Yu Nobuoka
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Makoto Yamazaki
Model View Presenter for Android
Model View Presenter for Android
shinnosuke kugimiya
AngularJSについて
AngularJSについて
昌生 高橋
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
Daisuke Yamashita
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
Naoto Kishino
Stac2014 石川
Stac2014 石川
Tatsuya Ishikawa
3D touch for iOS
3D touch for iOS
toyship
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターン
Hayashi Yuichi
Android6.0 RuntimePermissionの実装と注意点
Android6.0 RuntimePermissionの実装と注意点
Katsuki Nakatani
第5回業開中心会議
第5回業開中心会議
Kaoru NAKAMURA
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告
Osamu Shimoda
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Osamu Monoe
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
Takao Sumitomo
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
健一 辰濱
無料静的ホスティング × FaaSの話
無料静的ホスティング × FaaSの話
Shinichi Ueno
Más contenido relacionado
La actualidad más candente
Kifの紹介
Kifの紹介
Keita Otsuka
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
Yu Nobuoka
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Makoto Yamazaki
Model View Presenter for Android
Model View Presenter for Android
shinnosuke kugimiya
AngularJSについて
AngularJSについて
昌生 高橋
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
Yu Nobuoka
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
Daisuke Yamashita
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
Naoto Kishino
Stac2014 石川
Stac2014 石川
Tatsuya Ishikawa
3D touch for iOS
3D touch for iOS
toyship
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターン
Hayashi Yuichi
Android6.0 RuntimePermissionの実装と注意点
Android6.0 RuntimePermissionの実装と注意点
Katsuki Nakatani
第5回業開中心会議
第5回業開中心会議
Kaoru NAKAMURA
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告
Osamu Shimoda
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Osamu Monoe
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
Mori Shingo
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
Takao Sumitomo
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
La actualidad más candente
(20)
Kifの紹介
Kifの紹介
はてなにおける Android アプリのソフトウェアテスト
はてなにおける Android アプリのソフトウェアテスト
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Model View Presenter for Android
Model View Presenter for Android
AngularJSについて
AngularJSについて
AndroidJUnitRunner で JUnit 4 形式のテストに移行
AndroidJUnitRunner で JUnit 4 形式のテストに移行
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
バグのことは嫌いになってもXcodeのことは嫌いにならないでください。
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
Stac2014 石川
Stac2014 石川
3D touch for iOS
3D touch for iOS
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターン
Android6.0 RuntimePermissionの実装と注意点
Android6.0 RuntimePermissionの実装と注意点
第5回業開中心会議
第5回業開中心会議
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
SeleniumConf16 UK参加報告
SeleniumConf16 UK参加報告
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
テストがあればなんとかなる〜効率化までの道程〜
テストがあればなんとかなる〜効率化までの道程〜
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
Similar a Androidアプリ開発にクリーンアーキテクチャを取り入れよう
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
健一 辰濱
無料静的ホスティング × FaaSの話
無料静的ホスティング × FaaSの話
Shinichi Ueno
Origami studio (ver2) 勉強会 #2 - 仕組みやコンセプトを理解しよう
Origami studio (ver2) 勉強会 #2 - 仕組みやコンセプトを理解しよう
koji kobayashi
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Masaru Kimura
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
Mitsuru Ogawa
Reactive
Reactive
Akihiro Ikezoe
アプリリリース後に後悔しないための20のこと
アプリリリース後に後悔しないための20のこと
leverages_event
ARCore Update (Jan 2020)
ARCore Update (Jan 2020)
Hirokazu Egashira
AndroidでDIxAOP
AndroidでDIxAOP
nfc research
App Modernization for .NET
App Modernization for .NET
Yuta Matsumura
SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリー
Yukei Wachi
uGUIのRectTransformをさわってみた
uGUIのRectTransformをさわってみた
Keizo Nagamine
恊働ロボットCOROの開発における形式的仕様の適用事例
恊働ロボットCOROの開発における形式的仕様の適用事例
Life Robotics
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConView
Rakuten Group, Inc.
AppPot製品概要
AppPot製品概要
Ryohei Sogo
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Naoki Umehara
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
Atsushi Harada
CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発
アシアル株式会社
「Camelog」Android開発秘話
「Camelog」Android開発秘話
Shoya Tsukada
Androidのライブ壁紙について
Androidのライブ壁紙について
yoropan
Similar a Androidアプリ開発にクリーンアーキテクチャを取り入れよう
(20)
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
Sansan Tech Meetup Androidエンジニアが振り返る Google I/O
無料静的ホスティング × FaaSの話
無料静的ホスティング × FaaSの話
Origami studio (ver2) 勉強会 #2 - 仕組みやコンセプトを理解しよう
Origami studio (ver2) 勉強会 #2 - 仕組みやコンセプトを理解しよう
Smartphone ui:ux」 de na creative seminar vol.1 レポート
Smartphone ui:ux」 de na creative seminar vol.1 レポート
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
今後のWeb開発の未来を考えてangular jsにしました(拡大版)
Reactive
Reactive
アプリリリース後に後悔しないための20のこと
アプリリリース後に後悔しないための20のこと
ARCore Update (Jan 2020)
ARCore Update (Jan 2020)
AndroidでDIxAOP
AndroidでDIxAOP
App Modernization for .NET
App Modernization for .NET
SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリー
uGUIのRectTransformをさわってみた
uGUIのRectTransformをさわってみた
恊働ロボットCOROの開発における形式的仕様の適用事例
恊働ロボットCOROの開発における形式的仕様の適用事例
ネットワーク分散型フレームワークConView
ネットワーク分散型フレームワークConView
AppPot製品概要
AppPot製品概要
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Ricoh UCS for iPad でみる エンタープライズ アジャイル開発
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
CordovaでAngularJSアプリ開発
CordovaでAngularJSアプリ開発
「Camelog」Android開発秘話
「Camelog」Android開発秘話
Androidのライブ壁紙について
Androidのライブ壁紙について
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
1.
Androidアプリ開発にクリーン アーキテクチャを取り入れよう (アーキテクチャ編) 2016/02/18 notice,inc. http://www.notice.co.jp/ @notice_inc
2.
Androidアプリ開発の悩み FatAcitivity なんでもかんでもアクティビティに詰め込む Recreation アクティビティのリクリエーション時の再生処理 Fragment フラグメントの複雑なライフサイクルにともなうクラッシュ Asynchronous 非同期処理実装の困難さ
3.
アクティビティリクリエーションに関して configureChangeで回転を止めると、オリエンテー ション変更のイベントがとれず、画面をアダプティブ にできない(オリエンテーション固定アプリなら有 効)。 仕様検討するときに、可能な限り復元しなくていい ように考慮すべき。 フラグメントの注意点 ref. WTF what
the fuck! なんだこれ? http://ninjinkun.hatenablog.com/entry/2014/10/16/234611
4.
様々なアーキテクチャと開発手法 基礎 PofEAA(Patterns of Enterprise
Application Architecture) - Martin Fowler DDD(Domain Driven Design) - Eric Evans UCDD(Use Case Driven Design) MVCの発展形 MVVM(Model-View-ViewModel) MVP(Model-View-Presenter) テスティング TDD(Test Driven Development) - Kent Beck BDD(Behavior Driven Development) 非同期処理 FRP(Functional Reactive Programing) Rx(Reactive Extentions)
5.
クリーンアーキテクチャ The Clean Architecture http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html (1)ビジネスロジックとUIを分離する。 (2)全体が固有のフレームワークやライブラリに依存しない。 (3)データ永続化の手段に依存しない(database,filesystem)。 (4)ユニットテストしやすくする※1。 ※1APIテストケースはそのままAPI利用のサンプルになるので、 ドキュメントの代わりになる。
6.
クリーンアーキテクチャを取り入れよう 依存関係逆転の原則(DIP:the Dependency Inversion
Principle) interfaceを使って、オブジェクト間の依存関係を疎に保ち、IoCコンテナで結合する。 関心の分離(SoC: Separation Of Concerns) UIとビジネスロジック - まぜるな危険! ビジネスロジックとモデル - 特定のデータベースに依存しないように! IoC(DI)って、何が便利なの? ・ユニットテストが簡単。 ・モックオブジェクトでとりあえず、結合できるので、まだ未完成な部分の完成を待つことなく、開発できる。 ・初期化のボイラープレートがなくなる。 開発は、様々なオープンソースライブラリを利用することになるが、開発中に急に使えないと判断せざるえない場合が ある。 そんなときでも、代替のライブラリが利用できるようにしておくことが重要。 オープンソースを利用するなら、最悪は自分でソースコードを修正するぐらいの覚悟が必要。
7.
実際、どうやるの? 以下のようなレイヤーを構成する。 レイヤー アクティビティ ヴュー プレゼンタ インタラクション リポジトリ モデル/APIサービス
8.
アクティビティ Activityはアプリに一つだけ定義する。 各Viewを保持するコンテナとして利用する。 各画面はCustomViewまたはFragmentで実装する (CustomViewなら画面遷移アニメーションも自力実装)。 画面遷移はアクティビティ内で管理する(バックボタン 等も)。
9.
ヴュー Fragment,CustomViewからビジネスロジックを追い出す。 Button button =
(Button)v.findViewById(R.id.some_button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ここにだらだら、ロジックを書かず、プレゼンタへまかせる。 操作中の状態を保持するような変数も全てプレゼンタで定義する(ViewModel) presenter.doSomeAction(); } } ); // AndroidStudioなら、SAM(Single Abstract Method)型はlambdaで書ける。 // Retrolambda(backport tool)を使うとJava8のlambdaで書ける。
10.
プレゼンタ Viewを保持したPOJOオブジェクト。 プレゼンタはユーザーの操作から、具体的なビジネスロジックを実行し、その結果をViewに反映する。 一時的な表示上のデータ(チェック状態、選択状態、編集状態)はViewModelに保持する。 オリエンテーションチェンジで保存しておきたいViewModelは、 ActivityのonSaveInstanceStateでプレゼンタのsaveInstanceState()を呼び、 restoreInstanceState()で復元する。 Presenter ViewInteraction ViewModel
11.
インタラクション ビジネスロジックを実装するクラス。 設計(interface)と実装(implement)を分離し、DIできるようにしておく。 関連のあるユースケースをインタラクションクラスとして定義する。 インタラクションは、APIを呼び出してサーバからデータを取得し、必要 ならリポジトリを利用して、データを永続化する。 非同期実行インタラクションは終了ハンドラを実装するか、Rxのオブ ザーバーや、Promiseのようなタスクを返す。 インタラクションはプレゼンタからコールされる。
12.
リポジトリ モデルの操作を受け持つ。 インタラクションから呼ばれて、APIで取得したデータを を永続化したり、永続化されているデータを取り出す。 状態は保持しない。 データの永続化に関しては、モデルの実装に依存する。 インタラクションがモデルの実装に依存しないように、モ デルの実装を隠蔽する役目を持つ。
13.
APIサービス サーバサイドとの通信を受け持つ。 サーバサイドから提供される各APIごとにメソッドを実装する。 APIサービスは、Rxのオブザーバーや、Promiseのようなタスクを返す。 APIサービスの下位にHTTPクライアントライブラリの実装をおいて、A PIサービスのインタフェースはライブラリ実装に依存しない。 下位層のプロトコルがHTTPなら、メソッド(GET,POST)、ヘッダ(認証 キー、Cookieなど)を隠蔽する。
14.
モデル 基本的にプレーンなオブジェクト(POAA:Plain Old Android Object)で実装する。 具体的なデータベース実装に依存する部分を 少なくする。 永続化する必要がなくても、APIからの応答など をモデルで定義する(JSONのままでもいいかも)。
15.
ユニットテスト インタラクション以下の層は、JUnitなどで簡単 にテストできる。 モデル、リポジトリ、APIサービス、インタラクショ ンはGUIと結合するまでに、テストケースを記述 し、オールグリーンにしておく。
Descargar ahora