DDD(ドメイン駆動設計)をやってみように参加しました。

遅ればせながらDDDをやってみよう勉強会に参加しましたので、内容を自分なりにまとめてみます。
当日の資料はこちらです。
資料があるので自分が気になったところを簡単にまとめます。

ドメインというのを「利用者の関心事」と表現

毎回ドメイン駆動設計を説明する際にドメインという言葉で初っ端からつまづくのでこの解釈は参考になりました。

イテレーティブな開発は改善体質のある組織にしか求められないため、役所等は向かないのではないか?

これは特許庁の話で話されていたことですが、役所に限らず旧体質の巨大な企業、いわゆるお役所仕事にも言えるかと思います。
こういったところが顧客でイテレーティブな開発をしたい場合はどうしたらいいんでしょうかね…。

DDDを実際にやってみるにはとにかくドメインモデルを置く場所を作ることから始める

ORM系フレームワークを使った場合ではオブジェクトによるデータ表現を行う必要があるので、これを元にしてDDD的なアプローチをすると良いのではないかと思います。
JPAではネイティブなSQLを投げると痛い目を見るので、オブジェクトの関連とかを予めしっかりと考える必要があり、この時点でそれなりにDDD的なアプローチができているのではないかとも思います。
ただ、ORM系フレームワークでの実装がそのままドメインモデルにはならないですし、ドメインモデル貧血症というアンチパターンに陥りがちなのでうまく誘導したいところです。
あとフレームワークのいうエンティティとDDDのいうエンティティは別モノなのは注意点ですね。

ドメインクラスにはフレームワークのパッケージはインポートされてはならない

またORM系の話になりますが、アノテーションとかはいいですよね…?

困ったら対象業務に関する英語の本を漁れ。これは単語の宝庫。

識別子、いつも困ってます。これはたしかにいい方法ですね。

Stringが1つだけでもドメインモデル的に分割可能なら値オブジェクトにしてラップしてしまう。これにより型宣言による表現力向上が見込まれる。また、不変であることから取り扱いが簡単になりバグが減る。

値オブジェクトの扱いについては、細かくし過ぎると逆にわかりづらくなるんじゃないか、という心配がありました。
しかし型宣言の表現力向上という観点は眼から鱗でした。

○○手順とか単語が出たらとりあえずドメインのクラスにする。ただしステートレス。

批判があるかもと話されていましたが、わかりやすくはあるのかなと思います。試してみたいところです。

自分自身での課題として状態遷移やイベントソーシング(と他4つ)がある。

この2つに関してはオブジェクト指向でわかりやすく表すのが難しいというところが問題と認識しています。
これに関してはJBossにあるjBPMのワークフローエンジンやDroolsのルールエンジンなどが一種の解なのかなと思ったりしました。
どちらもオブジェクト指向に「別のパラダイム」を「わかりやすく」持ち込むという点で有効な気がします。


エリック・エヴァンスドメイン駆動設計は中々読むのが大変でしたが、読んだ甲斐あって中々えるものが多かったです。
この本は原本も難解だそうで、DDD難民なる言葉もあるそうです。