Rのつく財団入り口

ITエンジニア関連の様々な話題を書いているはずのブログです。

【感想】エンタープライズアプリケーションアーキテクチャパターン

難解なアーキテクチャ設計のバイブル本

 ややこしいですが原題はPatterns of Enterprise Application Architecture、通称PoEAA, PofEAAと略されるアーキテクチャ設計系のバイブル。設計やリファクタリング本で有名なかのマーチン・ファウラーさんの本です。6000円ぐらいして紙だと分厚い本ですが、電子書籍でやっとこさ読了しました。いやー長かった。

エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION)

エンタープライズ アプリケーションアーキテクチャパターン (Object Oriented SELECTION)

イマイチ?な邦訳

 日本語版は翻訳の残念さが時々批評されたりしています。確かに幾つかの単語は訳が残念ではありますが、日本語で意味が通じないほどではないような。

  • 「軽オフラインロック
    →ふつう楽観ロック、楽観的ロック、オプティミスティック・ロック
  • 「重オフラインロック
    →同じく悲観ロック、悲観的ロック、ペシミスティック・ロック
  • 「緩ロック」は原文だとCoarse Grained Lockらしい
    →これはよく分かりませんでした。
  • Data Transfer Object(DTO)が「データ転送オブジェクト」と「データ変換オブジェクト」
    →この2つで混乱してるのは確かに分かりにくいですね。大体複数のレイヤー間や他システムとの連携部分にデータを中に持って移動するので「転送」も合ってるのですが、ふつう「変換」が多いでしょうか。
     ちなみに僕が仕事で手順書に書いたり人に説明したりする時は、ふつうに「DTO」とか平たく「データの入れ物クラス」と言っちゃいます。
  • RDBトランザクション分離レベル4つが「直列化可能」/「繰り返し可能な読み込み」/「コミットされた読み込み」/「コミットされていない読み込み」
    →とデータベース回りをよく知らない人が直訳したような感じになっています。serializale/repeatable read/read commited/read uncomitted とそのまま英語で書くことが多いですね。
  • 「幻像」「幻像読み込み」
    →ファッ!? となりましたが、これファントムリードのことですね。日本語のRDB周りの技術情報でもカタカナで普通書くと思います。

 Phantomはもともと亡霊や幽霊、RPGのアンデッドモンスターやオペラ座の怪人のあれですから「幻」で元の意味は合ってるんですが、突然出てくると違和感がありますね。
しかし幻像読み込みって中二っぽくてちょっとカッコイイですね。「いつからその幻像がコミット済みだと錯覚していた?」→「…なん…だと….」とかそういう流れで。

 冗談はさておいて他はそれほど違和感がある訳はなかったのですが、この本で定義されたパターン名のカタカナ単語が本文中、特に前半の第一部の概論でばんばん出てくるので読み進めるのはかなり骨が折れます。パターン名だけでも元の英語名を横に書いてくれるとだいぶ理解しやすかったと思います。
 時々新人エンジニア向けのおすすめ書籍に名が上がったりしていますが、うーん大学で専攻してなかったら1年目には厳しいのではないでしょうか。(少なくとも24歳の僕が読んだら100%挫折する自信がありますw)

体系化されたパターン

 GoFデザインパターンが23種あるように、アーキテクチャの設計パターンを体系化し、それぞれに明確な名前を付けて解説してあります。
画期的な新しい仕組みのようなものはなくて、どこかのシステムやフレームワークで見たパターンや、中には「あれ、これ当たり前のことじゃん」というようなパターンもありますが、それぞれに名をつけてきちんと体系化して整理したところに本書の意味があるのでしょう。

 各パターンについてネット上の情報や書評だと以下が参考になります。

https://martinfowler.com/eaaCatalog/martinfowler.com

matope.hatenablog.com

kens30.blog92.fc2.com

yasutech.blogspot.jp

 うーん僕も1回で完全に理解しきったとは言えないので後でもう一度ちゃんと読み返そうかと思います。

個人的に納得したパターン

  • 一番納得したのはやはり基本のレイヤー分割の話でした。
  • ドメインロジックパターン。仕事で携わったシステムでは大体、ドメインモデルとトランザクションスクリプトの中間ぐらいが当てはまりそうな。
  • DBアクセスを分類したデータソースアーキテクチャパターン。これは仕事で携わったものはデータマッパーがほとんどでした。
  • MVCなどのウェブプレゼンテーションパターン。これも今のWebアプリケーションフレームワーク各種では必ず内部で採用しています。

かのRuby言語の有名なRuby on Rails、そしてRailsリスペクトっぽく作られている感のあるPHP言語の名の知れたフレームワーク各種で使われているActive Recordパターンは、この本で解説されています。
 完成されたフレームワークを用いて開発していると意識せず使っていても、「あっ、いつも見るあれって実はこのアーキテクチャパターンだったのか」なんて気付きも出てくると思います。個々のクラス群のプログラミングを超えてより上位のアプリケーション全体が見えてきた頃、読解にチャレンジしてみるのもよいと思います。

.NETの世界では以下の本が対応してるそうなのでいつの日か読もうと思いました。

PofEAAの先というとこのへんの本がよく上がりますが……さらに難解ともよく聞くので若干ためらいがあります。

エリック・エヴァンスのドメイン駆動設計

エリック・エヴァンスのドメイン駆動設計

実践ドメイン駆動設計 (Object Oriented SELECTION)

実践ドメイン駆動設計 (Object Oriented SELECTION)

ビヨンド ソフトウェア アーキテクチャ (Object Oriented Selection Classics)

ビヨンド ソフトウェア アーキテクチャ (Object Oriented Selection Classics)

こちらが古典のいわゆるPOSA本。もう手に入りにくいようですね。

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系

ソフトウェアアーキテクチャ―ソフトウェア開発のためのパターン体系