この記事の目的
クラス設計について書かれた書籍の中で、筆者がおもしろいと思ったものをご紹介します。まだ筆者自身が読み終えていない書籍も一部含まれます。
新規開発
エリック・エヴァンスのドメイン駆動設計
難易度:★★★★★
設計手法の1つである『ドメイン駆動設計』について書かれた書籍です。
『ドメイン駆動設計』とは、簡単に言えば下記の手順で行う設計手法です。
- プログラマは、業務の専門家(=ドメインエキスパート)と対話を重ねて業務について深く理解する
- 理解した業務をそのままの形でコードに落とし込む
ただただ当たり前のことを言っているだけに見えますが、見た目ほど簡単ではありません。例えば下記の理由が考えられます。
- プログラマの業務理解に誤りがあり、誤りを含んだコードが実装される
- ドメインエキスパートの業務理解にあやふやな部分があり、あやふやな部分の残ったコードが実装される
非常に学びの多い書籍ですが、抽象的な記述が多く、とっつきにくいのが最大の難点です。難しくて読み進められないと感じたときは、後述する書籍を先に読んだほうが良いです。
実践ドメイン駆動設計
難易度:★★★★☆
タイトルに実践がついているとおり、抽象的な記述の多かった「エリック・エヴァンスのドメイン駆動設計」より具体例が増えて読み進めやすくなっています。
とは言えまだかなり難しいため、1回あたり10~20ページを少しずつ読み進めています。
「エンティティ」、「値オブジェクト」、「サービス」と言ったクラス設計例が各章で解説されており、この部分を読むだけでも勉強になります。
「実践ドメイン駆動設計」から学ぶDDDの実装入門
難易度:★★★☆☆
「実践ドメイン駆動設計」の解説本です。
「実践ドメイン駆動設計」とともに読み進めている途中ですが、上述の2冊より読みやすいです。
ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本
難易度:★★★☆☆
これも「ドメイン駆動設計」の解説本です。業務理解の部分にはあまり触れず、理解した業務をどのようにコードにするかの部分に絞って解説されています。
ドメイン駆動設計のうち「エンティティ」、「値オブジェクト」、「サービス」といったクラス設計例をまず学びたい場合は、本書から読むと良いです。
良いコード/悪いコードで学ぶ設計入門
難易度:★★★☆☆
2022年4月に発売された新しい本です。
タイトルに「ドメイン駆動設計」は入っていませんが、本文中の引用にたびたびドメイン駆動設計の書籍が出てきており、著者がドメイン駆動設計に影響を受けていることが分かります。
『ドメイン駆動設計入門 ボトムアップでわかる! ドメイン駆動設計の基本』と、後述の『リファクタリング』を足して2で割ったような内容です。
かなり読み進めやすいので、初めてクラス設計を学ぶ人は本書から読むと良いです。
保守開発
レガシーコード改善ガイド
難易度:★★★☆☆
- 1クラスで数千行あるJavaコード
- インスタンスの生成が難しく、自動テストは存在しない
共通
リファクタリング
難易度:★★★☆☆
同じ結果を返すコードであっても、理解しやすいコードと理解しにくいコードが存在します。理解しにくいコードを理解しやすいコードに改善するテクニックが数多く書かれています。
他の設計の書籍を読んだときに、リファクタリングの章が設けられていないことはないぐらい、一般的なテクニックになっています。
筆者は下記の目的でリファクタリングを行っています。
- レガシーコードをどのように改善すれば良いかのアタリをつける
- テスト駆動開発(後述)
逆方向の修正がそれぞれ別のリファクタリング例として紹介されている場合があります。そのため、どちらのコードがふさわしいかを判断してリファクタリングを行う必要があります。
テスト駆動開発
難易度:★★★☆☆
下記の手順を繰り返して開発を進める、『テスト駆動開発』について書かれた書籍です。実際に動作させる「プロダクトコード」の他に、コードをテストする目的で「テストコード」を実装します。
- 失敗するテストコードを書く
- 汚い実装でも良いのでテストコードを成功させる
- リファクタリングする
テストコードをこまめに実行して成功を確認すれば、コードの修正を安心して行うことができます。
そのため、筆者もテスト駆動開発をよく利用しています。
コメント