設計アプローチ(POA/DOA/MDA/SOA/ROA/OOAD)
概要
- 日程: Day 3 / セッション 03
- 時間: [10:10-10:40]
- 形式: 座学
- ゴール: 5つの設計アプローチ(DOA/MDA/SOA/ROA/OOAD)をそれぞれ1文で説明でき、歴史的な変遷を順に並べられる
- 学習形式: 対話型解説
導入(5分)
前セッションで「UNIX哲学=設計の土台」を学びました。今度はその上に建つ「建築様式」にあたる、5つの設計アプローチを見ていきます。
各アプローチは「システムの中心に何を据えるか」が異なります。プロセスを中心にするか、データを中心にするか、サービスを中心にするか、リソースを中心にするか、オブジェクトを中心にするか。中心が違えば、設計の見え方が大きく変わります。
たとえば家を設計するとき、「リビング中心」「キッチン中心」「収納中心」で間取りが全然違いますよね。それと同じです。
本編(20分)
1. 5つの設計アプローチ概観
1970s
処理中心"] --> DOA["DOA
1980s
データ中心"] DOA --> OOAD["OOAD
1990s
オブジェクト中心"] OOAD --> MDA["MDA
2000s
モデル中心"] MDA --> SOA["SOA
2000s
サービス中心"] SOA --> ROA["ROA
2010s
リソース中心"]
| 略称 | 正式名 | 中心 | 一言で |
|---|---|---|---|
| POA | Process Oriented Approach | プロセス | 「処理の流れ」から設計する |
| DOA | Data Oriented Approach | データ | 「持つべきデータ」から設計する |
| OOAD | Object Oriented Analysis & Design | オブジェクト | 「データ+振る舞い」を1つの単位として設計する |
| MDA | Model Driven Architecture | モデル | 抽象モデルから自動生成するように設計する |
| SOA | Service Oriented Architecture | サービス | 業務単位の「サービス」を組み合わせて設計する |
| ROA | Resource Oriented Architecture | リソース | URIで識別できる「リソース」を中心に設計する |
ここがポイント
「中心が違うだけで、どれも要素は同じ」です。データ・処理・振る舞いという要素は、どのアプローチでも登場します。違うのは「何を主役にするか」だけ。
2. それぞれを掘り下げる
POA(Process Oriented Approach)プロセス指向
「業務の流れ図(フロー)」を最初に書く方式。1970年代の主流。
- 例: 「注文受付 → 在庫確認 → 出荷指示 → 請求書発行」のフローを描き、各ステップをプログラムにする。
- 強み: 流れが分かりやすい。
- 弱み: フローが変わるたびに全部書き直し。データ重複が起きやすい。
DOA(Data Oriented Approach)データ指向
「業務に必要なデータ」を先に定義し、処理は後で考える方式。1980年代に主流化。
- 例: 「顧客テーブル、商品テーブル、注文テーブル」をER図で定義する。
- 強み: データは長く残るので、土台が安定する。
- 弱み: データだけ綺麗にしても、業務ロジックが複雑になりがち。
- 業務システムの王道。RDBの普及と運命を共にした。
OOAD(Object Oriented Analysis & Design)オブジェクト指向
「データ+それを操作する処理」を1つの単位(オブジェクト)にまとめる方式。1990年代に主流化。
- 例: 「Userオブジェクト」が「自分のパスワードを暗号化する」処理を持つ。
- 強み: 現実世界に近い形でモデル化できる。再利用がしやすい。
- 弱み: 設計者の力量が出やすい。学習コストが高い。
MDA(Model Driven Architecture)モデル駆動
「抽象モデル」を作り、それを変換してコードに落とす方式。2000年代にOMGが提唱。
- 例: PIM(プラットフォーム独立モデル)→ PSM(プラットフォーム特化モデル)→ コード自動生成
- 強み: 仕様変更が伝播しやすい。
- 弱み: ツールへの依存が大きい。普及が限定的。
SOA(Service Oriented Architecture)サービス指向
「業務単位のサービス」をネットワーク越しに組み合わせる方式。2000年代に企業システムで流行。
- 例: 「決済サービス」「在庫サービス」「会員サービス」を独立して作り、メッセージで連携。
- 強み: 異なる技術スタックでも連携できる。
- 弱み: 通信オーバーヘッド。サービス境界の設計が難しい。
- 現代のマイクロサービスの祖先。
ROA(Resource Oriented Architecture)リソース指向
すべての情報を「リソース」とみなし、URIで識別、HTTPメソッド(GET/POST/PUT/DELETE)で操作する方式。
- 例:
GET /users/123、POST /orders - 強み: シンプル、Web標準と相性が良い、キャッシュしやすい。
- 弱み: 複雑な業務処理を素直に表現しにくい。
- REST APIの設計思想そのもの。
コラム
オブジェクト指向の生みの親、アラン・ケイは1970年代に「メッセージング(オブジェクト間のやりとり)こそ本質だ」と言いました。彼の本当に作りたかったオブジェクト指向は、「クラスや継承の話ではなく、生き物のように自律的なオブジェクトが対話するシステム」でした。現代のマイクロサービスは、ある意味アラン・ケイの夢の実現と言えます。
3. どう選ぶか
「どのアプローチが最強」はありません。プロジェクトの性質で選びます。
| シーン | おすすめ |
|---|---|
| 業務システム(基幹系) | DOA |
| 複雑なドメインロジック | OOAD + DDD(Day 3後半) |
| 複数システム連携が必要 | SOA / マイクロサービス |
| Web API中心 | ROA(REST) |
| 短期間でモックが欲しい | POA(処理の流れだけ書く) |
自チームの開発テーマは何を選ぶべきか、後半セッションでも判断していきます。
ここがポイント
複数を組み合わせるのが現実です。「内部はOOAD、外向きはROA」のような構成は普通です。
💬 AIに聞いてみよう
ここまでの内容で疑問があれば、AIに質問してみましょう。たとえば:
- 「DOAとOOADの違いを、家計簿アプリの設計を例に説明して」
- 「ROA(REST)とSOAって何が違うの? 似てる気がする」
- 「MDAが普及しなかった理由は何?」
まとめ(5分)
設計アプローチは「システムの中心に何を据えるか」で分類されます。POA→DOA→OOAD→SOA→ROAの順に時代が進み、それぞれ違う課題に対応してきました。「どれかが正解」ではなく、プロジェクトに合わせて選びます。
次のセッションでは、これらのアプローチを実装に落とすときに使われる「MVC・MVVM・DDD」という具体的なパターンを学びます。
🔄 振り返りチェック
- 5つの設計アプローチを、それぞれ1文で説明できますか?
- 自チームの開発に最適なアプローチはどれだと考えますか?
- DOA、OOAD、ROAの違いを1分で説明できますか?
補足資料
- 参考リンク: マーチン・ファウラー『Patterns of Enterprise Application Architecture』、Roy Fielding『Architectural Styles and the Design of Network-based Software Architectures』(博士論文・RESTの原典)
- 発展課題: 自分が好きなWebサービスのAPIドキュメントを1つ読み、ROAかSOAか判定してみる
学習ガイド
想定される質問と回答例
| 質問 | ヒント |
|---|---|
| マイクロサービスはSOAと同じ? | 思想は同じ(サービスを組み合わせる)。違いは粒度の細かさと、運用の自律性(独立デプロイ) |
| ROAとREST APIは同じ? | REST APIはROAを実現する代表的な手段。ROA=設計思想、REST=実装プロトコル |
| OOADって今でも使うの? | 使う。ほぼすべてのオブジェクト指向言語(Java/Python/JS等)でOOADの考えは現役 |
つまずきやすいポイント
| つまずきポイント | ヒント |
|---|---|
| 各アプローチの境界が曖昧 | 「中心に何を据えるか」で考えると整理しやすい |
| 略称が多くて覚えられない | まずDOA・OOAD・ROAの3つだけ確実に。残りは必要時に調べる |
| 自プロジェクトにどれを選ぶか決められない | Webアプリで作るなら、まずROA(REST)が無難 |