Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
日経電子版 for Androidにおける ドメインレイヤ(ユースケース)の実装方針について
Search
yokomii
September 13, 2025
Programming
32
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
日経電子版 for Androidにおける ドメインレイヤ(ユースケース)の実装方針について
yokomii
September 13, 2025
More Decks by yokomii
See All by yokomii
Navigation 2 を 3 に移行する(予定)ためにやったこと
yokomii
0
2.1k
Riveで公式犬をインタラクションする
yokomii
0
450
Rich UI implementation examples using Jetpack Compose (Jetpack Composeを活用した強力なUI表現の実装実例)
yokomii
0
18
Other Decks in Programming
See All in Programming
[DroidKnights 2026] Workflow AX: From Auto-Documented Policies to E2E Testing
raeminkang
0
350
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
260
クラウドエージェントは、 何がそんなに便利なのか / what makes cloud agents so useful
rkaga
5
670
パスワード再設定メールのURLについて知っておこう
uyuki234
0
210
AIが生成したコードは読むべきか?抽象化設計とコードの品質保証 / abstraction-design-and-quality
minodriven
14
8.2k
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
260
Modernizing iOS Apps
seyfoyun
0
150
SODA - FACT BOOK(JP)
sodainc
1
40k
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
130
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
320
AmebaブログはKMPから卒業します
kmars0605
0
310
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
120
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Music & Morning Musume
bryan
48
7.5k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
650
30 Presentation Tips
portentint
PRO
1
450
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
870
Building Applications with DynamoDB
mza
96
7.3k
Technical Leadership for Architectural Decision Making
baasie
3
620
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.8k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Transcript
2023/6/15 横山朝海(@yokomii) 日経電子版 for Androidにおける ドメインレイヤ(ユースケース)の実装方針について NIKKEI TECH TALK #8
1
2 ドメインレイヤ
ハッシュタグ #nikkei_tech_talk • クリーンアーキテクチャやオニオンアーキテクチャにおけるドメイン層のこ とではありません🙇 • Androidの推奨アーキテクチャガイドラインにおけるドメインレイヤです ◦ https://developer.android.com/topic/architecture/intro ◦
日経電子版 Androidアプリではこの推奨アーキテクチャを設計の基 本指針としています ドメインレイヤ 3
ハッシュタグ #nikkei_tech_talk Android 推奨アーキテクチャ 4 • 推奨アーキテクチャにおける共通原則 ◦ 関心の分離 ◦
永続データモデルによるUI操作 ◦ SSOT ◦ 単方向データフロー(UDF) • 上記共通原則を考慮した上で、2層(UI、データ) 以上のレイヤードアーキテクチャを推奨 ◦ ドメインレイヤはオプショナル
ハッシュタグ #nikkei_tech_talk データレイヤ 5 • アプリデータの作成、保存、変更のためのビジネ スロジック群 • データソース ◦
アプリとシステム(ネットワーク、ローカルDBな ど)間のデータの橋渡しをする • リポジトリ ◦ データ管理のためのビジネスロジックを有す る ◦ 上位レイヤにデータを公開する
ハッシュタグ #nikkei_tech_talk UIレイヤ 6 • データレイヤから取得したデータを表示するため のレイヤ • UI状態ホルダ(ViewModel) ◦
下位レイヤからデータの取得 ◦ UI状態の生成・保持 ◦ UI操作によって適切なビジネスロジックを呼 び出す • UI要素(View、Jetpack Compose) ◦ UIをレンダリング
ハッシュタグ #nikkei_tech_talk 🌟ドメインレイヤ 7 • UIレイヤとデータレイヤの間に位置するレイヤ • 複雑なビジネスロジックや、複数のUI状態ホルダ で再利用される単純なビジネスロジックをカプセル 化した「ユースケース」クラスを内包
ハッシュタグ #nikkei_tech_talk ユースケース 8 • ビジネスロジックをカプセル化したクラス ◦ 1ビジネスロジックにつき1クラスの単位で実 装 •
その他ガイドライン上の推奨事項 ◦ 命名規則 ▪ 動詞の現在形 + 対象 + UseCase ◦ ライフサイクルを持たない ▪ 毎回新しいインスタンスを生成 ▪ 状態(可変データ)を持たない ◦ メインセーフ
ハッシュタグ #nikkei_tech_talk ユースケース 9 • ユースケースクラスを設ける利点 ◦ 共通ロジックをカプセル化することでボイラー プレートコードの回避 ◦
ロジックを外部クラスに切り出すことで、ケー スを使用するクラスの可読性の向上 ◦ 1クラスで1ビジネスロジックだけに集中するこ とでコードがシンプルになり、テストが書きや すい
ハッシュタグ #nikkei_tech_talk ユースケース 10 • システムの振る舞いの中核を担う、クリーンアーキテクチャのユースケースとは別物 • あくまでビジネスロジックをカプセル化することで、コードの複雑さを減らすことが目的 • 推奨事項がいくつか存在するが、様々なアプリに適用しやすいようにあえて厳格なルールは設けられ
ていない⇨自由実装になりがち • 👉 ガイドライン以上の細かな方針を各アプリで定めることが重要!! https://developer.android.com/jetpack/guide/domain-layer
11 日経電子版 for Androidにおける ユースケースの実装方針🧭 (推奨ケース・非推奨ケース)
12 🙆推奨ケース
ハッシュタグ #nikkei_tech_talk 🙆推奨ケースその1 13 複数リポジトリ処理を組み合わせる • (公式ガイドラインでも紹介されているケース) • 複数リポジトリからの取得値を別の値に変換して 返すなど
• ユースケースはUIレイヤとデータレイヤの間に位 置するので、UI状態ホルダとリポジトリの中継処 理をすることが多い
ハッシュタグ #nikkei_tech_talk 🙆推奨ケースその2 14 単一リポジトリ内の複数処理を組み合わせる • (このようなビジネスロジックは大体リポジトリ側で 吸収できるはず) • アプリ特有の関数の実行手順がある場合などに
ユースケースで吸収 ◦ 例えばWearとモバイルで共通のリポジトリを 用いているが、リトライ回数に違いがあるとき など
ハッシュタグ #nikkei_tech_talk 🙆推奨ケースその3 15 再利用されるビジネスロジック • (公式ガイドラインでも紹介されているケース) • UIレイヤで繰り返し発生するロジックをビジネスロ ジックとしてカプセル化する
• 公式ガイドではUtilクラスの代替としてユースケー スを用いることを推奨 ◦ Utilクラスは1クラスに複数ビジネスロジックが 含まれることで肥大化し煩雑になりがち ◦ 反面ユースケースは1クラス1ロジックかつ、ク ラス名によって処理内容が明瞭
16 🙅非推奨ケース
ハッシュタグ #nikkei_tech_talk 🙅非推奨ケースその1 17 リポジトリの関数を呼ぶだけのケース • UIからリポジトリの直接参照を禁止する場合に、 その中継を担うためのケース • リポジトリ参照を制限をするメリット
◦ UIでデータ取得する際に必ずユースケースを 経由するのでコードの一貫性が保たれる ◦ リポジトリに含まれる全ての関数がUIに公開 されなくなる
ハッシュタグ #nikkei_tech_talk 🙅非推奨ケースその1 18 リポジトリの関数を呼ぶだけのケース • 日経電子版のデータレイヤの特徴 ◦ 扱うデータの種類が多い ◦
リポジトリの関数の種類が多い ▪ サービスを長期運用する中でどんどん数 が増えていった • 関数呼び出しごとにクラスを設けた場合にクラス 数が膨大になりすぎる ◦ 先にデータやリポジトリ関数の整理が必要 • ↑のため、UI状態ホルダがリポジトリを直接参照す ることを制限せず、このようなケースは一旦不要と した
ハッシュタグ #nikkei_tech_talk 🙅非推奨ケースその2 19 モデルデータをUI状態に変換 • UI状態 = モデルデータをUIがレンダリングしやす い形式に加工した状態
◦ ref: https://developer.android.com/topic/archite cture/ui-layer#define-ui-state • UI状態をカプセル化したクラスはUIレイヤに定義 している ◦ 下層であるドメインレイヤからは参照できない • よってUI状態はUIレイヤの関心ごと⇨変換はUIレ イヤでやる
ハッシュタグ #nikkei_tech_talk 🙅非推奨ケースその3 20 Resultクラスを戻り値とするビジネスロジック • 当初、kotlin.Resultや自作のResultクラスで実行 結果をラップして値を返すようなケースを認めてい た •
←のようなコードでは、CancellationExceptionを 握りつぶしてしまうので呼び出し元のコルーチンが 正常に中断されなくなる • 意図しないキャンセル例外の握りつぶしを防ぐた めにResultクラスの利用は非推奨とした ◦ FYI: kotlin-resultには runSuspendCatching()というこの問題を回避 する仕組みがある
ハッシュタグ #nikkei_tech_talk • Androidの推奨アーキテクチャは幅広いアプリ(iOSも👍)に適用しやすいように、あえて厳密にルー ル化されていない部分がある ◦ そのため、各アプリでより詳細な方針を定めることが重要 • 今回紹介した方針はあくまで電子版における内容であり、全てのアプリにおいて最適解ではないこと をご留意ください
◦ 開発規模や要件によって最適な戦略を探る🧐 • アプリ独自の方針が公式ガイドラインの指針から大きく外れないことを推奨 ◦ 公式の情報はエンジニア間で共通認識となりやすいので、そこに揃えておくと読み解きやすい コードになる • 皆さんの開発してるアプリでのユースケースの実装方針もぜひ教えてください🫶 まとめ 21
22 ご清聴ありがとうございました🧏