自分の中で衝撃というか考え方が洗練されたり自分の意見が湧いてきたので書きます。
本概要
会社の輪読会で読みました。仕事でクリーンアーキテクチャやドメイン設計をする機会が増えそうだということで読みました。
ざっくり感想
読んで良かったです。
アプリケーション設計の考え方を深めることができる。また、「クリーンアーキテクチャやドメイン駆動設計をコードでこんなふうに実装できますよ」が紹介されているような気がしました。
学び
オブジェクト指向の本ではないが、オブジェクト指向は知っておいた理解が深まる本
オブジェクト指向について事前情報は紹介していただけます。「依存」、「継承」、「ポリモーフィズム」etc....
オブジェクト指向を深掘りする本ではありません。しかし、本の最初で事前知識としてオブジェクト指向について紹介されるほどオブジェクト指向の理解が大事です。ここでいう "オブジェクト指向の理解" はプログラミングで扱うオブジェクト指向という文脈です。オブジェクト指向存在論とかは知っておく必要はありません。オブジェクト指向言語を触ったことがあってオブジェクト指向を利用したプログラミング経験があれば十分です。
オブジェクト同士をどう使うのかが大事
本を読んでいて思ったことはオブジェクトごとにきちんと役割分担することが大事なのかもしれないと考えました。
Webアプリケーションでの話しだが、データを取得するWebAPIを作る際にもいろんな役割を持つクラスが存在し、そのクラスたちが連携してシステムを構成しています。
- リクエストを受け取るクラス
- ユースケースを定義するクラス
- データを取得するだけのクラス(データリソースは複数の場合もある)
- 現実世界をモデリングし、識別可能な対象とするクラス
- 複数データリソースから取得しまとめる場所
- データを更新するだけのクラス(データリソースは複数の場合もある)
- レスポンスを返すクラス
- イベントを発行するだけのクラス
- イベントを受け取るだけのクラス
上記は過去の経験や本を読んだことで知ったアプリケーションを構成するクラスを自分の言葉で列挙してみただけです。他にもいろんな役割が考えられます。
アプリケーション設計では適切に役割を分担して記述していくことが大事と考えるならばオブジェクト指向言語じゃないプログラミング言語にも応用できる知識と実践の引き出しを増やせることができそうです。例えばオブジェクト指向言語ではないGo言語でもこの本が言っていることを実現できはずです(自分は「クリーンアーキテクチャやドメイン設計がGoではできない」と聞いたことはないです)。
ドメイン駆動設計やクリーンアーキテクチャをコードに落とし込む準備ができる
疑似コードがたくさんあります。自分だけかもしれませんが、設計の本を読むと「頭ではわかるけど実践にどうやって投入すれば良いの?」となることが多いです。結局本読んだ後に自分で手を動かす必要があります。
この本は疑似コードを使って説明してくれるので実務投入のイメージが湧きやすいのがありがたいです。疑似コードなので読者が普段使っている言語やライブラリ、フレームワークに置き換える必要はありますが、「何すれば良いかわからない」ということにはならないと思います。
最後に
アプリケーション設計について引き出しを増やすことができました。ここからは実践あるのみです。苦しみながらいろんなことを考えてアプリケーション設計力をものにしていきます。