More Related Content
Similar to Python におけるドメイン駆動設計(戦術面)の勘どころ (20)
More from Junya Hayashi (11)
Python におけるドメイン駆動設計(戦術面)の勘どころ
- 2. 自己紹介
● 林 淳哉 (@loose_agilist)
● GROOVE X でロボット開発
● 「実践ドメイン駆動設計」 Reviewer
● Qiita に DDD の記事書いてます
- 5. ドメイン駆動設計とは何か
● Eric Evans が提唱した設計手法
● モデリング技術 や オブジェクト指向設計 を抽象化し、
問題領域の抽出から、アーキテクチャ設計、モデリング、
実装に至る全工程を 一貫性のある体系 として整理したも
の
- 6. おすすめ書籍
エリック・エヴァンスのドメイン駆動設計 (2011)
“Domain Driven Design” Eric Evans (2003)
DDD 信者の聖書。その難解さから「鈍器」と呼ばれる。抽象度が高く、分厚いので
読み通すの大変だが、何回読んでも発見がある。ここで整理されている概念は、 10
年以上経った今も色褪せない。
実践ドメイン駆動設計 (2015)
“Implementing Domain Driven Design” Vaughn
Vernon (2011)
Evans 本の中身は本質を突いているが、その実践は容易でない。本書は、 Evans
本以降の10年間に発表された新しい開発技法を取り込みながら、 DDD の考え方
を実践に移すにはどうすれば良いかを記述した指南書。
※ 読むのに挫折しても、鈍器としてなら使えます
※
※ 翻訳レビューに参加しました。
- 9. ドメイン駆動設計の
「戦術」的側面
● アーキテクチャ
○ MVC, MVVM などの実装パターン
● ドメインモデル
○ エンティティ
■ 識別子を持つもの
○ 値オブジェクト
■ 値に型を与えたもの
○ サービス
■ 振舞いだけを提供するもの
○ リポジトリ
■ 永続化の仕組み
○ ファクトリ
■ オブジェクトを生成する仕組み
○ 集約
■ 不変条件を管理する単位
○ ドメインイベント
■ エンティティの変化を表現したイベント
● アプリケーション
○ コンテキスト全体の調整役
- 11. CQRSとは
● Command and Query Responsibility Segration
○ コマンドクエリ責務分離
○ Greg Young (2010)
● クエリ(副作用なし)とコマンド(副作用あり)を分離する考え方
○ 一貫性
■ 「コマンド」では整合性が求められる
■ 「クエリ」ではあまり気にしない
○ ストレージ
■ 「コマンド」では正規化してデータを保存したい
■ 「クエリ」では非正規化して効率的にデータを取得したい
○ スケーラビリティ
■ 「コマンド」は負荷が大きくなりづらい
■ 「クエリ」は負荷が大きくなりやすい
● ドメイン駆動設計は、コマンドと相性が良い
- 13. 悩みどころ
● 参考になる Python 実装がない
● ソースコードが肥大化しがち
● リポジトリの実装が複雑になってしまう
● 値オブジェクトの不変性を表現できない
● ヘキサゴナルアーキテクチャの使い方が分からない
● CQRS を適用したいけど、分からない
● 名前の付け方で悩む
● OR Mapper を使って良いのか悩む
- 18. ● 名前を大切にする
● テストを書く
● ヘキサゴナルアーキテクチャを活用する
● DI コンテナを活用する
● DBアクセスライブラリを活用する
● CQRS で読み出し専用ロジックを分離する
● 値オブジェクトを活用する
- 32. まとめ
● Python でドメイン駆動設計を実践しました
○ 名前の付け方を大切にしよう
○ テストを書こう
○ ヘキサゴナルアーキテクチャを使って
ドメインモデルと外部依存の実装を分離しよう
○ DIコンテナ(inject)で依存性を管理しよう
○ DB のアクセスライブラリを活用しよう
○ CQRS で読み出し専用ロジックを分離しよう
○ 値オブジェクトを活用しよう