コンポーネント

2020年4月16日、木曜日。オシリスの天空竜が出てきた。

火曜日に届いた食洗機は、想像通りにいい感じ。まだ食器の入れ方がわからないので食洗機の大きさを持て余してしまっているが、いずれよくなるはず。ホットクックと合わせて、都合のいいときに家事をすればOKになった。


すこし時間が空いたけれど『clean architecture 達人に学ぶソフトウェアの構造と設計』のつづき。第Ⅳ部「コンポーネント」。

  • 第12章:コンポーネント
    • コンポーネントとは、「システムの一部としてデプロイできる最小限のまとまり」である
    • よいコンポーネントは、常に個別にデプロイできる状態を保つ
      • (感想)よいマイクロサービスの特徴もこれかな
    • 現在のわれわれは、気軽に使えるコンポーネントプラグインアーキテクチャを手に入れている
  • 第13章:コンポーネントの凝集性
    • コンポーネントの凝集性には3つの原則がある
    • 再利用・リリース等価の原則(REP): ひとつのコンポーネントを形成するクラスやモジュールは、まとめてリリース可能でなければいけない
    • 閉鎖性共通の原則(CCP): 同じ理由、タイミングで変更されるモジュールをコンポーネントにまとめること
    • 全再利用の原則(CRP): コンポーネントのなかに依存するクラスや依存しないクラスがないようにすること
    • REPとCCPはコンポーネントを大きくする方向に、CRPはコンポーネントを小さくする方向にそれぞれはたらく
    • 3つの原則はそれぞれに影響をおよぼすため、アーキテクトは三角形のなかで落としどころを見つける必要があり、それは常に変わり続ける
  • 第14章:コンポーネントの結合
    • コンポーネントの結合にも3つの原則がある
    • 非循環依存関係の原則(ADP): コンポーネントの循環依存はしてはならない
      • 依存構造はアプリケーションの成長、システムの論理設計にあわせて変わっていく
    • 安定依存の原則(SDP): 安定度の高い方向に依存すること
      • 安定度とは他コンポーネントとの依存/被依存ではかるもので、「ファン・イン(依存入力数)」と「ファン・アウト(依存出力数)」で計算できる
      • 安定度の高いコンポーネントは変更がしにくく(されない想定)、安定度の低いコンポーネントは変更しやすい
    • 安定度・抽象度等価の原則(SAP): コンポーネントの抽象度は、その安定度と同程度でなければならない
      • つまり「抽象度の高いコンポーネントに依存すべき」と言い換えられる
      • 抽象度は、コンポーネント内の「抽象クラス、インターフェースの割合」で計測できる
      • 「安定度の高い具象コンポーネント」は、拡張も変更も難しい「苦痛ゾーン」に位置される(ex.データベーススキーマ)
      • 「安定度の低い抽象コンポーネント」は、実際には使われていない「無駄ゾーン」に位置される
      • 理想的な安定度・抽象度(主系列)からの距離を計測し、できるかぎり近づけるようにすること

「理解はしても実際にどうやるかが難しい」という話が多いが、これらの原則は忘れずにインストールしておきたい。株プログラムにデータ保存機能をあらためて持たせようと思っているので、原則にしたがっていくつかコンポーネントを作成する予定。


深夜にちょっとした事件があり、すこしせわしなかった。ここから気持ちよく寝れない時期に入るかも。