Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ankoでコンポーネント指向
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Keita Kagurazaka
December 13, 2016
Programming
1
8.2k
Ankoでコンポーネント指向
第4回Kotlin勉強会 (
https://connpass.com/event/44710/
) で発表した資料です。
Keita Kagurazaka
December 13, 2016
Tweet
Share
More Decks by Keita Kagurazaka
See All by Keita Kagurazaka
三者三様 宣言的UI
kkagurazaka
0
480
SELECT FOR UPDATEの話
kkagurazaka
0
450
Mobileアプリのアーキテクチャ設計法
kkagurazaka
2
1.5k
原理から完全理解するDagger Hilt Migration
kkagurazaka
1
1.9k
今後のJetpackでAndroid開発はこう変わる!
kkagurazaka
16
6.3k
外部SDKのViewにマスク処理をする方法と罠
kkagurazaka
0
1k
AWAのフルリニューアルを支えたアーキテクチャ
kkagurazaka
1
940
CQRS Architecture on Android
kkagurazaka
7
3.2k
suspending functionの裏側
kkagurazaka
3
460
Other Decks in Programming
See All in Programming
2026年 エンジニアリング自己学習法
yumechi
0
140
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
3.9k
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
200
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
730
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
430
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
CSC307 Lecture 03
javiergs
PRO
1
490
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
5
780
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
590
CSC307 Lecture 10
javiergs
PRO
1
660
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
230
The Invisible Side of Design
smashingmag
302
51k
Code Review Best Practice
trishagee
74
20k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Agile that works and the tools we love
rasmusluckow
331
21k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
37k
It's Worth the Effort
3n
188
29k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
62
50k
Transcript
Ankoでコンポーネント指向 2016/12/13 第4回 Kotlin勉強会 @ Sansan @kkagurazaka
自己紹介 • @kkagurazaka • 普段はC++で画像処理とか • Kotlin lover • 趣味Androider
RxProperty for Android https://github.com/k-kagurazaka/rx-property-android
初LTです
コンポーネント指向 • 近年Webフロント界隈で注目 • プレゼンテーション層のパラダイム
普通のModel-View-Presenter View Presenter • View Template • UI State •
Event Handling • View Controller
普通のModel-View-ViewModel View ViewModel • View Template • Event Handling •
UI State
コンポーネント指向 AllTasksComponent View ViewModel ToolbarComponent View ViewModel TaskListComponent View ViewModel
TaskComponent View ViewModel FABComponent View ViewModel
Reactの場合 UI State Event Handling View Template
なにが嬉しいのか? • 関心の分離 View TemplateとPresentation Logicの分離は「技術による分離」 • カプセル化 1つのコンポーネントに関心事項が収まる •
再利用性 一度定義したコンポーネントは使い回せる
Presentational / Container Component Presentational Container 関心 どう見えるか どう動くか データ読み込み
親コンポーネントから与え られる モデルから取得 データ書き込み 親コンポーネントから与え られるコールバックを呼ぶ モデルのロジックをキック 内部状態 (なるべく)持たない 持つ
Presentational / Container Component Container Presentational Container Presentational Presentational Presentational
Presentational Presentational Presentational
Androidの場合は?
• Container Component ◦ Activity / Fragment ◦ イベントを受けてモデルをキックする、実質Presenter •
Presentational Component ◦ (Custom) View / Composite View ◦ 親から受け取った値を表示するだけ • View Template ◦ layout.xml + DataBinding ◦ <include>でコンポーネントのネストを実現
layout.xml + DataBindingの辛み • XMLそのものが辛い ◦ タイプセーフじゃない ◦ DataBinding周りの補完が不十分 ◦
Javaコードと行ったり来たり • エラーの原因がわかりにくい ◦ Android Studioでうまくエラーメッセージ出ない経験ないですか? • Kotlinとの相性がイマイチ ◦ 大分マシにはなったものの、kaptは問題が起きやすい
None
Anko • KotlinでAndroidアプリ開発するのに便利な機能たくさん ◦ layout.xmlをKotlin上でDSLとして・・・ ◦ 非同期処理を簡単に・・・ ◦ SQLiteも簡単に・・・ ◦
その他便利なユーティリティ多数 • JetBrains製
Layout DSL • タイプセーフ・nullセーフ • 再利用性が高い • パース時間ゼロ • DataBinding不要
⇒コンポーネント作れる!
やってみよう
None
1. AnkoComponentを継承してLayout DSL
2. 外部とのI/F定義 ダサい・・・
Bound call references (since Kotlin 1.1)
Javaのgetter/setterから自動生成されたプロパティには未対応
気を取り直して・・・
3. DSL内で使える拡張関数を定義 あとは同じようにコンポーネントを作っていくだけ!
まとめ • Ankoを使えばAndroidでもコンポーネント指向はできる • ただし、まだネタ枠 ◦ タブレット対応どうする? ◦ アーキテクチャどうする? ◦
propsのバケツリレーどうする?
Thanks!