書籍メモ「Persistence Best Practices for Java Applications」Chapter 4

https://learning.oreilly.com/library/view/persistence-best-practices/9781837631278/

Part 1: Persistence in Cloud Computing – Storing and Managing Data in Modern Software Architecture

Chapter 4 Design Patterns for Data Management in Cloud-Native Applications

・Design patterns applied to the Java persistence layer
・Navigating the Java mapping landscape – evaluating framework trade-offs
・Data transfer between the view and underlying layers

レイヤード・アーキテクチャ・ソフトウェア設計パターン
それぞれが特定の責任と明確に定義されたインターフェイスを所有する、明確なレイヤーでのサービス設計と構成を推奨しています。

ロバート・マーティン、ソフトウェアにおける「腐った設計」の4つの兆候を「硬直性」「脆弱性」「不動性」「粘性」と名付けた。
この4つの兆候
剛性(Rigidity):ソフトウェアが変化する傾向
壊れやすい(Fragility):ソフトウェアが変更されるたびにあちこちで壊れる傾向
不動(Immobility):他のプロジェクトのソフトウェアを再利用できない
粘り強さ(Viscosity):コードを変更する必要があるときにハックしにくくするAPI

レイヤー
クライアント

データベース

クライアント

マッパー

データベース

クライアント

DAO

マッパー

データベース

クライアント

リポジトリ

DAO

マッパー

データベース

DAOパターンは、MicrosoftによってVisual Basicで普及し、後にSunの組織を通じてJavaでも普及した。
また、初期のころはCore J2EE Patternsという本にも記載されていました。

DDDが後押しするリポジトリ・パターン
DAOとリポジトリパターンの実装の主な違いは、クライアントとデータベースの距離です。
DAOが永続化レイヤーの振る舞いを公開するのに対して、リポジトリはビジネス指向の公開になる傾向があります。

アクティブレコードは、モデルでデータベース操作を使う複雑さを軽減する方法である。

レイヤーを使う動機が理解できただろう。成熟したJavaエコシステムがあり、すべてを手作業で行う必要がないのは、フレームワークのおかげだ。
非常に多くのフレームワークがあるので、APIの使いやすさ、近さ、ランタイムに基づいて分類することができる。
・ユーザビリティ:フレームワークを見るときに評価すべき項目の1つ、そのAPIの使いやすさである。
 Agnostic API/Specific API
・近接性:フレームワークとデータベース・ストレージ・エンジンは、 どの程度近接しているか?
 Communication/Mapping
・ランタイム:このは、主にアノテーションの使用に依存するマッピングフレームワークに影響します。
 Reflection/Reflectionless

Javaマッピングフレームワークにはさまざまなものがあり、APIの使いやすさ、データベース実装の詳細への近さ、実行時の機能など、それぞれがトレードオフの関係にある。プロジェクト固有のニーズを考慮し、そのニーズに最も合うフレームワークを選択することが重要だ。

DTOパターン
システムのレイヤーやコンポーネント間のデータ転送を容易にするデザインパターンです。
プレゼンテーション層をビジネスロジックから切り離し、アプリケーションの柔軟性と保守性を高めるために使用できます。

memoO'REILLY Learning

Posted by shi-n