タグ

DIとdiに関するpeketaminのブックマーク (24)

  • DIコンテナのテスト以外での利点について (7/15修正) - Qiita

    概要 Martin Fowler氏によってDependency Injection (以下DI) と DIコンテナについての概念が2004年に発表されて約16年。 Java だけでなく JS や Swift、C# と言った様々な言語に実装されてきて基的な設計概念として定着してきた。 だが、DIコンテナの利点、なぜDIコンテナを使うのかという話になってくると テスト容易性をあげる、という話ばかりが多くそれ以外のメリットについて説明されることが少ないと感じてる。 Java開発を変える最新の設計思想「Dependency Injection(DI)」とは DI (依存性注入) って何のためにするのかわからない人向けに頑張って説明してみる そこでこの記事ではテスト容易性の向上以外のDIコンテナのメリットについて書いていきたいと思う。 まぁまぁ長いので面倒だったら結論を先に読むでいいと思う 当初、

    DIコンテナのテスト以外での利点について (7/15修正) - Qiita
    peketamin
    peketamin 2020/07/16
    “つまり語弊を恐れず乱暴に言ってしまえば DIコンテナはクラスオブジェクトをキーとしたハッシュテーブルを拡張したものでしかなく、汎用的なものだ。”
  • DI (依存性注入) って何のためにするのかわからない人向けに頑張って説明してみる - Qiita

    追記 2022/11/12 追記 この記事読んで、DI 便利だなって思ったらこちらも併せて読んでみてください。クリーンアーキテクチャーの開設の中で依存性逆転の説明が出てきます。難しいかもしれませんが、一度理解すればつぶしが効く考え方なので腰を据えて読んでみてください。 文 ここでは、最近のそこそこの規模のアプリだと大体使われてる(と私は思ってる)Dependency Injection(DI)について、何故使ってるのか?というのを私の理解で書いていきたいと思います。 今回の対象言語は C# ですが、DI 使ってる言語であれば大体同じ事情なのかなと思います。 単体テストしたいよね アプリケーションを作るとうまく動いているかテストをすると思います。 たとえ、そのアプリがハローワールドだとしても動かして目視で確認してると思います。 もうちょっとアプリの規模が大きくなってくるとクラス単位やクラス

    DI (依存性注入) って何のためにするのかわからない人向けに頑張って説明してみる - Qiita
    peketamin
    peketamin 2020/07/10
    わかりやすかった!感謝
  • DIパターンとストラテジーパターンの違い - woshidan's blog

    potatotipsで紹介されたKotlinのアプリのリポジトリを読んでいたら使ったことの無いlateinitというAPIが出てきて、@Injectというアノテーションがあるから、おそらくこれはDIだな、と思ったのですが、よくわからず。 いつの間にかKotlinでなくDIの勉強をしていました。 DI(Dependency Injection)とは何なのか まず最初に、下記の記事と、下記の参考に載っていた記事を読みました。 http://kazy.hatenablog.com/entry/2014/01/11/194142 http://www.atmarkit.co.jp/ait/articles/0504/29/news022.html http://qiita.com/hshimo/items/1136087e1c6e5c5b0d9f 自分には上記の記事での依存という辺りの言葉遣いが分

    DIパターンとストラテジーパターンの違い - woshidan's blog
    peketamin
    peketamin 2020/03/29
    “大規模アプリだとあった方がテストを書くのが捗りそうです。” DIの恩恵を感じれるのはここを経験するかどうか次第な気がしてきた...
  • Dependency Injection: Python

    OverviewDependency Injection(DI) is a software engineering technique for defining the dependencies among objects. Basically, the process of supplying a resource that a given piece of code requires. The required resource is called dependency. There are various classes and objects defined when writing code. Most of the time, these classes depend on other classes in order to fulfill their intended pu

    Dependency Injection: Python
    peketamin
    peketamin 2020/03/29
  • Matzにっき(2009-10-03) - the 0.8 true language

    << 2009/10/ 1 2 3 1. [言語] the 0.8 true language 4 1. ロンドン地下鉄 5 6 7 8 9 10 11 12 13 14 15 16 1. 日経済新聞夕刊「拓くひと」 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 >> _ [言語] the 0.8 true language あらゆることに使える完璧な言語(the one true language)が存在しないことは明らかである。 たとえば、Rubyがどんなにすばらしい言語でも、Ruby自身はRubyでは記述されていない。 また、OSなどRubyで記述するには向かない分野はいくらでもある。 そもそもRubyが向かないプログラマーもいるようだが、その点には今回は触れない。 しかし、100%を考えるから、完璧な言語は存在しないわけだが、 仮に80

    peketamin
    peketamin 2020/03/29
    “私は一時DIについて関心を持って、いろいろ調べてみたし、 自分でDIコンテナを実装してみたりもした。 でも、RubyでならDIコンテナがわずか20行で記述できる上、 よく考えてみたら、その20行も、なくてもほぼ同じこ”
  • DI(依存性注入)について

    ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発

    DI(依存性注入)について
    peketamin
    peketamin 2020/03/29
    “採用したときのコスト(学習コストなど)に比べて、モ ジュール間の依存関係を弱めることが重要な時に使用 するべき。 何でもかんでもDIすればいいってもんでもない。”
  • Python におけるドメイン駆動設計(戦術面)の勘どころ

    Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」Kazumi IWANAGA

    Python におけるドメイン駆動設計(戦術面)の勘どころ
    peketamin
    peketamin 2020/03/29
    DIについてはシンプルさがトレードオフされる感が心配
  • DIコンテナなんていらない - usagidropの日記

    DIコンテナなんていらない。PHPのようなスクリプト言語では。 JavaでDIコンテナが必要なのは、Javaがコンパイル型言語であり、かつ記述が長ったらしいという特徴があるからだ。そのため、頻繁に変更したい部分をXMLファイルに外だしする必要がある。 しかしPHPのようなスクリプト言語では、コンパイルの必要がないし、コードも簡潔に書ける。わざわざXMLファイルを用意する必要はなく、PHPファイルを設定ファイルに使えばいい。 例えば次のようなDIコンテナの設定とJavaコードがあるとする。 <component class="ClassA"> <arg>"foo"</arg> <arg>123</arg> </component>S2Container container = S2ContainerFactory.create("dicon.xml"); InterfaceA obj = (

    DIコンテナなんていらない - usagidropの日記
    peketamin
    peketamin 2020/03/29
    “JavaでDIコンテナが必要なのは、Javaがコンパイル型言語であり、かつ記述が長ったらしいという特徴があるからだ。そのため、頻繁に変更したい部分をXMLファイルに外だしする必要がある。”
  • 20160526 依存関係逆転の原則

    より詳細なCQRSに関する資料はこちら https://little-hands.hatenablog.com/entry/2019/12/02/cqrs 参考資料:http://little-hands.hatenablog.com/entry/jjug2017fall 社内新規プロダクトでDDD, CQRSの思想をベースとしたアーキテクチャを構築し、コマンド(更新系処理)ではSpring Data JPA(Hibernate)を、クエリ(参照系処理)ではjOOQを採用しました。 結果としてそれぞれのORMの良いところを生かした組み合わせのアーキテクチャが構築できたので、その経緯と得られた知見についてお話ししたいと思います。 以下のようなトピックを考えています。 ・CQRSの定義とメリットデメリット ・DDD,CQRSを検討するにあたってのORMの選定ポイント ・構築したアーキテクチャ

    20160526 依存関係逆転の原則
  • やはりあなた方のDependency Injectionはまちがっている。 — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something

    今日はPHP界隈で大人気のDependency Injectionと、それに関連する用語について整理しておこうと思います。 以下のような状況があるのではないか?と思ったからです。 多くのPHPユーザがDependency Injection(DI)をよくわかっていない、あるいは正確に説明できません。 そして、デザインパターンである「DIパターン」とDIをサポートするツールである「DIコンテナ」を混同しています。 また、「DIパターン」と「サービスロケータパターン」をうまく区別できていません。 Dependency Injectionとは何か? Dependency Injectionとは「Dependency」を「Injection」するというデザインパターンです。 日語では何故か「依存性の注入」と訳されており、これが混乱の元ではないかと思います。 日語で「依存性」と言うと、「依存性は

    peketamin
    peketamin 2018/08/21
    ファクトリで済ませたい
  • Scalaにおける最適なDependency Injectionの方法を考察する 〜なぜドワンゴアカウントシステムの生産性は高いのか〜 - Qiita

    DIを使わない状態ではUserRepositoryというインターフェースが定義されているのにもかかわらず、UserServiceはUserRepositoryImplの参照も持っていました。 これではせっかくインターフェースを分離した意味がありません。 UserServiceがUserRepositoryインターフェースだけを参照(依存)するようにすれば、具体的な実装であるUserRepositoryImplの変更に影響されることはありません。 この問題を解決するのがDIの目的です。 それではDIのインジェクタを加えて、上記のクラス図を修正しましょう。 謎のインジェクタの登場によりUserServiceからUserRepositoryImplへの参照がなくなりました。 おそらくインジェクタは何らかの手段でサービスであるUserRepositoryImpl(Dependency)をクライアン

    Scalaにおける最適なDependency Injectionの方法を考察する 〜なぜドワンゴアカウントシステムの生産性は高いのか〜 - Qiita
    peketamin
    peketamin 2015/12/02
    "ドワンゴアカウントシステムはScalaのコードだけで22万行"
  • Dependency injection in scala

    Evaluation of DI frameworks in context of using them with Play!Read less

    Dependency injection in scala
    peketamin
    peketamin 2015/03/14
  • Dependency Injection with Dagger 2 (Devoxx 2014)

    Dagger is a fast dependency injector for both Java and Android. Its second major version not only brings new features for parity with other frameworks b…

    Dependency Injection with Dagger 2 (Devoxx 2014)
    peketamin
    peketamin 2014/11/17
  • DIC To The Limit – deSymfonyDay, Barcelona 2014

    Applying Dependency Inversion and Dependency Injections principles correctly in Symfony

    DIC To The Limit – deSymfonyDay, Barcelona 2014
    peketamin
    peketamin 2014/06/12
  • DIコンテナをPythonで書いたんだけど、そもそもPythonで必要あるのか不安になった。 - rokujyouhitoma's blog

    / - DI/ - DIContainer.py `- __init__.py `- sample.py DICOntainer.py # -*- coding: utf-8 -*- class DIContainer: def __init__(self, c): self.objects = dict() self.componentFactory = c c.accept(self) def get(self, name): name = name.title() if not name in self.objects: self.objects[name] = self.componentFactory.get(name) return self.objects[name] class ComponentFactory: def __init__(self): self.conta

    DIコンテナをPythonで書いたんだけど、そもそもPythonで必要あるのか不安になった。 - rokujyouhitoma's blog
  • やっぱりDIの良さがわからない

    2007/03/15 13:55 GoogleGuiceというDIコンテナをリリース し、 素早く紹介記事があがった わけだけど、やっぱりDIの良さがわからない。 はてなで貰ったコメントに突っ込んでみる。 Yoshioriさん。「AOPいいよ!!トランザクションとか自分で実装するのメンドイよ!!」 おいら「Djangoでトランザクションスコープをリクエストにしとけばいいんで…」 nekoraさん 「スクリプト言語で間に合う程度の小規模・低負荷・単純な案件ならばスクリプトで済ませるべきであるという話の一例。時に「動的言語」って何だろ」 おいら「「動的型付言語でした」。スクリプト言語で間に合わない程度というと、世界数カ所で同時にコミットするような案件位だよね。みんな凄いのやってるねぇ。とはいいながら、確かにへぼを集めてもある程度きちんと書けるのがJavaとかの良さだというのは分かってるぞ。

    peketamin
    peketamin 2014/03/15
  • Webアプリケーションの構成に関する予備知識 - Qiita

    自分の担当したWebアプリケーションを引き継ぐ際に、予備知識として説明したことのまとめ 注意事項 もともと明確に定義されていない概念や、簡単に説明するため正確さを犠牲にした部分が多い 間違っていることを前提に、疑いながら読むのがベター アプリケーションの層構造 アプリケーションを構成するオブジェクトには非常の多くの種類がある アプリケーションの(より良い)構成をオブジェクト単位で考えるのは難しいので、もっと粒度の大きい単位で考えたい アプリケーションをいくつかの層(オブジェクトの所属するグループ)に分割し、層単位でアプリケーションの構成を考える View層(ビュー層) レスポンスをクライアントにとって都合のいい形(i.e. 画面)に変換する層 View層のオブジェクトは Controller層のオブジェクトから利用される DomainModel層のオブジェクトを利用して、ユーザーに表示した

    Webアプリケーションの構成に関する予備知識 - Qiita
  • 要するに DI って何なのという話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く

    友人から「しんぺいさん DI について書いてほしい」みたいな話をだいぶ前からされてたんだけど書く気力ずっとなかった。でも仕事の気分転換にちょっとずつ書いたやつがいい量まとまったので公開するです。たいしたことは書いてないっていうか知ってるひとにはあたりまえのことしか書いてない。サンプルコードはわたしの趣味Scala で書いてあるが、Java が読めればなんとなく読めると思います。 DI ってなに Dependency Injection、日語で言えば依存性の注入です。おしまい。 で記事を終えてもいいんだけど、そもそも依存性とはなんなのか、それを注入するとはどういうことなのか、なぜ DI が必要となるのかみたいな話をこれからします。 そもそも依存性ってなあに 例を出します。入力された文字列をもとにおみくじをひいて、その結果を twitter に投稿するプログラムにしましょう。 まずは普通

    要するに DI って何なのという話 - 猫型の蓄音機は 1 分間に 45 回にゃあと鳴く
    peketamin
    peketamin 2014/02/13
  • なぜクライアントJavaScriptの単体テストを書くのが難しいか、考えてみた - mizchi's blog

    ってsinonのスタブ漏れを探しながら何度目かわからない感じにキレてた。 とにかく仕事でJSのテスト書くのが辛いので考えてみる。比較的JSのテストに慣れてる自分ですら辛いのだから、世界はもっと辛いに間違いない。サーバーサイドのnode.jsの話ではない。 JavaScriptで完結しない 構造がHTMLの構造と密結合している。装飾や位置、表示/非表示はCSSによって制御されている。 クライアントJSはHTMLと密結合しており、CSSからビューは影響を受ける。それらがネットワークの結果を受け非同期に振る舞いを帰る。その最終的な値を取得するのが難しい。 もちろんサーバーサイドだってDBやネットワークという外部リソースを扱うが、モックの手法が確立しているし、局所的な複雑度は、JSの方がはるかに多い。 言語仕様が貧弱 mochaやjsmineはrspecを真似てるけど、質的にJavaScript

    なぜクライアントJavaScriptの単体テストを書くのが難しいか、考えてみた - mizchi's blog
  • Object Scoping: A Triste Against Service Containers

    Yesterday, I got in an interesting conversation on twitter about object scopes and what constitutes a global scope. The discussion started around a piece of code that I stumbled upon from Fuel 2.0. I am a firm believer that service containers are not a form of Dependency Injection, and are only slightly better than global variables. That led me to make a few comments that elicited a reply from two