アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築
書評ではありません。 読書メモです。
書籍情報
- タイトル: アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築
- 著者: 米久保 剛
1章
アーキテクトとは?
ビジネス上の利益を産むために、ソフトウェアの設計をする。
アジリティの確保
コーディング力も必要だがビジネスへの理解も必要
2章
ソフトウエア設計
solidなどの設計原則, 設計パターンについて
アーキテクトよりもよりコードよりの章
ドメインロジックとアプリケーションロジック 違いはわからないでもないけどふわっとしている。
凝集 これも程度についての議論が必要に感じる。 高めていったらクラスにメソッド1個になってしまう。 philosophy of software design でも、コレに似た議論がありました。
GoF 有名だけど自分では読んだことがない。 ... 内容だけ見たところ、言語依存が大きいと感じる。 rust ではいらないパターンがある。 facade と fuctory の違いがわからない。
3章
アーキテクチャ設計 何をしたいか -> トレードオフのある設計からどれを選ぶのか? -> 論理的な構造モデル 重要な要素。アーキテクチャドライバを特定しよう. たとえばこのシステムには、セキュリティが高度に求められるとか
分散とモノリシック 分散
- サービスベース
- 同一DBでトランザクション境界はサービスを跨がない
- マイクロサービス
- 各マイクロサービスが独立DBを持ち、サービス間でデータは完全分離 api gateway などで通信する
- saga パターン ... 複数サービスのトランザクションの整合性実現方法
saga パターン 2相コミット的な補償トランザクションをサービス間で行う 各サービスの調整役を使うオーケストレーションと利用しないコレオグラフィという方式がある. オーケストレーションがおすすめらしい
- モノリシック
- モジュラーモノリス
クリーン、パイプライン、マイクロカーネル(プラグイン)などのアーキテクチャスタイル
アーキテクチャを説明する文書 Software Architecture Document (SAD) たとえば 理論 : unified modeling language (UML) などのモデリング言語 開発 : container Az repository みたいな具体的なもの
4+1
- ロジカルビュー : 論理構造 たとえばレイヤーとか
- プロセスビュー : user -> system -> DB みたいなトランザクションなど
- デベロッパービュー : 開発レベル ディレクトリ構造図など
- フィジカルビュー : Azure VM -> PostgreSQL みたいな物理構成
- シナリオ
c4 Context : システムの外部との関係 Container : システムの中のコンテナ(アプリケーション、DBなど) Component : コンテナの中のコンポーネント インターフェースを持ちまとまった振る舞いをする Code : コードレベルの構造
4章
開発フローの構築
4.2 ドキュメント
- 本来はアーキテクトのスコープ外 実業務では入ることが多い ... 確かに、仕事を進める上では重要だし、誰がやるかとなるとアーキテクトを考える人になりそう
- ユースケースは利用者目線で記述する
- DBに~があったら ではなくて、記載済みであったら~する とか
- クリックなどの interface依存は書かず、登録するなどにする。 ... インターフェースは変えることがあるから?
4.5 開発の準備
- 規約、手順書 ... これは 4.2の復習的な内容
4.6 ci/cd
CI ... テストなど CD ... デプロイなど. delivery(最終デプロイは手動) と deployment の両方の意味がある
5 品質保証
シフトレフト ... 欠陥の発見工程を前に移す
E2Eテスト、インテグレーションテスト、ユニットテスト
E2Eはユーザー観点でのテスト Flaky Test が発生しやすい. 基本的にリグレッションテスト
インテグレーションテスト... E2Eとユニットテストの間
ユニットテスト ... クラス単位、コンポーネント単位など議論あり. この辺りは「単体テストの考え方」に詳しい
パフォーマンステスト 大量のデータが必要。分布調整や、Insertをストアドプロシージャとして高速化するなど工夫が必要 負荷テスト スループット パーセンタイル評価が多い