【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する

1,777 views

Published on

2015/09/29(Tue)に開催された Roppongi.aar #1 (http://roppongi-aar.connpass.com/event/19478/) での発表資料です。

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,777
On SlideShare
0
From Embeds
0
Number of Embeds
690
Actions
Shares
0
Downloads
9
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

【Roppongi.aar #1】Activity/FragmentからControllerへ処理を委譲する

  1. 1. Activity/Fragment からControllerへ 処理を委譲する Hiroyuki Kusu ( @hkusu_ ) 株式会社ゆめみ 2015/9/29 Roppongi.aar #1
  2. 2. 自己紹介
  3. 3. DroidKaigiで発表の機会を頂きました。 http://www.slideshare.net/hiroyukikusu/droidkaigi2015androidmvc
  4. 4. 作ってます。 https://play.google.com/store/apps/details?id=jp.nailbook
  5. 5. 本題
  6. 6. ・Activity/Fragmentと同様に、ユーザ操作 を受けつけViewを操作するもの (ViewController と呼ぶ方がしっくりくるかも) ・Activity/Fragmentの責務をController に委譲することにより次のメリットがある - Activity/Fragmentをスリムに - Controllerの再利用 ・1つのActivity/Fragmentに対してController は複数あっても良い(意味ある単位で作る) 本スライドにおけるControllerの定義
  7. 7. Activity/ Fragment ControllerControllerController ViewViewView new Viewの操作 Viewの操作 ユーザ操作の 受けつけ ユーザ操作の 受けつけ
  8. 8. 具体的な実装 ※今回は Butter Knife (v7.0.1) を使います。
  9. 9. ※ Fragmentから利用する場合は onCreateView で生成したビュ ー をbindする ⇒ ButterKnife.bind(<Controller>, <ビュー>) @Activity Controllerインスタンスを作成し Butter Knife で Activity を bind
  10. 10. @Activity Activityのライフサイクルと Controllerのライフサイクルを 合わせる
  11. 11. @Controller Viewと変数の関連づけ Activityのライフサイクルと 同名のメソッドを用意して ライフサイクル毎の処理 を記述 各Viewのイベント ※ Controllerは普通のJavaのClass
  12. 12. Butter Knife の ちょっとしたTips
  13. 13. android-apt(https://bitbucket.org/hvisser/android-apt) を導入すると Butter Knife で生成されたコード が確認できたり、@onClickアノテーション等 を付加したメソッドに対するIDEによる警告 (未使用)が出なくなったりする。
  14. 14. (動的に決定される等の理由で)レイアウトに存 在しないかもしれないリソースは @Nullable アノテーションを付加しておくとエラーにな らない(Butter Knife のバージョンによっては @Optional かも)。
  15. 15. プラグインが便利
  16. 16. ほか
  17. 17. ・Dagger等でControllerをDIすると良いかも しれない(未検証) ・Controllerが増えることによりコールバック まわりが複雑になる問題 ⇒ EventBus ですこし楽になる (疎結合になりすぎないよう注意) これらはまたの機会に..
  18. 18. サンプルコードをGitHubに置きました。 https://github.com/hkusu/android-controller-delegate-sample
  19. 19. おわり
  20. 20. 予備スライド
  21. 21. https://github.com/greenrobot/EventBus から転載 EventBus
  22. 22. EventBus イベントクラスは普通のJavaのClassなのでデータ を詰め込める(参照型でも良いがリークに注意) @通知側
  23. 23. メインスレッド外のスレッドで投げたイベントを 簡単にメインスレッドで受け取ることも出来る EventBus 通知側(もしくは購読側)の内部クラスとしてイベントク ラスを作成すればどこから通知される (もしくはどこで 購読される)イベントであるかコード上わかりやすい ※通知と購読の関係が多対多になったら設計を見直す。またイベント を投げ合う関係もきっと良くない @購読側
  24. 24. Activity/ Fragment Controller Activity/FragmentからController 直にControllerクラスのインスタンスを参照する(interfaceを参照しても良 いがやりすぎ感) ControllerからActivity/Fragment ・interfaceで参照しコールバック (複数から利用されうる&抽象化の為) - Activity/Fragmentが死んでるかも&参照が残らないように注意 ・もしくはEventBus - Activity/Fragment ⇔ Controllerが互いを知ってると関係が複雑になる ので一方は通知的で良い - 必要あらば通知を受けてActivity/FragmentからControllerへアクセス

×