最近、仕事場で 「DDDって分かります?」 と聞かれて、うーん と思いながら
「仕組み(アーキテクト)と、設計デザイン(思想)の両面があって、仕組みの話はクリーンアーキテクチャのそれに類似だと思います。設計の方はユースケース駆動みたいなフローではなくて、1つ1つのクラスの責務をボトムアップで積み上げていくみたいな感じでしょうか」
「ドメインの実装に外部依存を無くして業務の関心事をまとめる、みたいなのも設計側のポイントみたいな気もします」
と答えた(つもり)。
ちゃんと伝わったか、正直自信もないし、それが正しいか?と言われると、、「うーん」と言う感じ。*1
私自身の最近感想として、私はユースケースとかフローとか 流れを中心にしか システムの全体像を把握できないから イマイチ「DDD」を口にするのを避けていたりも。
結局のところ、私が興味を持っていたのは POJOを如何に独立させるのか とか、どうやったらコードで意図を表現できるのかってことであって「ドメインで駆動する」こと自体ではないんだよなぁって。
「VOとか型をつかって実装しよう」「Repositoryと使ってDIP」っていうのは 好みだけど、それをもって「ドメインで駆動している」とは言えないよねぇって。それは あくまで構造の話であって、デザインとは違うっていうか。
もしくは、言葉通りに ドメイン駆動 というのであれば、レイヤー、BC、VO、集約って周辺の話(駆動を支えるもの)であって、あくまでコアは ドメインで駆動するだとすると、それは私には馴染みが悪いというか。
レイヤーや構造の話は設計デザインを支えたり、実現するためのアイディアではあるけど コアではないよねって。
なので、DDDっていうのは避けがちで、関心事(ドメイン)と外部要因を疎結合にする仕組み というようにしていたり、厳密ではないけれど 構造の話をしているという意図で「クリーンアーキテクチャみたいな」という感じで*2、雰囲気を共有する感じで逃げている。
まぁそんな感じ。
多分、TDDが自分に馴染みが悪いと思ったのと近い感じ。
逆にいえば TDDがしっくりくる人は DDDは実質出来ていると思う。
ブログのタグ DDD だけど、これは 構造のアイディアをもらっただけで、駆動はしてないから どうしたものか 迷いつつ残しておこう。*3