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
クリーンアーキテクチャと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
Porting a visionOS App to Android XR
akkeylab
0
680
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
350
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
730
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
180
AIともっと楽するE2Eテスト
myohei
8
3k
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
2
1.1k
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
3
410
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
470
Vibe Codingの幻想を超えて-生成AIを現場で使えるようにするまでの泥臭い話.ai
fumiyakume
9
4.1k
20250708_JAWS_opscdk
takuyay0ne
2
130
バイブコーディング超えてバイブデプロイ〜CloudflareMCPで実現する、未来のアプリケーションデリバリー〜
azukiazusa1
0
340
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
300
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Balancing Empowerment & Direction
lara
1
450
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
BBQ
matthewcrist
89
9.7k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
Done Done
chrislema
184
16k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
Rails Girls Zürich Keynote
gr2m
95
14k
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の参考になるもの⾒せて説明