← Rust

LESSON / ARTICLE

大規模設計とアーキテクチャのトレードオフ

大規模設計とアーキテクチャのトレードオフを学び、実務での設計判断につなげます。

抽象化の目的

抽象化は変更の影響範囲を小さくし、重要なルールを守りやすくするために使います。trait object、ジェネリクス、モジュール境界、依存性注入は道具です。

trait UserRepository{fn find_name(&self,id:u64)->Option<String>;}
struct UserService<R>{repository:R}
impl<R:UserRepository>UserService<R>{
 fn display_name(&self,id:u64)->String{
  self.repository.find_name(id).unwrap_or_else(||"unknown".to_string())
 }
}

ドメインロジックがHTTPやDBの具体実装へ直接依存しないよう、traitで必要な操作を定義できます。

ADR

背景・選択肢・決定・結果を記録し、性能、複雑さ、変更容易性、運用コストを比較します。

設計演習

HTTPハンドラー・ユースケース・リポジトリの3層を設計し、責務、依存方向、エラー境界、テスト方法、代替案とのトレードオフを説明してください。