エンタープライズアプリケーションアーキテクチャパターン読んだ

エンタープライズアプリケーションアーキテクチャパターンの翻訳本を読んだ。

以前流し読みしたのだが、クリーンアーキテクチャを読んだら改めて読みたくなった。

要約

  • エンタープライズアプリケーションとは?
    • ウェブアプリのこと
  • パターン紹介

基本的には、パターン紹介本だった。

この本に紹介されてるパターンは全部著者のページで確認できる。

感想

意外だったのが、本文中にヘキサゴナルアーキテクチャに関する言及があったこと。

以下、気になったパターンを書いていく。

オブジェクトリレーショナル構造パターン(Object-Relational Structural Patterns)

ドメインモデルをRDBに格納するためのパターンのこと

  • シングルテーブル継承(Single Table Inheritance
    • 継承ツリーの全てのクラスを単一のテーブルに格納する
    • これはよくやる
  • クラステーブル継承(Class Table Inheritance
    • クラスの数だけテーブルを作る。
    • 子クラスのテーブルは親クラスで宣言されたメンバ変数に対応する列は持たない
    • 一度やって面倒だったのでもうやりたくない
  • 具象テーブル継承(Concrete Table Inheritance
    • 具象クラスの数だけテーブルを作る
    • 子クラスのテーブルは親クラスで宣言されたメンバ変数に対応する列も持つ
    • 使ったことないが、クラステーブル継承よりはJOINが少ないのでやりやすそうだと思う

オフライン並行性パターン(Offline Concurrency Patterns)

RDB更新時のコンフリクトに関するパターンのこと

  • 軽オフラインロック(Optimistic Offline Lock
    • ちょっとこの翻訳はひどいと思う
    • テーブルの列にバージョンを加え、更新時にバージョンを指定して更新させる。読み込み以降に誰かが更新してた場合に更新失敗させるパターン
    • 衝突してることだけは通知したい、みたいな場合には便利かもしれない。
  • 重オフラインロック(Pessimistic Offline Lock
    • この翻訳もひどい
    • 編集前にロックを取得させるようなパターン(RDBの提供するトランザクションとは別)
    • コンフリクト防止はドメインの問題としてまじめに考えたほうがいいようだ

ベースパターン(Base Pattern)

  • セパレーテッドインターフェース(Separated Interface
    • DIP(Dependency Inversion Principle)のこと
  • レジストリ(Registry
    • これは悪そうなパターンで、Singletonの親戚なのでユニットテスト不可能。Repositoryと語感が似てるのも良くない