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
クリーンアーキテクチャとDDDで考えるソフトウェア設計/Think about softwar...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
yito
March 27, 2020
Programming
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
クリーンアーキテクチャとDDDで考えるソフトウェア設計/Think about software design
・10-15分ほどで発表する
・クリーンアーキテクチャとDDDの簡単な説明
・それらから考えたこととか
yito
March 27, 2020
Other Decks in Programming
See All in Programming
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
660
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
290
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
280
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
250
Agents on Rails - Rails at Scale 2026
irinanazarova
0
210
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
610
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
300
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
520
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
540
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
520
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
390
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
25k
It's Worth the Effort
3n
188
29k
Why Our Code Smells
bkeepers
PRO
340
58k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
730
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
310
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
540
Un-Boring Meetings
codingconduct
0
430
Docker and Python
trallard
47
4.2k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
830
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の参考になるもの⾒せて説明