blog.bouzuya.net

2016-03-05 『ドメイン駆動設計のためのオブジェクト指向入門』にでた

関西 DDD.java のドメイン駆動設計のためのオブジェクト指向入門に参加した。

京都。三本の発表で時間いっぱいだった。増田さんも居るし、ね。

ぼくとしては原則を再確認した感じ。ぼくが考える DDD の大原則は「ドメインとコードを一致させようとする」ことだ。もちろん「ドメイン」は計算機上で動くことを考慮してくれない。一致させるように努めるということだ。

そのための考え方のひとつは「ドメインの言葉でコードを書く」こと。たとえば「 LocalDate 」は「ドメインの言葉」ではないので「 BirthOfDate 」を使う。「ドメインとコードを一致させようとする」ためだ。「バリューオブジェクト」を重視するのは設計よりは実装のほうの対策だろう。しかし Java で多くの class を扱うなら immutable でなければ容易に破綻するだろうし、実装の意識としても正しい。「基本データ型をバリューオブジェクトかつドメインの言葉にする」ことは一石二鳥なわけだ。

ほかの考え方には「リファクタリングの目的をドメインとの構造のズレの修正にする」ことがある。たとえば、単純に共通化して重複を排除するのではなく、そのドメインで本質的に共通のものかを考慮して重複を排除する。似て非なるものかをドメインに照らして判断する。「ドメインとコードを一致させようとする」からこうなる。

ぼくが気にしている点は、いま bouzuya/b-o-a で実現できるものが OO ではないことだ。処理の流れの制御を Proactive から Reactive にしたとき、果たして同じように「ドメイン」と「コード」を一致させることができるのだろうか。OO 自体は概念として「独立したオブジェクト間のメッセージ通信」という側面を持っているが、それを意識して Java を使っているように思えない。 method を呼び出す ( message へ応答する) ことを Reactive に動いていると解釈すれば……などと考えては居る。まだ詳細に考えているわけではないし、関西 DDD「.java」 にそれを要求するのはおかしいような気もする。