第四回ドメイン駆動設計読書会@大阪に参加した

4回目。 隔週1回だから初めて2ヶ月が経過したわけで。 今回はレポート担当。 レポートは読書会中で議論した内容をメモしたものをチョチョッとまとめる感じにして、ブログには今回得ることのできた個人的な知見みたいなものを書こうと思う。

今回のキーワードは

の2つ。

深いモデル

読書会のいいところだと思うんだけど、一人で読んでるとそんなに深く考えない軽く読み流しちゃうような単語も「これって...?」みたいな話になりますね。 この「深いモデル」という言葉、僕は引っかからなかったやつ。

でこれって一体どんなモデルなんだ?というところで、以下のような意見が出た。

  • 解決領域を多く持つようなもんではないよね。
  • 表層的なものではなく本質的なもの...本質的とは?
  • よく考えぬかれたモデル!...ほう?

みたいなね。

ここで僕が思ったのは、「深い」というのは「色々なコンテキストを持った」ということではないかということだった。 どういうことかをあるモデルAとBで簡単に説明するとだな。 AとBは、実はまったく同じものを解決できるモデル。 しかし、そこに至るまでの道程は全然違っていて。 Aは一本道で出来上がったモデル。Bは様々な理由から最終的にそうなったモデル。

最終的にアプリケーションにとってみたらどちらでも同じなんだけど、作る側に取っては同じじゃないと思う。 AよりBの方が意図が明確だろうし、次に進むべき道も自ずと示されそうな感じ。 なんとなく積み重ねた偶然と、正しいかはわからないけど意図して積み重ねた必然。

アクションには理由が無いと積み重ねられない。 これってキャリアプランとかビジョンとか施策とか会社経営みたいなものにも通じるところがある。

  • なぜ僕はドメイン駆動設計を勉強しているのか
  • なぜ会社はこの製品を作っているのか
  • なぜチームはこの施策を打つのか
  • なぜこのモデルにはこの機能があるのか
  • なぜこのクラスにはこのメソッドがあるのか

深いモデルとは、色々なコンテキストが積み重なって出来ているモデルだというのが今の僕の見解で、それを作る方法はちゃんとその都度「なぜ」を解決することだと思っている。そしてそれを作ることは出来そうだよね。要は考えろってことなんだから多分。

ユビキタス言語

僕がまだDDDってなんだろみたいな時に、ちょっとググってこの「ユビキタス言語」という単語を見つけて一気に引いていったやつ。なんか難しそうな言葉だし学問の匂いがする。苦手だ。

本から言葉を借りて一言で表すと「モデルのセマンティクスが反映されている共通語」となるかな。要するにどんなものなの?という話で、以下のような意見が出た。

  • ユビキタス言語には手続きは出てこない
  • 故に順序は無い
  • 用語集じゃ!

こんな感じ。 (実はここら辺りで盛り上がった話があったのだけどこれは端折る。「DDDって言葉にこだわる感じの〜」の下りのやつね笑)

唐突だけれども、僕はユビキタス言語はAPIだと思った。APIリファレンスみたいな。 モデルはパッケージみたいな感覚で、ユビキタス言語はそのパッケージを表すAPI。 誰もが共通認識を持てる。同じ言葉で話が出来る。 ユビキタス言語の変更はモデルの変更を意味するみたいなところも妙に納得の行く感じで。 こう考えると、ユビキタス言語の導き方も割りとエンジニアリングに近い感覚で行えるような。

で「これや!これなんや!」くらい僕は興奮していて。

けどそれを巧妙に隠した上でクールに「なんかユビキタス言語ってAPIみたいだなぁって」って決めた俺ナイスユビキタスイケメン。 ただあんま刺さらんかった。

なんやかんやで@itemanさんが仰っていた「ユビキタス言語は結果としてモデルから導き出される」という言葉が印象的でした。 ともすれば、例えばIDEなどでクラスやメソッドのコメントをユビキタス言語として抽出するみたいなことも出来るだろうし、逆にそこまでやらないとモデルとユビキタス言語のメンテナンスは大変だろーみたいな。確かに。

積み重ねること

今回の読書会で、正直正しいかどうかわからんけれど自分の知識が積み重なってることを実感した。 僕にとってはこの感覚が結構大切で、なんというか一旦理解する感じ。 ロッククライミングで言うと(やったことないけど)、なんかあの釘みたいなやつを手頃なところへガツンと打つじゃないすか。 そんな感じで、一旦中継地点で間違ってるかもしらんけど次を積み重ねられる状態にする。 この道程が僕のコンテキストで、一旦理解出来ることにこそ価値がある。 このコンテキストの積み重ねが今の僕を作ってきたし、それは間違いじゃないと思っている。