κeenです。Rustその2 Advent Calendar 2017が空いてたので小ネタをば。1日目の記事です。 Dependency Injectionの話。 例えば3層アーキテクチャで組む時には以下のような依存関係が発生します。 [user interface(web)] | V [logic(service)] | V [database access(dao)] これを他の実装に依存せずにそれぞれの層を書きたい、どうしようという問題設定です。 ナイーブな実装 簡単に考えたらRustならトレイトで抽象化してあげればよさそうです。 コードにするなら共通インターフェイスにトレイトを定義してあげて pub trait UserDao { fn find_user(&self, id: i32) -> Result<Option<User>>; }