SlideShare a Scribd company logo
初心者がDDDについて
説明してみる
KyotoLT Online 第27回
2022/8/19@オンライン
あっきー
自己紹介
2
● 株式会社KYOSO勤務
● 業務では主に、デバイス、クラウド、
フロントエンドなど幅広い開発を担当
● 最近は機械学習や画像認識も興味あり
● VTuber好き、オンラインゲーム好き
みなさんDDDって言葉を聞いたことありますか?
みなさんDDDって言葉を聞いたことありますか?
D(どうして)
D(だれも)
D(デスク片付けつけないの?)
の略です。
みなさんDDDって言葉を聞いたことありますか?
D(どうして)
D(だれも)
D(デスク片付けつけないの?)
の略です。
嘘です。
すみません。。。。
DDDって?
ドメイン駆動設計(Domain-Driven Design)の略
「ドメインモデルをソフトウェア開発の中心にすえ、コードやコミュニケーションを常にドメインモデルと一体化さ
せながら、ドメインモデルを反復的に深化させることでより価値の高いアプリケーションを生み出していこうと
する考え方」
「オブジェクト指向コミュニティの間で長年培われてきたドメインモデリングのノウハウやベストプラクティスを集
大成した、1つの設計思想/哲学」
引用:
DDD難民に捧げるDomain-Driven Designのエッセンス第1回 ドメイン駆動設計とは
https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap1.html
はい。
日本語で書かれていますが、意味不明ですよね
( ゚Д゚)( ゚Д゚)( ゚Д゚)( ゚Д゚)
システム作るのって難しくないですか?
どうやったら、高品質なシステムができるのか、そのアプローチの一つと
して、業務をモデルとして定義し、そのモデルを中心に考えてシステムを
作成していこう、という考え方です。
図は以下から引用:
ドメイン駆動設計のメリットと始め方 ~ 1章「DDDへの誘い」
https://codezine.jp/article/detail/9744?p=2
● 手続きベースだと変化に弱い
● 業務を深く理解して作成したモデ
ルをベースにシステムを作成す
ることで変化に強いシステムとな
る
業務をモデル(システムで表現
できるように抽象化)として表
現
汎化
ドメインモデルについて
有給付与、給与計算を考えた時に、従業員という概念を一つのまとまりとして考える。
では、従業員にはどんな属性情報が紐づくだろうか、その属性にはどんな制約があるだろうか
有休を付与する、という処理は従業員クラスに持たせるべきだろうか?それとももたせるべきではないだろう
か
永続化処理はどこに書くべきだろうか、例えば、従業員クラスにもたせるべきだろうか?
退職する、という処理があった場合、この処理はどこに持たせるべきだろうか?従業員クラスにもたせるべ
き?
DDDがカバーする領域
思想・哲学としてのDDD ...複雑になりがちなシステム開発にどう取り組むか。開発の考え方や進め方
設計戦略としてのDDD (戦略的DDD) ...ドメインモデリングに繋げるためのアプローチの方針(ドメインエキス
パートとの協調、ユビキタス言語、境界づけられたコンテキスト等
)
実装パターンとしてのDDD (戦術的DDD) ...ドメインモデルを実装レベルで体現するためのパターン(エンティ
ティ、リポジトリ、レイヤードアーキテクチャ等)
引用:DDDを実践するための手引き(概論・導入編)
https://zenn.dev/kohii/articles/b96634b9a14897
結局DDDって何?
「ドメインモデルをソフトウェア開発の中心にすえ、コードやコミュニケーションを常にドメインモデルと一体化さ
せながら、ドメインモデルを反復的に深化させることでより価値の高いアプリケーションを生み出していこうと
する考え方」
「ドメインモデルをソフトウェア開発の中心にすえ」
→例えば、手続きやサービスを開発の中心に据えるという
考えもできる(DDDとSOA(Service-Oriented Architecture))、また、DB設計におけるDOA(Data Oriented
Approach)やPOA(Process Oriented Approach)の考えとも近い部分もある
「コードやコミュニケーションを常にドメインモデルと一体化させながら」
→実装の中でドメインモデルと実際の
概念やユースケースと乖離が見つかれば両者を寄せていく
「ドメインモデルを反復的に深化させることでより」
→ドメインモデルは一度作って終わりではなく、常にアップ
デートしていくもの
オニオンアーキテクチャ
図は以下の記事から引用:
[DDD]ドメイン駆動 + オニオンアーキテクチャ概略
https://qiita.com/little_hand_s/items/2040fba15d90b93fc124
● 依存関係が一方向であり、コード修
正における影響範囲が明確である
● ドメインモデルを直接変更できない
ため、モデルの整合性が保証される
→ドメインモデルを中心にしたアーキテク
チャ
最後に
今日の発表だけではイメージが付きにくいと思います。
恐らく、最初オブジェクト指向を理解するときに、説明呼んでもちんぷんかん
ぷんだったのと同じ感じかなと。。。。。
少しでも興味が湧いた方は、ぜひ深く調べてみて下さい。
参考リンク
● DDD難民に捧げるDomain-Driven Designのエッセンス第1回 ドメイン駆動設計とは
○ https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap1.html
● DDD難民に捧げるDomain-Driven Designのエッセンス第2回 DDDの基礎と実践
○ https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap2.html#LayeredArchitecture
● DDD難民に捧げるDomain-Driven Designのエッセンス第3回 大規模なプロジェクトへの適用
○ https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/chap3.html#HighlightedCore
● 「IDDD本から理解するドメイン駆動設計」連載一覧
○ https://codezine.jp/article/corner/655
● DDDを実践するための手引き(概論・導入編)
○ https://zenn.dev/kohii/articles/b96634b9a14897
●

More Related Content

Similar to KyotoLT_Online_27.pdf

ドメイン駆動開発 勉強会 ①
ドメイン駆動開発 勉強会 ①ドメイン駆動開発 勉強会 ①
ドメイン駆動開発 勉強会 ①
Kakeru Kikuchi
 
WEBデザイナーのためのエディタ入門 先生:金澤 直毅
WEBデザイナーのためのエディタ入門 先生:金澤 直毅WEBデザイナーのためのエディタ入門 先生:金澤 直毅
WEBデザイナーのためのエディタ入門 先生:金澤 直毅
schoowebcampus
 
Webデザイナーのためのエディタ入門
Webデザイナーのためのエディタ入門Webデザイナーのためのエディタ入門
Webデザイナーのためのエディタ入門
Naoki Kanazawa
 
これから始める Windows io t core
これから始める Windows io t coreこれから始める Windows io t core
これから始める Windows io t core
Masuda Tomoaki
 
Windowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-lt
Windowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-ltWindowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-lt
Windowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-ltTomokazu Kizawa
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
Yukei Wachi
 
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...tkawashita
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
増田 亨
 
エンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流についてエンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流について
tatsuya mazaki
 
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したいソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
Yukio Saito
 
【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」
【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」
【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」
Kent Ishizawa
 
DDのはなし【勉強会資料】
DDのはなし【勉強会資料】 DDのはなし【勉強会資料】
DDのはなし【勉強会資料】
株式会社キャッチアップ
 
Live2Dの描画の裏側の話
Live2Dの描画の裏側の話Live2Dの描画の裏側の話
Live2Dの描画の裏側の話
Naoki Aso
 
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!uka yare
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
A AOKI
 
Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
Braindots-開発秘話- Cocos2d-x3.5 開発事例 -Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
和樹 川端
 
「攻めのIt」を実現するアーキテクチャーとdev opsの関係
「攻めのIt」を実現するアーキテクチャーとdev opsの関係「攻めのIt」を実現するアーキテクチャーとdev opsの関係
「攻めのIt」を実現するアーキテクチャーとdev opsの関係
Yukei Wachi
 
20200525 discord explain
20200525 discord explain20200525 discord explain
20200525 discord explain
翼 宮崎
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
Mao Ohnishi
 
Cocos2d-x 3D Extension
Cocos2d-x 3D ExtensionCocos2d-x 3D Extension
Cocos2d-x 3D Extension
Tomoaki Shimizu
 

Similar to KyotoLT_Online_27.pdf (20)

ドメイン駆動開発 勉強会 ①
ドメイン駆動開発 勉強会 ①ドメイン駆動開発 勉強会 ①
ドメイン駆動開発 勉強会 ①
 
WEBデザイナーのためのエディタ入門 先生:金澤 直毅
WEBデザイナーのためのエディタ入門 先生:金澤 直毅WEBデザイナーのためのエディタ入門 先生:金澤 直毅
WEBデザイナーのためのエディタ入門 先生:金澤 直毅
 
Webデザイナーのためのエディタ入門
Webデザイナーのためのエディタ入門Webデザイナーのためのエディタ入門
Webデザイナーのためのエディタ入門
 
これから始める Windows io t core
これから始める Windows io t coreこれから始める Windows io t core
これから始める Windows io t core
 
Windowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-lt
Windowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-ltWindowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-lt
Windowsストアアプリ開発ハンズオントレーニングに行ってきました 2012-09-22-lt
 
ドメイン駆動設計再入門
ドメイン駆動設計再入門ドメイン駆動設計再入門
ドメイン駆動設計再入門
 
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
20140115 potato tips No.3 Android App Test Development Driven and Jenkins CI ...
 
ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】ドメイン駆動設計とは何か 【入門編】
ドメイン駆動設計とは何か 【入門編】
 
エンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流についてエンジニアとデザイナーの技術交流について
エンジニアとデザイナーの技術交流について
 
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したいソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
ソースが書けなくてもAndroidアプリをクリック(GUI)開発したい
 
【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」
【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」
【14-E-7】Technology Enterprise Development「悪ふざけに関する真面目な話」
 
DDのはなし【勉強会資料】
DDのはなし【勉強会資料】 DDのはなし【勉強会資料】
DDのはなし【勉強会資料】
 
Live2Dの描画の裏側の話
Live2Dの描画の裏側の話Live2Dの描画の裏側の話
Live2Dの描画の裏側の話
 
磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!磯野ー!Dartやろうぜー!
磯野ー!Dartやろうぜー!
 
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
Braindots-開発秘話- Cocos2d-x3.5 開発事例 -Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
Braindots-開発秘話- Cocos2d-x3.5 開発事例 -
 
「攻めのIt」を実現するアーキテクチャーとdev opsの関係
「攻めのIt」を実現するアーキテクチャーとdev opsの関係「攻めのIt」を実現するアーキテクチャーとdev opsの関係
「攻めのIt」を実現するアーキテクチャーとdev opsの関係
 
20200525 discord explain
20200525 discord explain20200525 discord explain
20200525 discord explain
 
20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発20151110 ドメイン駆動設計によるサービス開発
20151110 ドメイン駆動設計によるサービス開発
 
Cocos2d-x 3D Extension
Cocos2d-x 3D ExtensionCocos2d-x 3D Extension
Cocos2d-x 3D Extension
 

More from hiroya akita

はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45
hiroya akita
 
Python 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみるPython 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみる
hiroya akita
 
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回KyotoLT(Online) 第26回
KyotoLT(Online) 第26回
hiroya akita
 
AppSync導入のすすめ
AppSync導入のすすめAppSync導入のすすめ
AppSync導入のすすめ
hiroya akita
 
みんなのPython勉強会#62
みんなのPython勉強会#62みんなのPython勉強会#62
みんなのPython勉強会#62
hiroya akita
 
はんなりpython#32
はんなりpython#32はんなりpython#32
はんなりpython#32
hiroya akita
 
Hannari python#27
Hannari python#27Hannari python#27
Hannari python#27
hiroya akita
 
変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?
hiroya akita
 
みんなのはんなりPython勉強会
みんなのはんなりPython勉強会みんなのはんなりPython勉強会
みんなのはんなりPython勉強会
hiroya akita
 
Pythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったPythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だった
hiroya akita
 
Lt debian 20190526
Lt debian 20190526Lt debian 20190526
Lt debian 20190526
hiroya akita
 

More from hiroya akita (11)

はんなりPython #45
はんなりPython #45はんなりPython #45
はんなりPython #45
 
Python 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみるPython 3.10の新機能を 俯瞰してみる
Python 3.10の新機能を 俯瞰してみる
 
KyotoLT(Online) 第26回
KyotoLT(Online) 第26回KyotoLT(Online) 第26回
KyotoLT(Online) 第26回
 
AppSync導入のすすめ
AppSync導入のすすめAppSync導入のすすめ
AppSync導入のすすめ
 
みんなのPython勉強会#62
みんなのPython勉強会#62みんなのPython勉強会#62
みんなのPython勉強会#62
 
はんなりpython#32
はんなりpython#32はんなりpython#32
はんなりpython#32
 
Hannari python#27
Hannari python#27Hannari python#27
Hannari python#27
 
変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?変数の重要度ってどうやったらわかるん?
変数の重要度ってどうやったらわかるん?
 
みんなのはんなりPython勉強会
みんなのはんなりPython勉強会みんなのはんなりPython勉強会
みんなのはんなりPython勉強会
 
Pythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だったPythonでも型をつけたいだけの人生だった
Pythonでも型をつけたいだけの人生だった
 
Lt debian 20190526
Lt debian 20190526Lt debian 20190526
Lt debian 20190526
 

KyotoLT_Online_27.pdf