タグ

DIに関するuokadaのブックマーク (12)

  • 作って理解するDIコンテナ - きしだのHatena

    DIコンテナ使ってるけど、アノテーションってなんなの!って聞かれて、作ってみたらわかるよと答えてみたので、自分でも作ってみました。 よくわかった。 「DIコンテナ使うと何がいいの?」ということも、作ってみるとわかります。あと「DIって何がいいの?」に関しては、「DIはちょっとコードを書くのが楽になるだけで、それだけあっても仕方ない、大事なのはコンテナ」と答えるようにしてますが、コード比率からもそれがよくわかります。 続編としてWebフレームワークも作っているので参考まで。 作って理解するWebフレームワーク - きしだのHatena まずはコンテナを作る とりあえず1ソースの状態で。 こんな感じで、管理する型を登録できるようにします。 static Map<String, Class> types = new HashMap<>(); static void register(String

    作って理解するDIコンテナ - きしだのHatena
    uokada
    uokada 2023/11/19
  • なぜ Go ではロガーをコンストラクタ DI してはならないのか

    問題のある実装パターン 共通実装 以下のような applog パッケージ上のロガー実装を考えましょう。ここでは Go 標準の log.Logger をラップしていますが,様々な実装に拡張できることを想定しています。 package applog import ( "fmt" "log" "os" ) type Logger interface { Info(message string) Error(message string) } func NewLogger() Logger { return &logger{ inner: log.New(os.Stdout, "", log.LstdFlags), } } var _ Logger = (*logger)(nil) type logger struct { inner *log.Logger } func (l *logger)

    なぜ Go ではロガーをコンストラクタ DI してはならないのか
    uokada
    uokada 2023/09/07
  • GoのDependency Injectionライブラリuber-go/dig, google/wireを比較する - Qiita

    GoのDependency Injectionライブラリuber-go/dig, google/wireを比較するGoDependencyInjection はじめに 普段Java、Spring Frameworkを使って開発していると、Goで開発する場合の依存解決には苦労することがあるように思います。 Dependency Injection(以下DI)をやるとして、階層の深い依存関係のある構造体を初期化しようとすると、あれもこれもとコンストラクタを呼ぶことになります。また、往々にしてそういった構造体は1つではないので、どでかい初期化処理が生まれることになります。 そこで、記事では、GoにいくつかあるDependency Injectionをサポートするライブラリについて調べていきます。 Goの依存解決の課題は何か 作成するアプリケーションや、開発体制が大きくなればなるほど、以下のよう

    GoのDependency Injectionライブラリuber-go/dig, google/wireを比較する - Qiita
  • uber-go/dig を使う - GeekFactory

    GoのDIコンテナ実装である uber-go/dig を使ってみました。 github.com 基的な使い方はGoDocに書いてあります。あえて3行にまとめると以下になります。 c := dig.New() c.Provide(func (/* 生成に必要な型... */) /* 生成される型 */ { /* 生成処理 */ }) c.Invoke(func (/* 実行に必要な型 */) { /* 実行処理 */ }) 例えば、以下のように Provide メソッドを記述すると、 interface GetUserUsecase を実装するオブジェクトを生成するには interface UserRepository が必要であると宣言できます。 c := dig.New() c.Provide(func (r UserRepository) GetUserUsecase { retur

    uber-go/dig を使う - GeekFactory
  • TypeScript の DI 手法あれこれ - Object.create(null)

    TypeScript で DI (依存性注入) するためのライブラリを作ったんですが, それを紹介する前に既存手法をまとめておいた方が説明が楽だなと思ったのでまとめておきます. そもそも DI の目的とは, みたいなところは詳しく説明しないのであしからず. 手法の比較 DI なし Service Locator エフェクト Constructor Injection Setter Injection デコレータ typed-inject 次回予告 手法の比較 DI なし まずは DI を使わない場合を見ていきましょう. ここでは例として, 以下のような時刻と乱数を必要とするコンポーネント MyService が, 時刻と乱数を扱う機能をそれぞれ提供するコンポーネント Clock と Random に依存するような場合を考えます. type Clock = { getTime: () =>

    TypeScript の DI 手法あれこれ - Object.create(null)
  • 実戦での Scala: Cake パターンを用いた Dependency Injection (DI) · eed3si9n

    2011-04-23 Akka の作者として益々注目を集めている Jonas Bonér が 2008年に書いた “Real-World Scala: Dependency Injection (DI)” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2008年10月6日 Jonas Bonér 著 2011年4月22日 eed3si9n 訳 さて、実戦での Scala シリーズ第二弾の今回は、Scala を用いた Depenency Injection (DI) の実装をみていきたい。Scala は、備わっている言語機構だけを用いても何通りかの DI を実現できる非常に豊かでディープな言語だが、必要に応じて既存の Java DI フレームワークを使うこともできる。 Triental では、一つの戦略に落ち着くまで三つの異なる方法を試した

  • Scala で DI (Effective Scala / Lift のDI編) | TECHSCORE BLOG | TECHSCORE BLOG

    こんにちは、馬場です。 前回はScalaのDIのパターンとしては最も有名なCake Patternを紹介しました。今回はDIの他のパターンも紹介したいと思います。 Twitter でのScala DI さて、少し前にTwitterScala のベストプラクティスをgithub上に公開しました。DIについては、以下のように言っていますね(かなり意訳です)。 Scala にmixinの仕組みを導入したのは、伝統的なDIの手法をやめたかったからだと思う。新方式の最たるものが「Cake pattern」だろう。 (略) けど、Scalaを利用するだけで、古典的DI手法の問題点はだいたい解決できると感じる。(略)だから、私たちはあまり継承せずに構造化しようと決めた。その方がモジュール性が高くテストしやすいプログラムができると思うから。 「伝統的なDIの手法」というのは、Springと同じようにコ

  • Google Guice について調べたあれこれ - astamuse Lab

    こんにちは。エンジニアのNishikawaです。 今日はGoogle Guiceについて色々調べて実際に使ってみたので、そのことについて書きます。 Google Guiceとは Google GuiceはGoogleが開発しているDI用のフレームワークです。結構昔から存在しているフレームワークで初出は2007年とWikipediaにはあります。 最新は2018.11.14 時点では4.2.2です。 Wiki https://ja.wikipedia.org/wiki/Google_Guice GitHub https://github.com/google/guice Google Guiceは、後ほど紹介しますが結構簡単にDIができるようになっています。そのためScala界隈だとPlay Frameworkに使われています。 Play Frameworkを初めて使った人のなかにはDIの仕

    Google Guice について調べたあれこれ - astamuse Lab
  • [レポート] AWS LambdaとJavaのベストプラクティス #SVS403 #reinvent | DevelopersIO

    SVS403 : Best practices for AWS Lambda and Java はじめに この記事はSVS403 Best practices for AWS Lambda and Javaのセッションレポートです。 スライドと動画はそれぞれ下記で公開されています。 スライド 動画 セッション概要 In this session, we follow a customer’s journey as they optimize an AWS Lambda function written in Java to meet their cold start time requirements. We start from a simple yet slow PoC and walk through all of the changes, tricks, and trade-off

    [レポート] AWS LambdaとJavaのベストプラクティス #SVS403 #reinvent | DevelopersIO
  • GoのDIライブラリgoogle/wireの使い方 - 一休.com Developers Blog

    こんにちは。宿泊事業部の宇都宮です。この記事では、GoのDIライブラリgoogle/wireの使い方を紹介します。 この記事は一休.com Advent Calendar 2019の9日目の記事です。 DIとは GoのDIライブラリ wireの使い方 Providerのエラーハンドリング Injectorのカスタマイズ Provider Set インタフェースのバインド 構造体のフィールドを参照する 細かな注意点 値とポインタの違いに注意 go runするときはwire_gen.goも一緒に おわりに DIとは DI(Dependency Injection, 依存性の注入)とは、あるオブジェクトが依存しているオブジェクトを自ら用意するのではなく、外部から渡してもらう(外部から注入する)というデザインパターンです。 例として、以下のように、監督の名前を渡すとその監督の映画を全てリストにし

    GoのDIライブラリgoogle/wireの使い方 - 一休.com Developers Blog
    uokada
    uokada 2019/12/09
    wireの詳細な使い方の話だ。自分は随分とGoから離れてしまったけど次Goで何か書くなら積極的に使いたいライブラリの一つがこれ。
  • freeeのマイクロサービス基盤とWire導入 - freee Developers Blog

    こんにちは、freee株式会社でソフトウェアエンジニアをしているterashiこと寺島です。 この記事はfreee Developers Advent Calendarの6日目です。 今年の7月より新しくサービス基盤というチームを立ち上げたので、ここではチームの取り組みと、Goの基盤ライブラリへのWireの導入事例を紹介します。 freeeのマイクロサービス化への道 最近Web業界でGoKubernetesによるマイクロサービスの採用事例の記事などをよく見ますね。 freeeも当初は単一Railsアプリケーションでしたが、会計だけでなく人事労務、会社設立などとプロダクトが増え、機能が増えてと複雑化していき、開発チームの規模も大きくなっていく中で、2年ほど前から少しずつサービスを分離しながらマイクロサービス化を進めています。 最初に切り出したサービスでは、メモリフットプリントの小ささ、パフ

    freeeのマイクロサービス基盤とWire導入 - freee Developers Blog
  • GoとDependency Injectionの現在|Seiji Takahashi@ベースマキナ

    tl;dr・Goの依存性注入は普通に行われるが、DIツールはまだ観測範囲では浸透していない。 ・直近出たGoogleGo向けDIツール「Wire」はシンプルなAPIやツール作成で有用だが、依存オブジェクトの設定が複雑化すると表現性に限界がくる ・Goにおいて、DIツールはある種のフレームワークと認識して慎重に採用すべき前提:Goの依存性注入と課題Goのコードを書く際、特に一定規模を超えたAPIを書く際は、依存するオブジェクトというのが増える。DBクライアントやロガーや各種ビジネスロジックを呼び出すサービス層などがそれに該当する。 レイヤー化されたパッケージ構成の下、こうした依存オブジェクトをトップダウンに注入していくやり方は見通しがよく、テスト時にモックのAPIクライアントを差し込みやすかったりと、テスタビリティを向上させる。ざっくり依存性注入が行われるようなレイヤー化された構成で、なん

    GoとDependency Injectionの現在|Seiji Takahashi@ベースマキナ
  • 1