ドメイン駆動設計読んだ

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)


ドメイン駆動設計読み終った。ドメインを中心に据えてソフトウェアを設計するための方法を教えてくれる本だった。設計の話なので、抽象度が高く、なかなか読み辛いけど、良い話がたくさんでてくる。この本で例にでてくるソフトウェアが経理システムだとか貨物の配送システムなどのエンタープライズよりだったので、はじめは自分のようなWebエンジニアとっては参考にしにくいかと思っていたのだけど、まったくそういうことはなく、たいへん参考になった。

ドメイン駆動設計でいうドメインとはソフトウェアが価値を生み出す問題領域のことだ。ドメイン駆動設計手法では、開発チームがドメインエキスパートと継続的に議論してドメインモデルをつくりあげ、ソフトウェア中でも同じドメインモデルを利用することで、チーム全体がドメインに対する知識を深めることを可能にし、理想的にはドメインを良くモデリングした有用かつ変化に強いソフトウェアが効率良く開発できる。(すごい)

この本が良かったのは、詳細レベルの設計テクニックではなく、アプリケーション全体をどのように設計するべきか、ということについてかなり詳細に説明してくれているところだ。これまでソフトウェアを設計するときにぼんやりとして捉えられていなかったところが、とてもよく整理されていて勉強になった。

例えば、第2部の”モデル駆動設計の構成要素”ではモデルをエンティティ、値オブジェクト、サービスなどの種類のオブジェクトに分類し、それらのライフサイクルはファクトリやリポジトリによって管理するという構成について教えてくれる。自分が設計しているコードのモデルが、それぞれどういった役割を意図していたものか、より整理された見方ができるようになった。

他にもドメインモデルをうまく取り扱えるように、継続的にリファクタリングする方法や、より複雑なシステムにおける設計戦略について紹介されている。ドメイン駆動開発の利点を分析するために、実例に基づいたアンチパターンが、都度、紹介されるのだけど、多くに心当たりあってなかなかつらい。しかし、なぜ悪いのか説明してくれるので、とても役立つ。

理想的な話に終始していないのもよい。時代はドメイン駆動設計や!とかいって、急激に設計を変えても良い設計にはならず、少しづつおかしなところを継続的にリファクタリングしていかなければならないという話や、もはや設計を変えることができないレガシーシステムになんとか対処する方法などについてもくわしく言及されていて、現実の問題に対応している。

自分がソフトウェアをつくる中で感じたり、これまでチームで議論してきた、設計上の難しい部分が、ドメインモデルを軸に次々と整理されて、目からうろこという感じだった。自分のように、これまでWebアプリケーションの設計をしてきた人にとっても、これまでうまくいった(あるいはうまくいかなかった)設計についての評価がたぶん見つかるので、ためしに読むと参考になると思う。急にすべての設計パターンを実際のプロジェクトに反映するのは難しいし、それこそ急激な設計変更になってうまくいかないだろうから、少しづつ実際の開発に生かしていきたい。