kanachi-blog

notionでの公開記事をastro-notion-blogを使って公開するよ

【Clean Architecture 第Ⅰ部】良いアーキテクチャとは?

ソフトウェアアーキテクチャの目的

ソフトウェアアーキテクチャの目的は、求められるシステムを構築・保守するために必要な人材を最小限に抑えることである。

品質とコストはトレードオフか
実際のシステム開発の現場の状況

プロダクトが進んでいくごとに、生産性や変更へのコストが高まっている

よく聞く声

「後でクリーンにすればいいよ!先に市場に出さなきゃ!」

結果

いつまで経ってもクリーンになる日は来ない

理由

市場からのプレッシャーは止まらないから

認知しておくべき事実

短期的にも長期的にも、崩壊したコードを書くほうがクリーンなコードを書くよりも常に遅い。

これは実際に、JasonGormanの実験結果をからも有意性が証明されている。

ソフトウェアシステムの2つの価値
  1. 振る舞い

    要件を満たしているか

  2. アーキテクチャ

    変更のしやすさ

これはどちらが大事か?

振る舞い

  • 完ぺきに動作するが、変更できないプログラムを与えられたとする。要件が変更されると機能しなくなる。修正することもできない。したがって、このプログラムはいずれ役に立たなくなる。

アーキテクチャ

  • 動作しないが、変更が簡単なプログラムを与えられたとする。要件が変更されても修正は可能なので、動かし続けることができる。したがって、このプログラムはこれからも引き続き役に立つ。

ソフトウェアの観点で言うとアーキテクチャの方が絶対に大事である。

重要度と緊急度のマトリクス

ソフトウェアシステムに対して問題をマッピングした際に以下のような順序で対応すべきである。

  1. 緊急かつ重要
  2. 重要だけど緊急でない
  3. 緊急だけど重要でない
  4. 緊急でも重要でもない