今回のエントリはプログラミング関連の書籍紹介です。
ドメイン駆動設計を用いた設計~開発~保守についてのノウハウが書かれた本です。仕事の関係で勧められたので読んでみました。
本書について
概要
日本最大級となる60万件以上の求人情報サイト「イーキャリアJobSearch」の主任設計者ほか数多くの経験を持つ著者が「現場でこんなことに困っていた」「解決策としてこうやった」「その結果こうなった」というリアルな経験と「なぜ、そうするのか」をふまえて解説!
(「BOOK」データベースより)
参考:ドメイン駆動設計
ドメイン駆動設計(英: Domain-driven design, DDD)とはソフトウェアの設計手法であり、「複雑なドメインの設計は、モデルベースで行うべき」であり、また「大半のソフトウェアプロジェクトでは、システムを実装するための特定の技術ではなく、ドメインそのものとドメインのロジックに焦点を置くべき」であるとする。
ドメイン駆動設計について、一応、私なりに噛み砕いて説明してみると下記のような感じです。
従来の設計では、年齢・金額・数量といったものは、BigDecimalやlongといった型でひとくくりに定義してきましたが、ドメイン駆動設計では「年齢クラス」「金額クラス」「数量クラス」といったように、それぞれのドメイン毎にすべてオブジェクトで扱います。
そして、金額計算やバリデーションといったロジックについても、それぞれのクラスに持たせます。
つまり、そのドメインの関心ごとは、ロジックも含めて、どのクラスに集約させていくような設計手法です。
さらには、金額の中でも「売掛金」「買掛金」「手数料」といった、金額項目毎にクラス化していきます(それぞれのクラスは、ベーシックな「金額クラス」を継承している)。
金額共通のロジックやバリデーションは金額クラスに記述し(10桁以内である、とか、税金計算とか)、各金額項目特有のロジックやバリデーションは、それぞれの個別のクラス内に記述していきます。
こうすることで、コードの再利用性も高まりますし、類似のロジックの散乱も抑制できます。
(新しい概念の金額項目が出てきたら、ベーシックな金額クラス継承した新規クラスを作成し、独自のロジックをそのクラスに記述していけばよい。)
従来の設計だと、ロジック記述のクラスがあって、そこに計算ロジックやバリデーションロジックを記載していきましたが、システムが大きくなるにつれ、色々な箇所に類似のロジックが記述されるようになってしまい、変更が複雑・困難になってきます。
そこで、ドメイン駆動設計の考え方を使い、ロジックの記述個所を各ドメインに極力寄せていくことで、類似コードの散乱を防ぎ、なるべく変更を楽で安全にすることができるようになる、というのが一番のメリットかと思います。
感想
ドメイン駆動設計の考え方に触れるのは本書が初めてだったのですが、非常に読みやすかったです。
最近になって本を読み始めた身としては、一般的なビジネス書と比較すると、技術書は読みにくいなぁ、と感じているのですが、本書は非常にわかりやすい、スムーズに理解できる、という印象を受けました。
(この本を勧められたのも、ドメイン駆動設計を扱った本の中では一番わかりやすかったという理由。)
また、この設計方法を扱うのに、開発者のスキルが求められるなぁ、というのは感じます。
いわゆる、設計書に書いてあることを何も考えずにコード化するようなスタンスの開発者が多いと、あっという間に設計思想が形骸化しそう。
なので、ある程度の現場のスキル・ノウハウが必要になってくるとは思いますが、継続的にシステムをブラッシュアップする必要があるのであれば、非常に強力な手法かと思います。
私の本職はシステムエンジニアなのですが、これまでは、大規模な基幹系システムを主に扱ってきましたが、扱ってきたアーキテクチャは、本書でアンチパターンとして書かれている「データクラスと機能クラスを分離する設計」でした。
また、立場上、設計~開発~テスト~導入までを実施することが多く、導入後の運用・保守をそこまでやってこなかったため、「変更を楽にする」という視点があまりなく、どちらかというと、「納期までに品質の高いものを作り上げる」という視点だったので、本書の内容は非常に新鮮に感じました。
最後に
これからは、ちょっと仕事の内容が変わっていく予定ですので、おそらくは本書の記載内容の知識が存分に生かせればなぁ、と思います。
従来は、私は、あまり本を読まずに、とにかく手を動かしていきたいタチなので、「習うより慣れろ」ではないですが、存分に役立てていきたいと思います。
ちなみに、本著の著者である増田 亨氏のDDD Alliance での発表内容がありましたので、リンクさせていただきます。
本著に興味を持たれ方は、ご覧いただくよいと思います。
また、「ドメイン駆動設計」自体を学ぶ著書として、本書では下記が紹介されていました。
※エリック・エヴァンズ氏=ドメイン駆動設計の提唱者
内容576ページと、かなりの大容量ではありますが、ドメイン駆動設計になれて来たら、ちょっと触れてみたいかな、と思っています。
今回の著書