hAcKTion

日々のアウトプット場所。

エリック・エヴァンスのドメイン駆動設計の第3部を読む(2)

エリック・エヴァンスのドメイン駆動設計の「第3部 より深い洞察へ向かうリファクタリング」(8章の手前まで)の私的まとめの第二回。「リファクタリングのレベル」についての私的まとめです。

リファクタリングのレベル

第3部の表題の中に含まれる「リファクタリング」について触れられている。自分でも想像しやすいところで言う「コードを読みやすくする」とか「機能単位でコードを整理していく」と言った事が想像できるが、どうやらそういった事を指しているわけではなさそうです。というか、これだとレベルが「浅い」らしいです。

ドメインについての新たな洞察によって動機づけられたもの」「コードを通してモデルの表現を明確にするもの」
この2点が入って、レベルが「深く」なる。としている。

自分の解釈では、前者は「ドメインに対してのリファクタリング」で、後者は「リファクタリングされたドメインを元にリファクタリングされたモデル」という印象。
第3部の冒頭の最後に役立つモデルの開発を成功させるための要素があったが、そのうちの「繰り返し行うリファクタリングのプロセス」と関連してきそうだが、つまり、単純に機能やコードというものに焦点を当ててリファクタリングするというのではなく、あくまでドメインやモデルというものをリファクタリングして、それをコードまで反映させるというのが、「深い」リファクタリングなんだろうと思う。

記述の順番は前後しますが、手の込んだ設計はいきなり完成させることはできないので、小規模な変更を連続的に加える必要があると書かれています。
それを踏まえた上で、プロセスの前提として上記のリファクタリングの順番を念頭に、実際に開発者としてどういった活動をすべきかというと、
ドメインエキスパートとの継続的なコミュニケーション」
「モデルを変更していく柔軟性をもった設計」
の2点が必要になってきそう。

最後に、サブタイトルからやや離れた内容にはなってますが、汎用的なモデルや設計にしちゃだめ?っていう話にも触れられてて、バッサリと「ドメイン駆動設計の道から外れている」と切り捨てられている。ここでは書かれてないが、少し後に「参考にするのはOK」とは書かれているので、全くもってやり方がわからないと言うことであれば、初めはそういったものに頼るのも良いのかもしれない。

感想

リファクタリングのレベル」という表題だったのと、序盤が開発者視点での話が続いたので、話の本質を掴むのに少し苦労した。。
自分が普段やっているリファクタリングと別物なのかなと一瞬思ってしまったので、重ね合わせるというイメージが掴めて少しほっとした部分がある。
ちなみに、まだサブセクション3つ残ってますが、この時点で「ドメインエキスパートとの継続的なコミュニケーション」ほど実践が難しいものはないなとと思っている・・・。自社サービスだとやりやすいのだろうか。