Design It!
1章ソフトウェアアーキテクトになる
使う側の観点からの要求を理解したうえで、ソフトウェアの要求を定義
品質特性(availability, capacity, ...)を定義
技術的的負債とは?:現在の設計と、継続的に価値を届け続けるために必要な設計との差分
技術的負債の量=差分を埋めるのに必要な労力
アーキテクチャの3種類の要素と関係
モジュール:設計時に現れる構造、コード上にある
クラス、パッケージ、DB のテーブル とか
コンポーネント&コネクタ(C&C):実行時に現れる構造
オブジェクト、コネクション、スレッド、プロセス、フィルタ とか
割り当て:モジュール、C&C どうしの対応関係や、それらの物理要素との対応関係
サーバー、 コンテナ、人、チーム、LB とか
ソフトウェアアーキテクチャが提供するもの
大きな問題を、より管理しやすい小さい問題に分割する
人々の協働の仕方を示す(どう分割するか、それぞれがどう関連しているか=どう担当分けをするか、各担当がどう協働するか)
会話のための語彙を提供する
コストや品質特性など、機能以外の物に目を向けるきっかけ(これらの考慮はアーキテクチャの設計に必須)
コストのかかる間違いを見つける(ちゃんと設計することで、この設計ではこういう拡張が難しい、とかをあぶりだせるってこと?)
変化への柔軟な対応を可能にする(変化の方向をコントロールするというほうが正しそう?)
アーキテクチャ構造の中でソフトウェアは変化していく(アーキテクチャ=変えるのが難しいもの、なため)
デザイン志向の基礎