Blog技術をこよなく愛するエンジニア集団が在住するペンギン村から、世界へ役立つ(かもしれない)技術情報を発信する技術系ブログです。某アラレちゃんが済む村とは一切関係ありません。〜つばさドメイン〜DDDあ=阿良々木くん、羽=羽川(元)委員長これは僕が『DDD』について学びながら、自分なりにアウトプットした話でありフィクションであり、まぁつまるところどうでもよい独り言だ。どちらでも良いし、どちらでも悪いかもしれない。唯一、正しいのはこれを書いているのが僕の『意思』をもった記録であるということだけだろう。羽「ん、星のカービィに出てくる環境破壊が楽しい人のこと?」あ「違う。Design)のことね」あ「そうそう。羽「何でもは知らないわよ。羽「それで課題は順調なの?」あ「いやぁ、そいつがさっぱりでさ。いうか僕にはDDDの概念自体もよくわからないんだよ。羽「何って、阿良々木くんのDDDの理解について」あ「おいおい、冗談はよせよ羽川。Architecture』とかを使うのは当たり前の話だろ。羽「他人の情報に振り回されるなんて、阿良々木くんらしくないわね。DDDというのはねドメインに焦点をあてて、それをベース(駆動)にして、ソフトウェアを設計する手法のことなの。羽「まぁ、もっともそれらのアーキテクチャと相性が良いのも事実ではあるわね。羽「でも、それはドメインをベース(駆動)にしていない時点で、『DDD』という用語を使うのはふさわしくないと私は感じるわね。羽「ふむ、分かればよろしい。したらちょっと阿良々木くんにも分かるように『怪異』を例にして説明してみましょうか」あ「お、そいつは助かる。怪異・・・それは「蟹」であり「蝸牛」であり「猿」であり「蛇」でありそして・・・「猫」だった。これを読んでいる人は「化物語」シリーズを読んでいるだろうし、そのあたりの説明は不要だろう。Primeで「傷物語」くらいまでは無料で観られんじゃないか?羽「まずは『ドメイン』という言葉について説明しようかしら。阿良々木くんは『ドメイン』についてどれくらい知っている?」あ「うーん、現実の物とか概念とかそういうものってイメージがあるな。羽「うん、イメージとしては間違っていないけど、少し具体的な說明に欠けるかもしれないわね」あ「そうだな。羽「同じように『料理』をするなら『料理』についての『専門知識』が必要だし・・・他の多くのことも同じことが言えるわよね。解決するためには『怪異現象』の専門知識が必要だったように。羽「専門知識をもって問題を解決するのは当然なんだけれど、問題は『コード』や『設計』と、その『専門知識』が対応しないことなの。羽「さっきも話したけれど、そういう時は『専門家』のアドバイスが欲しくなると思うの。羽「そうした専門知識を持った人のことをDDDでは『ドメインエキスパート』と呼んだりするの。『怪異現象』という『ドメイン』と、それの専門家である忍野のような『ドメインエキスパート』か。その『ドメイン知識』をソフトウェアの『設計』や『コード』に対応させる、と。そこまで考えて僕は気づいた。いや、思い出したと言ったほうが正確かもしれない。Programming、それは現在もっとも主流となっているパラダイムだ。オブジェクト指向の基本的な考え方は、現実世界にある『モノ』と似たような考えをコードに持ち込むというものだ。これは『命令形プログラミング』に代わるものとして世間に受け入れられており、現在のプログラミング言語の殆どがそれをサポートしている。継承とかポリモーフィズムについて触れるのはよしておこう。戦場ヶ原じゃないが『戦争』になるのは必死だ。羽「ふふ、それはとっても良い質問だわ。羽川は僕がその質問を発することをまるで知っていたかのように答えた。どことなく嬉しそうだ。僕の通っているプログラミングスクールに一緒に通ってた、みたいなオチは無いだろうけど。羽「確かに『オブジェクト指向設計』も現実の物や概念をモデリングして、それをコードで表現するという意味では似ているわね」あ「だろ。羽「ところで阿良々木くんは、オブジェクト指向を使ったらみんながみんな、同じようなコードを書くと思う?」あ「それはないだろ。『オブジェクト指向設計』と『DDD』は『モノ』に見立ててコードを書くという点では一緒かもしれない。羽「結局、オブジェクト指向設計で開発するにしても、最終的にコードに至るまでの『経緯』というか『手段』については不足していたのよね。羽「まぁ、決定打と言い切るつもりは毛頭ないけれど、世の多くのプログラマに受け入れられているというのは事実かもしれないわね。みんなオブジェクト指向について理解はしつつ、具体的な『モデリング』や『コード』に落とし込む方法を模索していたわけよ」あ「なるほど。当てはめるとしたらそんなところかしらね。其の肆なるほど、DDDは『ソフトウェア開発の方法のひとつ』で、言ってみれば『オブジェクト指向』の『実践方法』のようなものなのかもしれない。いつになく僕の理解が早いのが気になるが、まぁ物語上の都合なのかもしれない。僕にとっては都合の良いことこの上ない。羽「試しにあの『犬』を疑似コードで表現してみてくれない?」あぁ、オブジェクト指向の『例題』としてよく挙げられるやつか。僕だってプログラミングスクールに通ってるんだぜ。歩く}あ「こんなところだろ。羽「ふむ、Javaのコードね。羽「ところで」スルーされた。其の伍つまりね、と言いつつ羽川は說明を続けた。羽「『モデリング』、まぁ『モデル化』とも言うけれども、ある事象から『都合のよいもの』のみを抜き取って『抽出化』することを言うのよ。羽川は僕の話を半分さえぎるような形で言った。羽「例えば、阿良々木くんが今手にしてる『シャーペン』。羽「ノックすれば芯が出る。シャーペンと聞いたらだいたいの人がそう思い浮かべるわよね。『色』や『材質』、あるいは『原材料』、もっと言ったら『分子』や『原子』の構成。僕は羽川の言わんとしていることが、だんだん分かってきた。羽「”現実世界をそのまま表現する”というのはオブジェクト指向における『誤解』のひとつなのだけれど。誤解するまでもなく”そのままそっくり表現する”なんて、そもそも不可能なのよ」そこまでの話を聞いて、僕は『八九寺真宵』のことを思い出していた。羽「結局、自分たちがやりたいことにあった『データ』や『振る舞い』を抽出するしかないのよ。阿良々木くんはさっき『体重』と『品種』を追加したけれど、それは不要かもしれない。逆に『毛の本数』や『ノミの数』が重要になることもあるかもしれない。いう研究をしている人にとって、とかね」そう、僕らは普段『自分の目で見えている』ものを『絶対的な真実』だと思いこんでしまう。僕は最初『八九寺』が怪異にあっていると思いこんでいたけれど、実はそうではなかったし。『僕』と『戦場ヶ原』は全く別の『事実』を見ていたこともあとから分かった。羽「つまり、現実の世界から『ソフトウェアでやりたいこと』を実現する上で、『役立つ』要素だけを抽出することを『モデリング』というのよ」あ「なるほどな。羽「うん、実際のところ『モデリング』はもっとも難しい部分と言えなくもないしね。私もこれだけの說明で十分だとは思っていないわ。羽「もう完全下校時刻の5分前よ、阿良々木くん。本当は『ユビキタス言語』の話もしたかったのだけれどね。月曜日に会いましょう。バイバイ、阿良々木くん」そう言って羽川は教室を素早く出ていった。相変わらず優等生だなと思う。今回は羽川に感謝しなくちゃな。羽川は遠慮するだろうけど、今度ジュースの一本でもおごってやろうなんてことを考えつつ、同じように教室をあとにした。(つづく?)あとがきこれは僕がDDDを学びながら得られたと思ったことを連ツイした内容をブログとしてリライトしたものだ。それ以上でもそれ以下でもない(実際、添削もほぼしていない)。僕はDDDを実践したことも無ければ、いわゆる『エヴァンス本』や『iDDD本』を読み終えているわけでもない。『DDD』を面白く説明するコンテンツがあってもそれはそれでいいんじゃないかと僕は思うのだ。追加されるコンパイラディレクティブ(SE-0196)何でもは知らない、知ってることだけ。