Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
クリーンアーキテクチャとDDDで考えるソフトウェア設計/Think about softwar...
Search
yito
March 27, 2020
Programming
0
240
クリーンアーキテクチャとDDDで考えるソフトウェア設計/Think about software design
・10-15分ほどで発表する
・クリーンアーキテクチャとDDDの簡単な説明
・それらから考えたこととか
yito
March 27, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
120
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
450
AIコーディングエージェント(skywork)
kondai24
0
210
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
900
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
760
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
430
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
970
re:Invent 2025 トレンドからみる製品開発への AI Agent 活用
yoskoh
0
430
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
300
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
130
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
130
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
150
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Automating Front-end Workflow
addyosmani
1371
200k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
Utilizing Notion as your number one productivity tool
mfonobong
2
190
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
260
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
110
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Google's AI Overviews - The New Search
badams
0
870
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
Abbi's Birthday
coloredviolet
0
3.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Transcript
クリーンアーキテクチャとDDDで考えるソフトウェア設計
はじめに 最近、クリーンアーキテクチャ、DDDの本を読んだので、それについて考えたことなどの共有になります ソフトウェア設計とタイトルにありますが、クリーンアーキテクチャはソフトウェアアーキテクチャの話なので、ソフトウ ェア設計の⼀部分の話になりますね... ※ DDDは読み途中(2020/03/22 現在)
話すこと クリーンアーキテクチャについて DDD(ドメイン駆動設計)について 技術⼒とコスト まとめ
クリーンアーキテクチャについて(1/3) 引⽤元: The Clean Code Blog by Robert C. Martin
(Uncle Bob)
クリーンアーキテクチャについて(2/3) ソフトウェアアーキテクチャ設計の⼿法の⼀つで、コンポーネントに次の4つの依存関係のルールを引く エンティティ:ビジネスルールをカプセル化したもの ユースケース:エンティティへのデータの⼊出⼒・ビジネスルールの使⽤を制御 インターフェースアダプター:データのフォーマット変換(エンティティ→Web向け、など) フレームワークとドライバー:フレームワークやツール(DB, webフレームワーク, など) 円の外側は仕組みで内側は⽅針。依存関係は内側(上位レベルの⽅針)だけに向かっている 依存関係の境界線を引いて、依存性を内側に向けてあげることが⼤切なので、4つ以外認めないわけ
ではない
クリーンアーキテクチャについて(3/3) 例 引⽤元: Robert C.Martin ( 著), Clean Architecture 達⼈に学ぶソフトウェアの構造と設計,
出版社: KADOKAWA (2018/7/27)
クリーンアーキテクチャから考えられること なぜ依存関係のルールを引くのか → 依存関係の境界線を引くことで、ソフトウェアへの理解を容易にし、変更時の影響を分かりやす くする(クリーンなコードにする) ソフトウェア開発は基本的にチームで⾏う。なのでクリーンなコードであることが⼤切 クリーンではないコード、保守性が低いコードは開発スピードが遅く、コストが⾼くなる
DDD(ドメイン駆動設計)について(1/4) ドメインとは ユーザーがソフトウェアを適⽤する対象領域(ユーザーの何らか活動・関⼼に関係する部分) DDD(ドメイン駆動設計)とは ドメインをモデリングし、モデルを実装と結び付ける。ソフトウェアの中⼼に来るのがドメインモデルとなる設 計
DDD(ドメイン駆動設計)について(2/4) DDDの特徴(1/2) ユビキタス⾔語 ドメインエキスパート、開発者はお互いに理解できる⾔語でコミュニケーションをとる(それぞれの専⾨ ⽤語を使って議論しない) ドメインエキスパート:プロジェクトメンバ、ドメインの担当者。ユーザーと違い、その対象に関する深い 知識を持っている ドメインモデルはユビキタス⾔語に紐づく(ユビキタス⾔語の変更はモデルの変更) 設計に関する本質的な詳細はコード
DDD(ドメイン駆動設計)について(3/4) DDDの特徴(2/2) ソフトウェアの中⼼にいるのはドメイン(例:レイヤードアーキテクチャ) ユーザーインターフェース層 ユーザーに情報を表⽰する アプリケーション層 ドメインの使⽤を制御する ドメイン層 ビジネスの概念、状況に関する情報、ビジネスルールを表す インフラストラクチャ層
技術的機能を提供する(アプリのためのメッセージ送信など)
DDD(ドメイン駆動設計)について(4/4) 引⽤元: エリック・エヴァンス ( 著), エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践), 出版社:
翔泳社 (2011/4/9)
DDD(ドメイン駆動設計)から考えられること なぜドメインモデルを⽤意するのか → ユーザーの関⼼ごとと実装を結び付けるため。また、モデルにすることでドメインエキスパートと開発 者がお互いに理解しあえるため アプリの仕様に関しての⾷い違い、認識の差異を減らすことが⼤切 → バグの要因を減らす モデルをもとに実装するので、理解しやすいコードとなる モデルの要素=ユビキタス⾔語、アプリの概念がそのままコードとして存在する
技術⼒とコスト どんなエンジニア、チームでもクリーンアーキテクチャ/DDDでソフトウェア開発ができるか できない。各メンバーにある程度の設計⼒・技術⼒、選択した設計⼿法への理解が必要となる アプリの仕様との結び付き、依存関係について深く考えられた設計 → ある程度の設計⼒・技術⼒が必要 その逆で進めた場合 → ⾼い設計⼒・技術⼒は不要、保守・開発コストが⾼くなる クリーンアーキテクチャ、DDDだけが開発の選択肢だけではないので、チームで実現できる設計⼿法を探
すと良い
まとめ アプリの仕様を決める際は認識の差異をなるべく減らせると良い ソフトウェア設計では依存関係の境界線(依存性のルール、関⼼の分離)を引いてあげるとクリーンなコ ードになる 設計通りの実装をするにはチームに技術⼒が必要になる
参考 The Clean Code Blog by Robert C. Martin (Uncle
Bob) Robert C.Martin ( 著), Clean Architecture 達⼈に学ぶソフトウェアの構造と設計, 出版社: KADOKAWA (2018/7/27) 和⽥ 卓⼈(@t_wada), 質とスピード(2020 春版) / Quality and Speed 2020 Spring Edition, 2020/02/13 エリック・エヴァンス ( 著), エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発 の実践), 出版社: 翔泳社 (2011/4/9)
時間あったら DDDの参考になるもの⾒せて説明