SlideShare uma empresa Scribd logo
1 de 31
Reading
エンタープライズアプリケーション
アーキテクチャパターン
2017/11版
morimorihoge
はじめに
• この発表の対象者
• 仕事で業務アプリ(B2B/B2C問わず)を書くあらゆる人
• 話すこと
• 本書の概要と構成
• 本書の良い所・難しいところなど
• 対象ドメイン
• 話さないこと
• 各パターンの詳細(次回以降で何回かに分けて解説予
定)
About
• エンタープライズアプリケーションアーキテクチャパターン
• 原題: Patterns of Enterprise Application Architecture
• Martin Fowler
• 日本語版は翔泳社から出ているので、たまにKindleで値引きして
いる
• Kindle: 6,264円 / 物理本: 〜6,264円
Review?
・・・良著?というにはとても不安なレビュー数&評価
翻訳がひどくて評価が低いタイプの良著の予感?
本書の訳はひどいのか?
• 確かにひどい所もあるが、原著になるべく忠実に訳したタ
イプの翻訳書だと思えばないよりはましレベル
• 固有名詞をカタカナ語のまま訳しているケースが多かったり、たま
に変な直訳(訳さなくても良い語の訳)がある
• ひどい誤訳もそこそこある(おかしいと思ったら原著見た方が良
い)
• とはいえ原著で全部読むのも大変なので、意味はあるかな
• そもそも読みにくいのは原著のせいもある
• 文章はわかりやすいが抽象度の高い言葉・用語が多く、各用語の
意味を確実に捉えて読まないと意味が掴めない(恐らく訳者もそう
いう点で意訳を諦めたんだと思う)
• 初心者向けとはとても言えない内容で、少なくともそれなりの数・大
きさのシステムの設計経験者でないと理解が難しい難易度
• サンプルソースが全体的に古め(Java/C#)
本書に必要な前提知識
• GoFのオブジェクト指向設計・デザインパターンレベルの知
識
• 当然理解しているものとして用語が出てくるので、理解があいまい
ならまずそちらを
• Web及びRails等のフレームワークに閉じないアプリケー
ション設計知識
• RailsでしかWebアプリ書いたことなくて、Railsの設計もまともに説明
できない人にはかなりむずかしい(少なくとも一人で読むのはつら
い)
• フレームワークの設計に関する知識や、オレオレフレームワーク・
ラッパークラス等を書いた経験などがあると理解が深まりやすい
• 様々なコンピュータサイエンス用語の正確な理解
• 元々曖昧な用語については初出時にスコープの解説があるが、一
般に使われる用語については解説なしで使われるので語彙が必
要
• 通常この手の技術書は7〜8割くらいの用語が分かれば残りは意
訳で読み進められるが、この本は9割くらいの用語を理解できない
とよく分からなくなる印象
本書はどういう人にためになるのか?
• 機能レベルではなく、アプリケーション全体レベル
の設計を行うアーキテクト
• GoFのデザインパターンよりも1段階広い範囲
• エンタープライズアプリケーションにおけるよくある設計
に対して名前を付け、設計の議論の精度を高める
• 色々なプロジェクトを渡り歩く人達
• それぞれがどのような設計パターンで書かれているの
かを分類できるため、プロジェクトに後入りした場合でも
「そのプロジェクトのルール(パターン)」に乗りやすくな
るのでは
BPS社内的には・・・
• 既に機能開発は問題なく任されているレベルの人が、
アーキテクトとしてプロジェクトの技術責任者レベルに
なるのに必要な内容
for BPS inner members
読んでいく
読み進め方
• 1部:概論と2部:パターンの二部構成
• 概論を先に読み、パターンは流し見て必要になったと
きに読み込む
• 概論:パターンの章立てが1:1対応していないのでちょっと読
みにくいが、目次を見れば大体何の話をしたいかは分かる
はず
• 概論はどれも大事な概念や問題に集中しているので、
読み飛ばさないで読み込むのがよさそう
• 逆にパターンの方はイマドキはフレームワークがやってたり
する機能も多く、読み飛ばして良さそうなものもある
本書の構成
• 概論
• レイヤ化 -> 全体
• ドメインロジックの構築
• リレーショナルデータベース
へのマッピング
• Webプレゼンテーション
• 並行性
• セッションステート
• 分散ストラテジー
• まとめ
• さまざまなパターン
• ドメインロジックパターン
• データソースのアーキテク
チャに関するパターン
• オブジェクトリレーショナル振
る舞いパターン
• オブジェクトリレーショナル構
造パターン
• オブジェクトリレーショナルメタ
データマッピングパターン
• Webプレゼンテーションパター
ン
• 分散パターン
• オフライン並行性パターン
• セッションステートパターン
• ベースパターン
この辺は「その他」みたいな雰囲気に見える
今回は
• 「はじめに」に相当する部分を紹介
• 本題に入る前の部分だが、本書の想定スコープや用語
定義が書かれているのでとても大事
• 目次
• アーキテクチャ
• エンタープライズアプリケーション
• エンタープライズアプリケーションの種類
• パフォーマンスに関する考え
アーキテクチャ
• 「アーキテクチャ」って色々な人がいろんな意味で重要
そうに使うけど、人によって意味が違ってるよね・・・
• とはいえ以下はみんな同意してくれるよね
• システムを部品に分割してブレークダウンするときの最上位
の概念である
• 一度決定すると変更が困難であること
• 本著では「設計」と「アーキテクチャ」の境目がどこにあ
るのか、という話はしないことにするよ。きっとそれは
主観的な話だしね
• 注: 原著との用語対応
• design: 設計
• architecture: アーキテクチャ
エンタープライズアプリケーション(1)
• 「エンタープライズアプリケーション」とは?
• 給与計算・診療記録・出荷管理・コスト分析・信用調査・
保険・会計・顧客サービス・外国為替取引など
• 複雑なデータ、論理的とは限らないビジネスルールを
扱う
• 「エンタープライズアプリケーション」でないもの
• 自動車用燃料噴射制御・ワープロ・エレベータ制御・化
学プラント制御・電話交換・OS・コンパイラ・ゲーム
エンタープライズアプリケーション(2)
• データに着目した特徴
• 永続的データを扱う
• 年単位で記録・保存・参照される
• 途中でデータ構造が変わったりもする
• アプリケーション間での移行が発生したりする
• とてもたくさんのデータを扱う
• 数千万件程度は珍しくない
• いまどきは通常データベースを使う
• 同時アクセスされる
• C/Sシステムのため、数人〜数百・数万規模の同時アクセスを扱
う
• 数多くの画面で構成される
• 扱うデータごとにも違うし、同じデータに対しても目的ごとに異なる
UIを持ったりする
エンタープライズアプリケーション(3)
• 他のエンタープライズアプリケーションと統合・連
携する
• 連携方法もさまざま。ファイル連携やメッセージングな
どなど
• ビジネスプロセスとデータ概念の不一致がある
• 現実世界のビジネスルールと論理的に扱いたいソフト
ウェアの間に常にジレンマがある
• (ソフトウェア)ロジック的におかしいやり方も、ビジネス
側の要求として受け入れなければいけない
• ※そして大抵そういうところは大きな収益を上げていたりする
エンタープライズアプリケーション(4)
• エンタープライズアプリケーション≒大規模システ
ム
• 大規模なものと思いがちだが、そういうわけでもない
• むしろ筆者はアーキテクチャとプロセスを単純化して大
規模プロジェクトを小規模化することで、小規模システ
ムの利点にも着目している
• 小規模システムの方がダウンしても損害は少なかったりする
エンタープライズアプリケーションの種類(1)
• 様々な種類があり、問題が異なればやり方も異なる。設計
時には代替案をいくつか考えておくことが大事である
• 例
• B2C小売りWebシステム
• ユーザが増えた際のハードウェア拡張性が必要
• アプリケーションのドメインロジックはわかりやすい
• リース契約処理の自動化システム
• ユーザ数は少ない
• アプリケーションドメインロジックはとても複雑になる(月々のリース料計
算、期限前返品、予約時のデータチェックなど)
• 小規模な会社の経費管理システム
• ユーザは少ない
• ロジックもシンプル
• とても短期間で作る必要があり、ユーザ要求に従ってシステムへの機能
追加が必要になる(支払方法の追加、レポーティングなど)
エンタープライズアプリケーションの種類(2)
• あるアプリケーションで使ったアーキテクチャを他
のアプリケーションに応用してもメリットが得られな
いことがある
• かといって、システムに柔軟性を加えても、柔軟性を持
たせるために追加された複雑性によって、実際には将
来的にシステムを進化させることが難しくなり、利益を
得るのが遅れてしまう
• 全ての例にマッチする1つのアーキテクチャはない
• アーキテクチャの選択とは、それぞれのシステム固有
の問題を理解し、その理解に従って適切な設計を選択
しなければならない
パフォーマンスに関する考え(1)
• アーキテクチャの決定の多くはパフォーマンスに関す
るもの
• ほとんどのパフォーマンス問題は実際に実行・測定して最適
化していくことが望ましい
• 一方、後からの最適化ではどうにもならないアーキテクチャ
上の決定もある
• パフォーマンスは実際の環境・設定で測定しなければ
妥当なアドバイスをすることができないため、本書のよ
うなアーキテクチャ一般の話の中で議論するのは難し
い
• パフォーマンスを考慮して設計の採用/不採用を決めたが、
実環境で測定してみたらそんな考慮は不要だった、という
ケースがままある
パフォーマンスに関する考え(2)
• 本書で扱う用語定義(1)
• レスポンス時間(response time)
• システムが外部からのリクエストを処理するのに要する時間
• レスポンス性(responsiveness)
• リクエストに対してどれだけ早く応答を返すか
• 待ち時間(latency)
• あらゆるリクエストに対してシステムが応答するのに必要な最小
の待ち時間
• スループット(throughput)
• ある時間内にどれくらいの処理を行えるか。エンタープライズアプ
リケーションではtps(transactions per sec.)が一般に使われる
• 負荷(load)
• システムにかけているストレスの量。例えばユーザ数で、他の指
標と合わせて「ユーザー数10人の場合、レスポンス時間は0.5秒」
みたいな使い方をする
パフォーマンスに関する考え(3)
• 本書で扱う用語定義(2)
• 負荷感度(load sensitivity)
• レスポンス時間が負荷によってどれくらい影響を受けるか
• 負荷に対してより悪化の割合が大きい場合「劣化
(degredation)」という用語を使用する
• 効率性(efficiency)
• パフォーマンス / リソース
• 容量(capacity)
• 最大負荷、又は最大スループット
パフォーマンスに関する考え(4)
• 拡張性(scalability)
• リソース(通常はハードウェア)追加がパフォーマンスに
影響するか
• 例: CPUを2倍にするとスループットは20tps増加する
• 垂直拡張性(vertical scalability)
• 別名スケールアップ(scaling up)。サーバ1台あたりのリソース
を増やす
• 水平拡張性(horizontal scalability)
• 別名スケールアウト(scaling out)。サーバの数を増やす
パフォーマンスに関する考え(5)
• エンタープライズアプリケーションでは容量や効率
性よりも拡張性に重点を置くことが多い
• 設計者はあらかじめ定められたハードウェア環境のな
かで効率性を上げることに注力しがちだが、拡張性さえ
あるならば新しくハードウェアを拡張した方が安上がり
になりがち
パターン(1)
• パターンは「繰り返し発生する一つ以上の問題に
対して共通かつ効果的に対処する」もの
• パターンは現実に根ざしているので、解決策の核
(core of solution)を捜すために人の行動や物事の
動き方を観察する必要がある
• 難しいことだが、見つけられればとても有用である
• 我々にとって必要なのは以下であるので、パター
ン詳細について全て細かく覚える必要はない
• どんなパターンがあって
• どんな問題を解決して
• どうやって問題を解決するか
パターン(2)
• パターンを見つけても、闇雲に適用すると死ぬ
• 世の中にはパターンツールというものがあるようだが、
そういうのを使うとやりがち
• パターンそのものはあくまで「生焼け(half baked)」
であり、適用する際には自分のプロジェクトごとに
焼き上げる必要がある
パターン(3)
• 各パターンは比較的独立しているが、分離してい
るというわけではない
• 本書ではできるだけパターンを分割し、独立した状態に
しようとしている(解説注: これが正に「生焼け」であるこ
との要素だと思われる)
• パターンは新しいもの(発明する)ではなく、すでに
ある中から発見するもの
• パターンに名前を付けて設計者やチーム内での語彙と
して使える用にすることが大事
パターン(4)
• 本書における「パターン」の構成
• パターン名
• 目的: 2〜3行の要約
• スケッチ: 主にUML図
• 問題の解説
• 動作方法
• 使用するタイミング
• 参考文献
• サンプルコードなどはあるが、あくまでエラー処理など
を除いた「生焼け」なものなので、動作可能なソース
コードとして公開はしない方針
パターン利用に関する制限
• パターンの集合がエンタープライズアプリケーショ
ン開発のガイドとはならない
• 本書のパターンも著者が現場で目にしてきたパ
ターンではあるが、ソフトウェアは何事も常に変化
するのでこれが完全なモノではないよ
• パターンの使用は終点ではなく出発点である
• 「生焼け」のパターンは我々自身が取り組むプロジェク
トに適用する中で焼き上がるのだ(意訳)
まとめ
• 本書の概要&at a glance紹介
• 読者ターゲット層と刺さりそうな読者・前提知識の
まとめ
• 「はじめに」相当部分の解説
• 次回からは概論を順番にやっていきつつ、関連す
るパターンをいくつか紹介しようかなと思います

Mais conteúdo relacionado

Semelhante a reading エンタープライズアプリケーションアーキテクチャパターン 1.概要

アプリデザインの共通言語
アプリデザインの共通言語アプリデザインの共通言語
アプリデザインの共通言語Hiroki Akiyama
 
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosakaDDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosakaakipii Oga
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」nishikawa_makoto7
 
Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か BlazorHiroyuki Mori
 
俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かうAkira Suenami
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)nishikawa_makoto7
 
What i learned from translation of the sre ryuji tamagawa
What i learned from translation of the sre ryuji tamagawaWhat i learned from translation of the sre ryuji tamagawa
What i learned from translation of the sre ryuji tamagawaRakuten Group, Inc.
 
開発者のためのUIデザイン入門
開発者のためのUIデザイン入門開発者のためのUIデザイン入門
開発者のためのUIデザイン入門Hiroyuki Mori
 
リーダブルコード
リーダブルコードリーダブルコード
リーダブルコードJun Ootani
 
「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...
「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...
「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...綾子 金子
 
第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学Shinya Hayakawa
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術Daisuke Tamada
 
20161202 lte publish
20161202 lte publish20161202 lte publish
20161202 lte publishSix Apart
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)
お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)
お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)Yukie Kushida
 
世界に通用するアプリケーションを開発しよう
世界に通用するアプリケーションを開発しよう世界に通用するアプリケーションを開発しよう
世界に通用するアプリケーションを開発しようdikehara
 
仕様書作成のポイント_180814
仕様書作成のポイント_180814仕様書作成のポイント_180814
仕様書作成のポイント_180814Sugimoto Chizuru
 
「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来Yoshihito Kuranuki
 
ヘルシープログラマ・翻訳と実践
ヘルシープログラマ・翻訳と実践ヘルシープログラマ・翻訳と実践
ヘルシープログラマ・翻訳と実践Ryuji Tamagawa
 

Semelhante a reading エンタープライズアプリケーションアーキテクチャパターン 1.概要 (20)

アプリデザインの共通言語
アプリデザインの共通言語アプリデザインの共通言語
アプリデザインの共通言語
 
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosakaDDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka
DDD読書会@大阪(最終回)のLT資料「ドメイン駆動設計で気づいたこと~権利の概念とERP分析への適用」 #dddosaka
 
議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」議論を描く技術「ファシリテーショングラフィック」
議論を描く技術「ファシリテーショングラフィック」
 
Uno Platform か Blazor
Uno Platform か BlazorUno Platform か Blazor
Uno Platform か Blazor
 
俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう俺がモデルだ!問題に立ち向かう
俺がモデルだ!問題に立ち向かう
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
 
What i learned from translation of the sre ryuji tamagawa
What i learned from translation of the sre ryuji tamagawaWhat i learned from translation of the sre ryuji tamagawa
What i learned from translation of the sre ryuji tamagawa
 
開発者のためのUIデザイン入門
開発者のためのUIデザイン入門開発者のためのUIデザイン入門
開発者のためのUIデザイン入門
 
リーダブルコード
リーダブルコードリーダブルコード
リーダブルコード
 
「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...
「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...
「導入事例メーカー」Shoot from Osaka(n) vol.5 ~ 「おもろいもん」や「新しいもん」をアピールする記者会見(ピッチ) #Shoot...
 
第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学第1回 プログラマのための計算機科学
第1回 プログラマのための計算機科学
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
 
20161202 lte publish
20161202 lte publish20161202 lte publish
20161202 lte publish
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
Et west2013
Et west2013Et west2013
Et west2013
 
お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)
お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)
お客様と開発側を「画面モック」で繋げる仕様定義の秘訣(ET-west2013)
 
世界に通用するアプリケーションを開発しよう
世界に通用するアプリケーションを開発しよう世界に通用するアプリケーションを開発しよう
世界に通用するアプリケーションを開発しよう
 
仕様書作成のポイント_180814
仕様書作成のポイント_180814仕様書作成のポイント_180814
仕様書作成のポイント_180814
 
「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来「納品のない受託開発」にみるソフトウェア受託開発の未来
「納品のない受託開発」にみるソフトウェア受託開発の未来
 
ヘルシープログラマ・翻訳と実践
ヘルシープログラマ・翻訳と実践ヘルシープログラマ・翻訳と実践
ヘルシープログラマ・翻訳と実践
 

reading エンタープライズアプリケーションアーキテクチャパターン 1.概要