DDDのメモ
概念
原本のエッセンス
[ 技術講座 ] Domain-Driven Designのエッセンス 第1回|オブジェクトの広場
[ 技術講座 ] Domain-Driven Designのエッセンス 第2回|オブジェクトの広場
[ 技術講座 ] Domain-Driven Designのエッセンス 第3回|オブジェクトの広場
IDDD本から理解するドメイン駆動設計一覧|CodeZine(コードジン)
DDD超入門(前編) - Domain-Driven Designの概要 - エンタープライズギークス (Enterprise Geeks)
DDD超入門(後編) - Domain-Driven Designの適用Step - エンタープライズギークス (Enterprise Geeks)
全般的
ドメイン駆動設計の定義についてEric Evansはなんと言っているのか[DDD] - little hands' lab
境界づけられたコンテキスト 実装編 - ドメイン駆動設計用語解説 [DDD] - little hands' lab
DDDに関する質問にバシバシお答えしました [ドメイン駆動設計] - little hands' lab
ドメイン駆動設計+クリーンアーキテクチャ解説【DDD編】 #オブジェクト指向 - Qiita
ドメイン駆動設計+クリーンアーキテクチャ解説【クリーンアーキテクチャ編】 #オブジェクト指向 - Qiita
https://www.slideshare.net/MasanobuNaruse/bottomup-ddd-1www.slideshare.net
https://www.slideshare.net/MasanobuNaruse/bottomup-ddd-2www.slideshare.net
www.slideshare.net
自分の頭の中はこうなった。 pic.twitter.com/yIUbzEWS5j
— かとじゅん (@j5ik2o) August 8, 2019
僕の認識と頂いた意見をマージしてみた
— 松岡@DDDブログ書いてます (@little_hand_s) October 25, 2018
ドメイン層:
業務上のルール、制約条件の実現
(判断、計算、加工など)
アプリケーション層:
ドメイン層で許可された操作を組み合わせることによるユースケースの実現(判断、計算、加工以外の処理の指示や進行管理 / モデルの生成と利用、永続化と再構築依頼)
DDDの集約とエンティティが理解できないという質問されたことある。リポジトリはエンティティと一対一につくるんですか?みたいな質問も。僕も最初混同してたのでわかる。リポジトリはエンティティではなく集約と一対一です。エンティティは、集約の中に一つ以上ある場合がありますから
— かとじゅん (@j5ik2o) November 1, 2018
DDDではアプリケーション層にUnit Of Workを定義して解決という話だったかな。個人的には集約がトランザクション境界と一致。複数の集約を跨ぐ場合でもトランザクション境界はまとめないことが多いです。 https://t.co/rd2H6leJMH
— かとじゅん (@j5ik2o) November 1, 2018
契約プログラミングを真面目に勉強すると、クライアントのコードが、サービスの実装ではなく、サービスが実装する契約に依存できるようになりますね。難しい表現だけど。こうすることで、お互いに契約を維持できれば、サービスの実装はいかようにも変更できます。
— かとじゅん (@j5ik2o) November 8, 2018
ドメインオブジェクトを中心としたClean Architecture のためのレイヤー構成 #DDD - Qiita
ユースケースをロバストネス分析してアクターとバウンダリとエンティティとコントロールに整理するのは確かにわかりやすいかもなー。
— がくぞ (@gakuzzzz) November 10, 2018
ただコントロールをエンティティの振る舞いとするよりアクターの振る舞いとしがちなのでアクターをドメインモデルにしないという縛りが重要なのかな? #scala_ks #s1
分析の過程で得られるのがドメインモデル(問題や課題を解決する考え方を表す何か)で、それを実装に反映したのがドメインオブジェクトだと解釈している。DDDは単一モデルではあるけど、実装の細部は表現が異なることもあるので、この言葉使いが役に立つこともある。
— かとじゅん (@j5ik2o) December 18, 2017
最近はこんな感じです
— 松岡@DDDブログ書いてます (@little_hand_s) April 18, 2019
1.企画、デザイナーが画面デザイン作る
2.エンジニアがモデリング(ユースケース図、ドメインモデル図書く)
3.ここで不明な点を企画と確認して固め、ドメインモデル図などに反映
4.実装開始。DB設計と実装は分担したり一人でやったり#ドメイン駆動設計 https://t.co/Wm9GPxPvAf
第3回 -ドメイン駆動設計のための オブジェクト指向プログラミング ハンズオン"に参加してきた! - desi-gneer(designer_engineer)
ドメインモデルには順序依存性がないように作る。順序依存性が必要なものはアプリケーション層(サービス)に書く
— 石◯王 もちだ (@mike_neck) March 28, 2017
昨日、共有カーネルにするか否かという議論をした。安直に選択すると利害関係者間で合意を取るコストが跳ね上がるって話した。あと、増田さんの記事
— かとじゅん (@j5ik2o) June 15, 2019
「Shared Kernel パターン は、たぶん アンチパターン」を読むと参考になるかもしれません。https://t.co/putgpy7FJh
純粋に計算する型は、IO型に依存してはいけない。
— 増田 亨. (@masuda220) December 3, 2018
IO型は計算用の型に依存してよい。
三層+ドメインモデルのアーキテクチャは、計算用の型のライブラリであるドメイン(の計算)モデルとIO型で組み立てる他の層を強い意志を持ってに分離するための枠組み。
結果整合性がどうしてもコストが大きくて、同一トランザクションでやりたい場合、という前提で考えてみました。
— 松岡@DDDブログ書いてます (@little_hand_s) December 2, 2018
5. パターン3の拡張で、ユーザー数の制約を管理する別の集約を作る
企業の中に他集約の数に応じたカウントを持つのはやはり違和感があるので、その部分だけ切り出してしまう。(続)
集約の境界と整合性問題に関する感想 #DDD - Qiita
確かに、これは良いかも。
— Yamashita (@_vermeer_) 2021年2月4日
私見としてアプリケーション層はユースケース記述に近い表現にするとよいという整理をしていて、かつアプリ層は再利用が少ないので部品となる機会も少ない。
全角文字によるIDEの入力補完をする機会も少ない。
イメージはテストユニットに近い感じの扱い。 https://t.co/eTdO72Ma5N
ユースケース
ドメインモデルの根拠とドメインモデル貧血症の対策について - kubell Creator's Note
UMLを描こう – Vol.6 ロバストネス図からシーケンス図を描く - アシアルTechブログ
https://t.co/gtPAwTCNfw
— Yamashita (@_vermeer_) 2017年12月16日
質問者がアメリカの方であるとして、英語圏の人にとって日本人のいう「条件」と「状態」の違いは質問に値する違いってことと想定。
ユースケースを呼び出すユースケースって、ありなのかぁ。
— Yamashita (@_vermeer_) 2017年12月16日
ダメだと思い込んでた。
個人的には大きなショック。
ユースケース記述の実装をServiceとすれば設計と実装の乖離がなくなるのかなぁ。
でもそれはトランザクションスクリプト的な感じで悪手なのかなぁ。
CQRS
www.slideshare.net
#jjug_ccc 僕がDDDを勉強したりDomain Event使ってみたいと思ったりKafkaでCQRSの素振りをしている背景と現状 - Mitsuyuki.Shiiba
www.slideshare.net
CQRSとイベントソーシングの使用法、または「CRUDに何か問題でも?」 | POSTD
本来一つの集約としてモデル化されるべき複数のエンティティが集約として勘違い実装。リポジトリも別々。でもアプリケーション層で同一トランザクション。これ一つの集約では?
— かとじゅん (@j5ik2o) November 15, 2018
オブジェクトをバラバラに砕くと有益な不変条件がなくなる→振る舞いもアプリケーション層に流失する
Event
ドメインイベントを設計する - yoskhdia’s diary
主にメール送信とかで役に立ってるかな。疎結合だからテスト書きやすいし、spring-dataにはこの仕組みが用意されてるので導入しやすい https://t.co/PVFWwzLOU5
— Yuki YOSHIDA (@sis_yoshida) December 12, 2017
書籍
www.slideshare.net
持続可能な開発を目指す ~ ドメイン・ユースケース駆動(クリーンアーキテクチャ) + 単方向に制限した処理 + FRP #DDD - Qiita
ドメインオブジェクトの責務について #DDD - Qiita
トランザクションスクリプト
いまさらきけない「ドメインモデル」と「トランザクションスクリプト」 - ひがやすを技術ブログ
むむっ、私の思考はトランザクションスクリプトの可能性大かもしれない。
実装
DDD の Java EE 実装サンプル - Cargo Tracker を読み解く #オブジェクト指向 - Qiita
ドメイン駆動設計: IDDDに登場するサンプルコードのModule構成をまとめてみた #DDD - Qiita
ドメインモデルをコードへ落とす 〜あなたのクラスは、どこから?〜 #勉強会 - Qiita
構成
実装サンプルの中で個人的に一番しっくりくるのはTERASOLUNA
。
プロジェクト分割については好みの思考。
ValueObjectは、どの層からでも呼び出して良いフラットでパブリックなものだと思っていて、そのパッケージ構成って みんなどうしているのかな?と悩んで調べてみると、以前、DDDの勉強に参考にさせていただいた かとじゅん(@j5ik2o)さんのブログが参考になりそう。
Scalaコードでわかった気になるDDD | GREE Engineering
net.gree.xxx.domain.hunter Hunter, HunterName, HunterRank net.gree.xxx.domain.monster Monster net.gree.xxx.domain.item Item, ItemService
MVC の Model 肥大化への対処 #初心者 - Qiita
実装サンプルのフォルダ構成よりも、こちらの方がしっくりする。Repository
やEntity
との兼ね合いに悩みが生まれそうだけど、それは今後、自分で実装する中で考え直そうということで保留。
DAO
インピーダンス・ミスマッチを解決する、O/Rマッピングの設計
逆に考えてたけど、確かに こちらの方が良いかも。
— Yamashita (@_vermeer_) 2020年4月13日
今度(いつ?)試してみよう https://t.co/hziCFJUBml
Form
Railsアプリケーションでフォームをオブジェクトにして育てる - クックパッド開発者ブログ
decorator, presenter, exhibit という3つの実装パターンについて - pospomeのプログラミング日記
クラス
同じようなPOJOだけど色々分類がされていて、その違いを考えるのに参考になる。
【JavaBeans】BeanとDTOとEntityとVOとFormの違いって何? - プログラマのはしくれダイアリー
モデリング
http://blog.amateur-factory.jp/?eid=1444289
www.slideshare.net
- 2018/3/22 追記
モデリング:9つの誤解 by S. Ambler
— 増田 亨. (@masuda220) 2018年3月22日
1. モデル=ドキュメント
2. 最初からすべてが見通せる
3. モデリングは重いプロセス
4. 要求は凍結できる
5. 設計は不変
6. モデリングとはツールを使うこと
7. モデリングは時間のムダ
8. データモデリングが開発の中心
9. モデリングスキルなしに開発できる
私なりに、読み替えてみました。
モデルはドキュメントではない
ドキュメントのためのドキュメントではなく実現する手段であるってこと、かな?最初からすべては見通せない
徐々に組み立てていくものモデリングは軽快なプロセスであるべき
要求は変化する
要求には柔軟に対応する設計も変化する
設計も柔軟に変化するツールを使うことがモデリングではない。
手段は目的ではない。
例えば、UMLで記述すればモデリングしたことになわけではない。モデリングは重要不可欠
ドメインモデルを開発の中心に。
開発にはモデリングスキルが必要
その他(類似・未分類)
www.slideshare.net