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
クリーンアーキテクチャのすすめ
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Taiga Sakaguchi
May 23, 2022
Programming
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
クリーンアーキテクチャのすすめ
Taiga Sakaguchi
May 23, 2022
More Decks by Taiga Sakaguchi
See All by Taiga Sakaguchi
トランクベース開発のすすめ
taigaskg
0
150
gRPC入門
taigaskg
0
290
Other Decks in Programming
See All in Programming
信頼性の目標を誰も求めてない
shubox
0
490
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
760
不幸な GC
chencmd
0
890
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
120
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
4
3.1k
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
130
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
160
AI時代に学ぶ 好きなルール 嫌いなルール Linter編
shorty5121
0
880
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
440
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
Featured
See All Featured
HDC tutorial
michielstock
2
850
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
680
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
450
Faster Mobile Websites
deanohume
310
32k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
980
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
30 Presentation Tips
portentint
PRO
1
390
KATA
mclloyd
PRO
35
15k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Transcript
クリーンアーキテクチャ のすすめ 2022/05/22
坂口 大河 Sakaguchi Taiga 高校教員 → Web系エンジニア(3年目) バックエンドエンジニア 自己紹介 Go, Java, Vue.js, Nuxt.js,
GCP, AWS @taiga_skg taigaskg
クリーンアーキテクチャ
クリーンアーキテクチャ...? ヘキサゴナルアーキテクチャ オニオンアーキテクチャ レイヤードアーキテクチャ MVVM
最重要ルール レイヤーに分割し、関心事が分離されていること。 ソースコードの依存性は、内側だけに向かっていること。 (依存性のルール) 1 2
関心事の分離とは ビジネスロジック UI DB 外部API フレームワーク ユースケース etc... Entities ビジネスルールをカプセル化。メソッドやデータ構造をもつ。
関心事 レイヤー Usecases アプリケーション固有のビジネスルール。システムの全てのユースケ ースが実装されている。Entityの入出力を制御し、ユースケースの目 標を達成。 Interface Adapters 外部サービス・DB ↔︎ UsecaseやEntity(内部)間で便利な形式にデ ータ変換。 Frameworks & Drivers DBやWeb FWなどFWやツールで構成。コードはあまり書かない。書く としても、ひとつ内側のレイヤーとやり取りするための変換コード。 SQL Controller
関心事の分離とは ビジネスロジック UI DB 外部API フレームワーク ユースケース etc... Entities ビジネスルールをカプセル化。メソッドやデータ構造をもつ。
関心事 レイヤー Usecases アプリケーション固有のビジネスルール。システムの全てのユースケ ースが実装されている。Entityの入出力を制御し、ユースケースの目 標を達成。 Interface Adapters 外部サービス・DB ↔︎ UsecaseやEntity(内部)間で便利な形式にデ ータ変換。 Frameworks & Drivers DBやWeb FWなどFWやツールで構成。コードはあまり書かない。書く としても、ひとつ内側のレイヤーとやり取りするための変換コード。 SQL Controller
関心事の分離とは ビジネスロジック UI DB 外部API フレームワーク ユースケース etc... Entities ビジネスルールをカプセル化。メソッドやデータ構造をもつ。
関心事 レイヤー Usecases アプリケーション固有のビジネスルール。システムの全てのユースケ ースが実装されている。Entityの入出力を制御し、ユースケースの目 標を達成。 Interface Adapters 外部サービス・DB ↔︎ UsecaseやEntity(内部)間で便利な形式にデ ータ変換。 Frameworks & Drivers DBやWeb FWなどFWやツールで構成。コードはあまり書かない。書く としても、ひとつ内側のレイヤーとやり取りするための変換コード。 SQL Controller
関心事の分離とは ビジネスロジック UI DB 外部API フレームワーク ユースケース etc... Entities ビジネスルールをカプセル化。メソッドやデータ構造をもつ。
関心事 レイヤー Usecases アプリケーション固有のビジネスルール。システムの全てのユースケ ースが実装されている。Entityの入出力を制御し、ユースケースの目 標を達成。 Interface Adapters 外部サービス・DB ↔︎ UsecaseやEntity(内部)間で便利な形式にデ ータ変換。 Frameworks & Drivers DBやWeb FWなどFWやツールで構成。コードはあまり書かない。書く としても、ひとつ内側のレイヤーとやり取りするための変換コード。 SQL Controller
関心事の分離とは ビジネスロジック UI DB 外部API フレームワーク ユースケース etc... Entities ビジネスルールをカプセル化。メソッドやデータ構造をもつ。
関心事 レイヤー Usecases アプリケーション固有のビジネスルール。システムの全てのユースケ ースが実装されている。Entityの入出力を制御し、ユースケースの目 標を達成。 Interface Adapters 外部サービス・DB ↔︎ UsecaseやEntity(内部)間で便利な形式にデ ータ変換。 Frameworks & Drivers DBやWeb FWなどFWやツールで構成。コードはあまり書かない。書く としても、ひとつ内側のレイヤーとやり取りするための変換コード。 SQL Controller
依存性とは 依存しているとは、別のモジュールで定義された変数、関数、エンティティなどを使っていること Module A Module B Call
依存性のルール ソースコードの依存性は、内側だけに向かっていること。 内側の円は、外側の円について何も知ることはない。 外側から内側のものを呼び出す事は可能。 → 変数、関数、クラス、エンティティ、フォーマットなど 外側から内側に影響を与えるべきでない。 ※ 4つの円はあくまで概要。必ずしも4つの円である必要なない。
境界を越えるには? ユーザー登録のユースケースを考える。 Entities層(最内側)
Usecases層(内側) Interface Adapters層(外側)
依存性逆転の原則(DIP) 上位レベルの方針の実装コードは、下位レベルの詳細の実装コー ドに依存すべきでなく、逆に詳細が方針に依存すべきであるとい う原則
依存性逆転の原則(DIP) 上位レベルの方針の実装コードは、下位レベルの詳細の実装コー ドに依存すべきでなく、逆に詳細が方針に依存すべきであるとい う原則 ⇒ 具象ではなく、抽象に依存すべき
インターフェース とは
依存性逆転の原則(DIP) 具象ではなく、抽象に依存すべき ⇒ インターフェースに依存すべき。 Call Class A (Struct) Class B(Struct)
Interface Implement Call Boundary 内側
Entities層(最内側)
Usecases層(内側) Interface Adapters層(外側)
フレームワーク非依存 テスト可能 UI非依存 データベース非依存 外部エージェント非依存 何が嬉しいのか システムをFWの制約で縛る のではなく、ツールとして 利用できる。 UI、DB、Web
Server、 etc...がなくてもビジネスル ールのテストができる。 システムの他の部分を変更 することなくUIを変更でき る。 ビジネスルールはDBに束縛 されず、置き換え可能。 ビジネスルールは、外側の インターフェースについて 何も知らない。
ご清聴ありがとうございました!