第3回 Software Architecture: The Hard Parts 読書会@リモート

第3回 Software Architecture: The Hard Parts 読書会 - connpass


参加者トピック

ディスカッション

ch04-1: Architectural Decomposition

ch04-2: Component-Based Decomposition

  • 戦術的フォークの考え方は、普段のリファクタリングでもやってそう
  • ADRの書き方に問題がある
    • どの判断が決定に貢献してるのか、定量的に分からない
    • 後から読んだ人が分かるようになっているほうがいい
  • 「モノリシックアプリケーションをマイクロサービスへ移行するときは、踏み石としてサービスに基づくアーキテクチャへの移行を考えた方がよい。」

Chapter 5. Chapter 5. Component-Based Decomposition Patterns

  • コンポーネントに基づく分解の段階
    • Identify and Size Components Pattern
    • Gather Common Domain Components Pattern
    • Flatten Components Pattern
    • Determine Component Dependencies Pattern
    • Create Component Domains Pattern
    • Create Domain Services Pattern
  • コンポーネントの境界が明確」だから「コンポーネントに基づく分解」をすることにしたはずだけど、そのままドメインサービスにするのではなく、分解、整理、統合をやり直すのはなるほどなという気持ち
  • アーキテクチャストーリー」って一般的な言葉?
    • 「テクニカルストーリー」「テクニカルユーザーストーリー」はある
    1. ビジネス要件(ユーザーストーリー)が非機能要件に影響が及んだらユーザーストーリーとアーキテクチャストーリーは結びつく/ユーザーストーリーなしでアーキテクチャストーリーは成り立つか?
      1. 成り立つはず。例えばソースコードのメンテナンス速度を向上させる、Shopifyのような開発者のドメイン学習時間を減らす、こういったモチベはアーキテクチャストーリー単体で成り立ちそう

Identify and Size Components Pattern

  • コンポーネントを特定し、サイズを整えるパターン(段階)
  • 伝統的なソースコード分析手法を使ってる
  • 多言語だとどうするんだろう
    • それぞれで考えるしかない
  • この段階で適合度関数を導入しちゃうのは意外
    • Flatten Components でやるのかと思ってた
    • 既存の状態をベースラインとして設定したいのではないか
      • ここより悪くなるなら良い方向に進んでいない、みたいな

Gather Common Domain Components Pattern

  • 論理名前空間のノード名を分析すると、末尾が共通するなら共通機能が隠れていると判断出来る場合がある
  • サイズを計測するより先にこっちをやるべきなのでは
    • 本来一緒になるべき機能が散らばっている場合がある
  • こういう共通化を進めるのは誰?
    • 開発者がやるようになってきた
    • 開発者任せにしているとドキュメントが残らない場合があって難しい

Flatten Components Pattern

  • Flatten Components パターンは、コンポーネントが他のコンポーネントの上に構築されるのではなく、フラット化されディレクトリ構造や名前空間のリーフノードとして表現されることを保証するために使用される。
    • なるほど、そういう意味だったんだ
  • 例えば、.sharedcodeで終わる全ての名前空間の全てのステートメントの合計が、ソースコード全体の45%を占めている場合、分散アーキテクチャに移行すると共有ライブラリが多すぎて共有ライブラリの依存関係のためにメンテナンスが大変なことになる可能性がある。
    • 悪い予感を具体化する方法。賢い
  • システム間連携コンポーネントを設計するとき、連携部分だけを別の誰かに任せないよう、全体が1つのコンポーネントになるようにした
    • いい話
  • そういえば ss.shared みたいなコンポーネントが出てきてない
    • 例えばロギングのような横断的関心事

参考情報