考えるきっかけ
顧客への提案をまとめる場面で「顧客の業務理解」が重要だという認識をメンバーと共有していました。
その時、メンバーの一人が
『顧客の業務を理解しないまま、Web系の一般的な作り方を当てはめて「こう作ればいいですよね」と進めるようなアプローチは違うよね』
というので、私も同意して、こう言いました。
「それは、ドメイン駆動設計的な意思決定をしていないよね」
しかしそう言った瞬間、自分の言葉に違和感を感じました。
「ドメイン駆動ではない」 状態を何と呼べば良いのか
否定形では伝わらない
先ほどのやり取りでは、間違ったことは言っていません。
しかし、伝えたいニュアンスの半分も運べていない感覚がありました。
文脈を共有している相手にすら、この否定形はわかりづらい。
「ドメイン駆動ではない」が言えないのです。
とっさに出た比喩
結局、その場で私が出したのは比喩でした。
「よく切れる包丁があるから、包丁を売りたいだけの仕事だよね」
客が何を料理したいかではなく、手元の包丁がよく切れるかどうかが提案を駆動している。
この比喩は一発で通じました。
しかし比喩はその場限りです。
私は、チームの語彙になる「名詞」がほしいのです。
名前がないとどうなるのか
この話をAIに聞くと、
"名前が与えられていないと、否定形かその場しのぎの比喩でしか指摘できません。"
とのこと。先ほどの私の行動と一致します。さすがAI。また来月も課金します。
否定形が抱えるリスク
この否定形には1つ問題があります。
- 文脈を共有していない相手には「咎め」に聞こえる
先ほどのように文脈を共有しているメンバーにすら伝わりづらいのです。
もしこれから文脈を共有しよう、というメンバーのいるイベントストーミングの席で
「それはドメイン駆動ではないですよね」
と言えば、分類のつもりでも、相手には評価や批判に聞こえてしまいます。
意思決定の駆動力に着目して対義語を考える
考えてみると「ドメイン駆動」の対義語は聞いたことがありません。
そこで、こう呼ぶことにしました。
実装駆動
これは、駆動力の出所が実装側にある意思決定の総称です。
- Web系の標準的な構成があるから、業務もこの形に合わせる
- このORMのマッピングの都合で、エンティティを分割する
- よく切れる包丁があるから、包丁で切れるものを売る
- ハンマーが手にあるなら、とりあえず叩こう
ツール、フレームワーク、言語機能、過去の成功体験。
出所は様々ですが「業務の構造ではなく、実装の構造が判断を駆動している」点が共通しています。
「名前」による「仕分け」
名前があると、指摘は「排除」ではなく「仕分け」になります。
「あ、それは実装駆動の判断なので、いったん付箋を分けておきましょう」
イベントストーミングには元々、ドメインの事実と技術的関心事を付箋の色で分ける運用があります。
「実装駆動」という名前で、その運用にもっていくのです。
実装駆動は悪ではない
ここで終わると「実装駆動を撲滅しよう」という話に見えますが、そうではありません。
よく切れる包丁を持つこと自体は、良いことです。
プロの料理人ほど道具にこだわります。
問題は「お気に入りの包丁を使えるように、献立を決めていること」に本人が気づいていないことです。
つまり、実装駆動そのものは悪ではなく「自覚なき実装駆動」が悪いのです。
実装駆動には2つある
判断の出所を自覚できていれば、保留したり、ドメインの議論と切り離したり、あとで意識的に採用したりできます。
怖いのは、実装の都合がドメインの言葉を装って議論に紛れ込み、誰も気づかないまま業務モデルが実装の形に歪んでいくことです。
では、自覚した上で——従ってよい実装都合と、拒むべき実装都合をどう見分けるか。
判定軸:誰かに「所有」されているか
私の答えは「所有性」です。
その実装都合は、誰かに所有された製品の都合か。
それとも、誰にも所有されない構造か。
ベンダー製品の癖に合わせてドメインモデルを曲げるのは、他人のロードマップにシステムの命運を握らせる行為です。
製品が方針を変えれば、あるいは消えれば、歪めたモデルだけが残ります。
FlashやSilverlightも、当時は優れてましたが、現在では消えてしまいました。(スマホの台頭もあり)ベンダーが撤退したのです。
一方で、Webは勝ち続けています。Webが残っている理由は技術的優位というより「誰のものでもない」からだと考えています。
公開標準として存在し、特定ベンダーが仕様を独占できない。依存しても、誰かの経営判断に人質を取られません。
SQLも、HTTPも同じです。
これらは製品ではなく、公共財になった「考え方」です。
2つを分ける基準
判定軸はこうなります。
「実装駆動かどうか」よりも「所有された都合か、無所有の構造か」を見る。
自覚的な実装駆動とは
無所有の構造であれば、借りてもロックインが生じません。
それどころか、長い淘汰を生き延びた構造には、問題の本質を捉えた設計が結晶化しています。
実装都合の例を挙げるのは難しいですが、たとえばRESTです。
業務の操作をHTTPのGET/POST/PUT/DELETEに割り付けるのは実装駆動ですが、HTTPは誰のものでもありません。
一方、特定のORMやフレームワークの癖に合わせてテーブルやクラスを歪めるのは、同じ実装駆動でも「所有された都合」への従属です。
同じ実装駆動でも、借りる相手が違うのです。
まとめ
- 「ドメイン駆動ではない」という否定形は、ニュアンスがわかりづらく、咎めにも聞こえる。原因は対義語の不在
- 対義語に名前を与える:「実装駆動」。名前があれば指摘は排除ではなく仕分けになる
- 実装駆動は悪ではない。「自覚なき実装駆動」が悪い
- 判定軸は「所有性」。所有された製品の都合は危うく、無所有の構造(Web、SQLなど)は良い設計の源泉になりうる
今後、誰かの提案が「包丁の切れ味」から始まっていたら、こう言えます
「それ、実装駆動ですね。ドメインの議論を進めたのち、良い実装駆動かどうか、一緒に見極めましょう」