読書メモ:手を動かしてわかるクリーンアーキテクチャ

読書メモ:手を動かしてわかるクリーンアーキテクチャ

読書メモ。

Tom Hombergs『Get Your Hands Dirty on Clean Architecture: Build ‘clean’ applications with code examples in Java, 2nd Edition』Packt Publishing の翻訳書。Robert C. Martin 氏が提唱するソフトウェア設計パターン「クリーンアーキテクチャ」の概念に沿って、Web アプリケーションを構築するにはどうするのか、について実装コードとともに解説。ソフトウェア設計に興味を持っている開発者の方、クリーンアーキテクチャとその実装方法を知りたい開発者の方におすすめの一冊。

感想 #

ほぼ同様の内容を扱った本に「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」があり、そちらのほうが優れていると感じた。同書を読んだことがあれば今回の本は読まなくても良いだろう。また、同書を読んでいない方は先にそちらを手に取ることをおすすめしたい。

なお両者はそれぞれ「クリーンアーキテクチャ」と「ドメイン駆動設計」を冠する本だから内容が異なるのではと思われるかもしれないが、両者は密接に関係していて、本書の最終部に次に記述がある。

これまでの章で明らかにしてきたように、ヘキサゴナルアーキテクチャにとって最も重要なことは、ドメインに関するコードをドメインとは関係ないこと(たとえば、永続化層の関心事や外部システムへの依存など)から束縛されずにソフトウェアの開発が行えることです。私の個人的な考えとしては、ドメイン層のコードを外部から影響を受けることなく進化させられることがヘキサゴナルアーキテクチャを採用する上最も重要な論点だと思っています。

まさに、このことがドメイン駆動設計を実践するのにヘキサゴナルアーキテクチャを採用することが優れた選択肢となる理由なのです。「ドメイン駆動設計」という名前からわかるように、ドメイン駆動設計ではドメインが開発を進める要素となります。

(中略)

まとめると、ヘキサゴナルアーキテクチャを採用するのか否かを判断する第一の指標は、開発するアプリケーションにおいてドメイン層のコードが最も重要な要素なのか否かということになります。そして、もし、ドメイン層のコードが最も重要な要素でないのであれば、ヘキサゴナルアーキテクチャを採用する意味はきっとないということになります。

めも #

アダプタ(Web アダプタ)の責務 #

Web アプリケーションが REST API を提供することになった場合を想像してください。そうなると、Web アダプタの責務はどこから始まり、どこで終わることになるのでしょうか?

通常、Web アダプタは次の順で処理を行います。

  1. 送られてきた HTTP リクエストをプログラムで利用可能なオブジェクトに変換する。
  2. 認証/認可を行なう。
  3. 入力値の妥当性確認を行なう。
  4. 入力値をユースケースの入力モデルに変換する。
  5. ユースケースを呼び出す。
  6. ユースケースの処理結果を HTTP レスポンスに変換する。
  7. HTTP レスポンスを返す。

もし途中で何らかの問題が発生し、例外が発生することになったら、Web アダプタはその例外を問題が発生したことを伝えるメッセージに変換し、そのメッセージを Web アダプタの呼び出し元に返します。

ほとんどの Web フレームワークでは、Web アダプタの責務を担うコントローラを開発者が作成するようになっています。