だいたい死んでる

渋谷で働いているWEBプログラマーです。

第1章 アプリケーションアーキテクチャとは1

この記事は「アプリケーションアーキテクチャ設計パターン」を読んだまとめ記事です。 今回は第1章についてまとめます。読書のメモになるためより詳しくは本を読んでください。

www.amazon.co.jp

アーキテクチャとは 

システム開発現場でのアーキテクチャは以下のように多数の意味をもつ。

この本はアプリケーションアーキテクチャを主題に書かれている。 アプリケーションアーキテクチャはアプリケーションアーキテクチャを設計する上で基本的な設計方針であり制約である。

アプリケーションアーキテクチャの目標

2つの目標がある

アプリケーションの構造

規模の大きなシステムを小さな部品に分けて行く。部品は「コンポーネント」と呼ぶ。コンポーネントを適切に分けることで管理しやすくする。分割の粒度とコンポーネント同士の連携をどのようにするかを考える必要がある。

アプリケーションの処理方式

どのように処理を記述するかを考える。

アプリケーションアーキテクチャが必要な理由

アプリケーションの整合性確保

アプリケーションアーキテクチャを適切に設計しないと、全体的な整合性が崩れてしまう事があり、これは結合テストなどの後工程で顕在化する傾向にある。

設計品質の向上

アプリケーションアーキテクチャは設計上の制約であるため十分に検証する必要がある。アプリケーションアーキテクチャの設計が不十分であると各ユースケース担当者が設計する余地が残ってしまう。その結果、検証が不十分なアーキテクチャを採用してしまったり、機能要件に対して不十分もしくは過剰なアーキテクチャになってしまう可能性があります。 適切に設計することにより、良い意味で自由が奪われるため、各ユースケース開発における設計品質を一定に保つことができます。

拡張性・保守性の向上

リリースして終了ではなく投資を回収する必要があり、長期間運用されることを考慮しなければいけない。運用期間の間に機能拡張や仕様変更を行う必要が出てくる。 アプリケーションアーキテクチャが適切に設計されていないと、機能拡張や仕様変更での影響範囲が大きくなってしまい、場合によってはアプリケーションを作り直す必要が出てくるかもしれない。 このような事態を回避するためにはコンポーネントを適切に分割する必要がある。コンポーネント同士はお互いに疎結合にする。

アプリケーションアーキテクチャ設計のポイント

アプリケーションアーキテクチャは非機能要件と密接な関係がある。 非機能要件も充足できるように設計する必要がある。 また、目的が複数ある中で全てを達成しようとするとビジネス的に成功と言えなくなる場合や学習コストが高すぎるとチームメンバーへの負荷が高まる。現実的な妥協点を見つけ出すことも大切。

まとめ

文章の量が増えてきたので、別記事で続きを書いていきます。