はじめに
ただのポエムです。
このタイトルはどういう意味か?
DDDは設計の話なので、まぁ具体的なコードまで表出することは稀かなと思っています。
DDDの話や記事を書いているのに「具体的なコードや〇〇言語で例が無いからこの話や記事はちょっと・・・」と言われるとなんかモヤモヤします。
いや、これがプログラミング初心者や設計初学者であればまだいいんです。
中級者以上の人たちからもこのような意見が上がると「え?今は設計の話をしているんだけどな・・・???」となります。
という話です。
似た感情
「この感情、何かに似ているな」と思ったんですが、アルゴリズムの話でした。
"アルゴリズムとは、解が定まっている「計算可能」問題に対して、その解を正しく求める手続きをさす"
Wikipedia アルゴリズム から引用
アルゴリズムの話をしている時、あくまで解を求める手続きの話をしているわけです。
手順が分かったのなら、後は自分の得意な言語で書き下せばいいと思うのです。
「このアルゴリズムには〇〇言語の例がないから、〇〇言語では実装できないんだ」とはならないですよね?(ですよね?)
DDDでも同じ
DDDでも同じです。
DDDとは、ドメインエキスパートが知っている知識を厳密に構成し抽象化(ドメインモデル)して、ソフトウェアプロダクトを成功させるための設計思想や哲学なわけで、当然そこに〇〇言語のコードのような具体的なものは無いはず(正確には〇〇言語に限定するような制限はないはず)と考えています。
とは言え「〇〇言語でDDDのXXな概念をうまく表すためにはYY(カプセル化、モジュール化、DI等)というテクニックが使えるよね」はあると思います。
本記事はDDDの実装例を否定するものではない
例えばDDDを〇〇言語で実装する話等は、全然ありだと思います。
その言語に備わっている機能を用いて、DDDの概念をどのように実装するかはとてもテクニカルな内容で面白いと思います。
ミスリーディングを避けたい
どういうことかと言うと、例えば具体的なコードを示した際に聞き手が「〇〇言語でXXを表現するにはYYだ!」のように言い切ってしまう・思いこんでしまう(そのような思い込みが流布される)のは避けたいですね~。
まとめ
- ただのポエムです
- 具体的にどうする?は別の話(だと思います)
- アルゴリズムの授業とか受けて先生に「〇〇言語で表現するとどうなりますか?」って聞かないでしょ?(聞くのかな?)
- 実装例を否定するものではありません
- 実装例はあくまで例なんですよ!