DDD
注意
- DはDesignのD
Eric Evansが「エンジニアは技術志向ばかりで業務ドメインに関心を持たない」と批判して考案したDDDが、結局エンジニアの手によって「DDDは難しいから実装だけ真似しました。名付けて軽量DDD」ってなってるのほんとにエンジニアムーブそのものって感じで好き— プログラミングをするパンダ@夏休み🏝️ツイート減ります (@Panda_Program) June 16, 2022
https://twitter.com/Panda_Program/status/1537298024816590849?s=20&t=x0ybwoPFN_YHRB89F5pyIw
- 「ITエンジニアの横着」
DDDな、あれ、実装を得る開発技法じゃなくて、実装コードを使って反復的に独自設計を得る手法なの。どんな物を作るといいか、模索して決めていく仕事する人のやること。それにコード使うってことは、品質これぐらい要るんやでってことがしつこく書いてある。ただし、20年前の水準で、だけどね— ひさてるさん (@tanakahisateru) June 16, 2022
https://twitter.com/tanakahisateru/status/1537515256842694656?s=20&t=x0ybwoPFN_YHRB89F5pyIw
右(2枚目)は「技術駆動パッケージング」というアンチパターン。設計パターンごとにまとめるのは一見綺麗に整頓されているように見えるが、ドメインの関心事が設計パターンで分断されてしまい、業務概念ごとにまとまるべきものが低凝集になってしまう。特にマイクロサービス化を試みる場合非常に困る。 https://t.co/ixXh8X0DB1
— ミノ駆動 (@MinoDriven) July 10, 2019
- 「良いコード/悪いコードで学ぶ設計入門」はSNS時代の冒険活劇ゲーム攻略本だと思った - Qiita
- ディレクトリ構造, ドメインで分けるか性質(ex. サービス, モデル, リポジトリ)で分けるか
- 後者は 技術駆動パッケージング で関心事が低凝集になる
domain以下は関心事でわけるのが善い- いつも前者にしたいと思っていたが後者のパターンが多い
- この話は 『エリック・エヴァンスのドメイン駆動設計』 5章にもかいてあるらしい
- 後者は 技術駆動パッケージング で関心事が低凝集になる
ドメインモデル
-
2022-10-05 [DDD]モデルでドメイン知識を表現するとは何か - Qiita
- モデルが単なるデータモデルだと不変条件を破壊できてしまう
- レイヤードアーキテクチャでもドメインモデルは実践できるが REVIEW MARKET は ドメインモデル貧血症 だ
謎
-
Q: モデルは外部モデルの値を持つべきか, IDを持つべきか
- A: モデルを持つべき
- 2022-10-03 N+1問題 発生しないか?
FetchType
関連カラムの読み込みのタイミングを決める
FetchType.EAGER: entity取得時に読み込み.@OneToOne,@ManyToOneではデフォルト
FecthType.LAZY: 関連フィールドにアクセスした時に(getter内で)読み込み.@ManyToMany,@OneToManyではデフォルト
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY) var tweets: List<Tweets>? = null,-
2022-10-03 q : DDD のドメインモデルにマップする時関連モデルもフィールドに含めるべきなのか?
- それだと
LAZYにしている意味が無くなる
- それだと
-
Q: domain modelから外部entityへの変換は
- 2022-10-03 A: domainは外部を知ってはいけないのでファクトリメソッド
Dto.of(Model)を作る
- 2022-10-03 A: domainは外部を知ってはいけないのでファクトリメソッド
※私はServiceクラスでDTO変換の処理をしていますが、Controllerクラスで実装していただいても構いません。(どこで処理するかは設計思想によるってやつですね)
変換場所は Service でも Presentation でもいい
DDDは「ある程度のコード規模にならないとペイしない」とよく言われるが、逆に「ある程度のコード規模になるとprotobuf詰替えアーキテクチャの方がスケールする」ので結局DDDの使いどころはどこにもないんじゃないかという説が僕の中で有力になってきた。
— くまぎ (@kumagi) June 6, 2022
- 良いコード/悪いコードで学ぶ設計入門の感想と注意点
- ドメイン・プリミティブ - iki-iki とValue Objectの違いを見る