第4回Kotlin勉強会 (https://connpass.com/event/44710/) で発表した資料です。
Ankoでコンポーネント指向2016/12/13第4回 Kotlin勉強会 @ Sansan@kkagurazaka
View Slide
自己紹介● @kkagurazaka● 普段はC++で画像処理とか● Kotlin lover● 趣味AndroiderRxProperty for Androidhttps://github.com/k-kagurazaka/rx-property-android
初LTです
コンポーネント指向● 近年Webフロント界隈で注目● プレゼンテーション層のパラダイム
普通のModel-View-PresenterView Presenter● ViewTemplate● UI State● Event Handling● View Controller
普通のModel-View-ViewModelView ViewModel● ViewTemplate● Event Handling● UI State
コンポーネント指向AllTasksComponentView ViewModelToolbarComponentView ViewModelTaskListComponentView ViewModelTaskComponentView ViewModelFABComponentView ViewModel
Reactの場合UI StateEvent HandlingView Template
なにが嬉しいのか?● 関心の分離View TemplateとPresentation Logicの分離は「技術による分離」● カプセル化1つのコンポーネントに関心事項が収まる● 再利用性一度定義したコンポーネントは使い回せる
Presentational / Container ComponentPresentational Container関心 どう見えるか どう動くかデータ読み込み親コンポーネントから与えられるモデルから取得データ書き込み親コンポーネントから与えられるコールバックを呼ぶモデルのロジックをキック内部状態 (なるべく)持たない 持つ
Presentational / Container ComponentContainerPresentationalContainerPresentationalPresentational PresentationalPresentational Presentational Presentational
Androidの場合は?
● Container Component○ Activity / Fragment○ イベントを受けてモデルをキックする、実質Presenter● Presentational Component○ (Custom) View / Composite View○ 親から受け取った値を表示するだけ● View Template○ layout.xml + DataBinding○ でコンポーネントのネストを実現
layout.xml + DataBindingの辛み● XMLそのものが辛い○ タイプセーフじゃない○ DataBinding周りの補完が不十分○ Javaコードと行ったり来たり● エラーの原因がわかりにくい○ Android Studioでうまくエラーメッセージ出ない経験ないですか?● Kotlinとの相性がイマイチ○ 大分マシにはなったものの、kaptは問題が起きやすい
Anko● KotlinでAndroidアプリ開発するのに便利な機能たくさん○ layout.xmlをKotlin上でDSLとして・・・○ 非同期処理を簡単に・・・○ SQLiteも簡単に・・・○ その他便利なユーティリティ多数● JetBrains製
Layout DSL● タイプセーフ・nullセーフ● 再利用性が高い● パース時間ゼロ● DataBinding不要⇒コンポーネント作れる!
やってみよう
1. AnkoComponentを継承してLayout DSL
2. 外部とのI/F定義ダサい・・・
Bound call references (since Kotlin 1.1)
Javaのgetter/setterから自動生成されたプロパティには未対応
気を取り直して・・・
3. DSL内で使える拡張関数を定義あとは同じようにコンポーネントを作っていくだけ!
まとめ● Ankoを使えばAndroidでもコンポーネント指向はできる● ただし、まだネタ枠○ タブレット対応どうする?○ アーキテクチャどうする?○ propsのバケツリレーどうする?
Thanks!