タグ

DIとdiに関するmimosafaのブックマーク (18)

  • PHPでRoutingとDiコンテナを1から実装してみる

    はじめに アプリケーションエンジニアの@yamakenjiです。 元々フロントエンドエンジニアでしたが、最近はPHPAWS周りを触っており、何エンジニアと名乗れば良いのか悩んでいたら会社から正式にアプリケーションエンジニアと外向けの肩書きが決まったので、これからはそう名乗っていこうと思います。 PHPを触る機会も増えたので、ルーティングやDIコンテナなどを自分なりにフレームワークを試しに実装してみることにしました。 簡易的に実装したものなので、改善の余地はたくさんありますが、今後何か開発をするときに改善していけたらなと思います。特に脆弱性対策や例外処理などは今回は対象外としています。 作成物 に公開しています。pizza(🍕)という名前はそのときにピザをべたいなと思ったのでそう名付けています。 PHP 8.1 guzzlehttp/psr7@2.6 psr/container@2 p

    PHPでRoutingとDiコンテナを1から実装してみる
  • 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)
  • TSyringeの使い方とコンテナ登録方法ごとの評価タイミングについて | DevelopersIO

    吉川@広島です。 TypeScriptのDIコンテナライブラリはInversifyJSとTSyringeが有名ですが、より機能がミニマムと思われる後者に興味が出たため使ってみました。 https://github.com/microsoft/tsyringe 一番メジャーなInversifyに比べるとTSyringeはやや情報が少ないのと、公式のREADMEもかなりあっさりとしていて使い始める際に戸惑いやすいと思いました。 記事では、 基的な使い方 コンテナに登録したクラスのインスタンスをいつ生成しているか を確認したので紹介します。 後者が気になった理由は、DIコンテナへの登録は遅延評価方式に寄せた方がアプリケーション起動時のパフォーマンスに有利に働きやすいと考えるためです。 環境 TSyringe v4.4.0 使い方 import 'reflect-metadata' impor

    TSyringeの使い方とコンテナ登録方法ごとの評価タイミングについて | DevelopersIO
  • Firebaseの存在をフロントエンドから隠蔽するために

    「Firebase は安いし楽だしマジ最高」という一心で技術選定してしまったプロダクトが成功して見えてきた課題、割高なコスト・権限管理・カスタマイズ性、そして (特性やスキルセット的に)RDB 製品が適していたのに無理やり Firestore を採用したことによるデータ不整合。 その結果チーム内で Firebase を抜ける機運が高まるも、Firebase べっとりなアプリケーションすぎて移行しづらいといった問題に出会うかもしれません。 そのような場合に備え、Firebase の存在を隠蔽して開発することに挑戦してみましょう。 注意: Firebase を剥がしているときに「俺、次は絶対そうするわ」と感じたものを書いているだけであり、まだ実際にはこのパターンでプロダクション導入していません。 あくまで個人開発で試してみていけそうと思ったので、提案しますという体です。 また Firebase

    Firebaseの存在をフロントエンドから隠蔽するために
  • DI (依存性注入) って何のためにするのかわからない人向けに頑張って説明してみる - Qiita

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

    DI (依存性注入) って何のためにするのかわからない人向けに頑張って説明してみる - Qiita
  • Container(PSR-11)とsymfony/consoleで簡単なコマンドラインアプリケーションを作ってみよう - istyle Tech Blog

    ytake です。 PHPでコマンドラインアプリケーションを開発する時、 いつも使っているフレームワークをそのまま使うには巨大すぎる・・。 という方も多いのではないでしょうか? 今回は巨大なフレームワークなどを導入せずに、 アプリケーションに合わせて、自分好みのライブラリを組み合わせたり、 簡単なボイラープレートを作成したり、 テストしやすいコマンドラインアプリケーション作りを行うために、 symfony/console と PSR-11 準拠のDIコンテナを組み合わせたコマンドラインアプリケーションの実装例を紹介します。 エントリに対応したリポジトリは こちら 簡単なコンソールアプリケーションを作る まずは symfony/console をインストールします。 composerを使って下記のコマンドを入力します。 $ composer require symfony/console

    Container(PSR-11)とsymfony/consoleで簡単なコマンドラインアプリケーションを作ってみよう - istyle Tech Blog
  • PHPの各種フレームワークにおけるDIについて - hikyaru-suzuki’s blog

    qiita.com QualiArts Advent Calendar 2019、2日目担当の鈴木光です。 タイトルの通り、今回はPHPの各種フレームワークにおけるDIについて書いていこうと思います。 Dependency Injection(DI) あるクラスが依存するオブジェクトをコンストラクタ、メソッド、セッターなどの引数から注入することでクラスから依存関係を減らすという手法です。テストや仕様変更に強くなるという特徴があり、10年以上前から用いられてきたデザインパターンとなります。 ちなみにDIの説明のためにこちらの記事をとても参考にさせていただきました。 やはりあなた方のDependency Injectionはまちがっている。 — A Day in Serenity (Reloaded) — PHP, FuelPHP, Linux or something DIとは DI自体はそ

    PHPの各種フレームワークにおけるDIについて - hikyaru-suzuki’s blog
    mimosafa
    mimosafa 2020/02/11
    いろんなPHPフレームワークのDIコンテナー。
  • 【PHP】依存性の自動注入を実装してみる【自動DI】 - Qiita

    まえがき クリーンアーキテクチャの記事に非常に感化され、 Laravel使ってない開発中のシステムに思想をぶっこみ出していたある日。 細分化したクラスやインスタンスを眺めて思いました。 案の定ちょっとしんどくなってきた…。やっぱ自動注入欲しいな。と。 怠惰な心と好奇心が疼きました。 依存性の自動注入用のクラスを作ってみたので そのソースと実行例です。 # コンストラクタインジェクションはすぐそれっぽいのができました。 そのあと結局あれもこれもと手は止まらず… 先に実行例 素材 class ValueObjectA { public $value = "a!"; } class ValueObjectB { public $value = "b!"; } class ValueObjectC { public $value = "c!"; private $a; public functio

    【PHP】依存性の自動注入を実装してみる【自動DI】 - Qiita
  • Laravelで始める依存性の注入(DI) - Qiita

    「依存性の注入」(Dependency injection) をご存知でしょうか。あるクラスが依存している別のオブジェクトを外部から渡すことで、クラス間の依存度を下げる設計パターンです。 Laravelには サービスコンテナ と呼ばれる機能が備わっており、依存性注入を簡単に扱うことができます。記事で架空のコードのリファクタリングを通して、Laravelにおけるサービスコンテナと依存性注入の仕組みを理解しましょう。 サンプルユースケース 「あるURLにアクセスすると、ダイスを2回振って出た目を合計した数値を返す」 まずは動くように作る 手始めに、とにかく動くコードを書いてみましょう。 class DiceController extends Controller { public function rollDouble() { return mt_rand(1, 6) + mt_rand(

    Laravelで始める依存性の注入(DI) - Qiita
  • PHPで作って覚えるDI コンテナ - その2 - DI コンテナとServiceLocator - Qiita

    <?php class SimpleContainer { /** * @var \Closure[] 依存解決手続き格納用メンバ */ private $resolveMethodList; /** * SimpleContainer コンストラクタ */ public function __construct() { // 初期化 $this->resolveMethodList = []; } /** * 抽象に対し具象の解決手続きを登録する * * @param string $abstract 抽象 * @param Closure $resolveMethod 対応する解決手続き * @return $this */ public function register(string $abstract, \Closure $resolveMethod) { $this->reso

    PHPで作って覚えるDI コンテナ - その2 - DI コンテナとServiceLocator - Qiita
  • 最高にわかるDIコンテナ(特にPHPにフォーカスした - Qiita

    DIとは Dependency Injection(依存性の注入)の略です。 依存性の注入とはなんぞやということになりますよね。そもそもプログラムで依存するってどういうこと? 依存性って何 プログラムにおける依存性というのを簡単に説明すると、ファミコンなどのカセットが良い例です。 テトリスしか出来ないゲーム機 ファミコンなどのカセットを取り替えれるゲーム機 この2つのゲーム機があった時、テトリスしか出来ないゲーム機はテトリスというゲームゲーム機が依存していることになります。 ファミコンだったらカセットを取り替えれるからゲーム機はゲームに依存してませんよね。カセットというインターフェースが同じものであれば基的には利用できることになります。 テトリス専用ゲーム機の場合 まず、テトリス専用ゲーム機をプログラムでこれを例として示そうとするとこんな感じでしょうか。 class GameConso

    最高にわかるDIコンテナ(特にPHPにフォーカスした - Qiita
  • Laravelの依存性の注入(DI)を具体的にどう使うのか - Qiita

    ※この話で利用したLaravelのバージョンは 5.4.36です。 依存性の注入(DI)についてはググればすぐにその基礎知識がわかる。 Laravelの公式ドキュメントを見れば、LaravelがDIの仕組みを持っている事がわかる。 しかしドキュメントがイマイチわかりにくく、DIを自分で使いたい場合どこに何を書けばいいのか具体的にはよくわからない。 LaravelのDIの仕組みを具体的に使ってみる 手順 入れ替わるクラスの共通メソッド名を定義するインターフェイスを作成する。 そのインターフェイスをimplementsした複数のクラスを作成する。これらが環境によって入れ替わる。 サービスプロバイダ設定をする。環境ごとの処理分けをここに記述する。 サービスプロバイダファイルを新規作成し、/config/app.php に追記する。 または既存のサービスプロバイダファイルに追記する。 コントローラ

    Laravelの依存性の注入(DI)を具体的にどう使うのか - Qiita
  • Laravel、コンテナによる依存解決とは

    タグ: Laravel5.1LTS Laravel これは、Laravel Advent Calendar 2015の2015年12月23日公開分です。 小ネタです。Laravelのドキュメントでよく見かける「コンテナによる依存解決」とは、何でしょうか。初めて公式ドキュメントを読む人には、意味不明です。そのための解説です。 コンテナとは Laravelのコンテナの正式名称はサービスコンテナです。名前自体は何度か変更されているので、余り厳密に名称だと捉えないほうがよいでしょう。(呼び方についてもいろいろと世間にはうるさい人がいるので、結局Symfonyと同じにしたというところでしょうか。) ある文字列のキーでインスタンスやインスタンスの生成方式を登録して、呼びだされた時にインスタンスを返してあげる役割のクラスです。一番シンプルな説明です。もっと厳密にはDIコンテナとかサービスローケータとか、

  • 【Laravel】「『Controllerに入る』と思ったならッ! その時スデに(ほぼ)ビジネスロジックは終わっているんだッ!」という、DIコンテナのお話 - Qiita

    発端 QiitadonでDIの話題が盛り上がっていた時に「LaravelのDIはつよい」みたいなことを書いたら一部反響があったので、その解説です。 はじめに LaravelのDIコンテナ(サービスコンテナ)はめちゃ強力です。「DIコンテナとは何ぞや」という説明は良記事が大量に存在するので詳細を省きますが、超初心者向けに端折った説明をすると「クラスをnewするときに必要なインスタンスを外からブチ込んでくれる人[1]」みたいな感じです。 [1]:かなり雑な説明。真面目に書くなら「クラスに関わる依存性の取り扱いを責務とするフレームワークの総称」という方が適切ですが、まあ初心者はよくわからんと思うので手を動かして勘を掴んだ方がよいかと思う次第。 実際にコイツのヤバさをサンプルコードで確認してみましょう。 RequestFormを用意する まず、検索リクエストを雑にバリデーションするSearchRe

    【Laravel】「『Controllerに入る』と思ったならッ! その時スデに(ほぼ)ビジネスロジックは終わっているんだッ!」という、DIコンテナのお話 - Qiita
  • テンプレートエンジンのくせに最近のPHPはオブジェクト志向やらDIやらイキり始めた件 - JavaScriptをがんばるブログ

    ※2017/05/29現在Repositoryの章までしか聞けていません。聞いている際に浮かんだインスピレーションが揮発しないよう永続化する為に書いた記事です。 php-genba.shin1x1.com まさか日語でこの内容を聞けるコンテンツがあるとは思わなかったです。 これは英語をマスターすれば Sound of Symfony The Laravel Podcast Ruby on Rails Podcast JavaScript Air devchat.tv などのPodcastからより多くの興奮を得られる事を意味します。 プログラミング経験3年、細かい修正ばかりで設計レベルの経験値が全くない自分ですが、各章について以前から個人的に思っていた事、お三方の知見からインスピレーションを得た内容を書き残します。 1. DI 「依存性の注入(Dependency Injection)」と

    テンプレートエンジンのくせに最近のPHPはオブジェクト志向やらDIやらイキり始めた件 - JavaScriptをがんばるブログ
  • Pimpleでシンプルに正しくDIを理解する

    オブジェクト指向でソフトウェアを実装していると、オブジェクトの生成に一連の手続きが必要なものがでてきます。このような生成に関する手続きがあちこちのソースコードへ散在すると、望ましくない状況になることは想像に難くないでしょう。この問題に対処するために、Simple FactoryやFactory Methodといったデザインパターンがあり、オブジェクトの生成に関する手続きや関連オブジェクトも含めたオブジェクトの構成(オブジェクトコンストラクション)に関する知識は1箇所にまとめるということが定石となっています。 しかし、単にファクトリーを導入するだけだと、オブジェクトの構成処理は分離・隠蔽できても、利用オブジェクトがファクトリー自体に依存してしまうことになります。このような試行錯誤の歴史から登場したのがDependency Injection(依存性の注入)パターンです。Dependency

    Pimpleでシンプルに正しくDIを理解する
  • 20160526 依存関係逆転の原則

    17. 適用前 メインルーチン public void Main () { var user = new User (DateTime.Now); Console.WriteLine("あなたの年齢は " + user.Age.ToString() + " です。"); user.Save (user); } 18. USER USER CLASS public class User { private DateTime _birthday; public User (DateTime birthday) { _birthday = birthday; } public int Age{ get { GetAge (); } } private int GetAge(){ // 計算 return 9; // 永遠の9歳 } public void Save(){ var repogito

    20160526 依存関係逆転の原則
    mimosafa
    mimosafa 2017/11/29
  • DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita

    意外と分からずに、「とりあえず」とか「なんとなく」で使っちゃうパターンが多い系案件な気がして書いてみます。 こんな事ありませんか? DIとDIコンテナの違いを説明出来ない DIとサービスロケータの違いを説明出来ない DIを使ってるつもりが、サービスロケータになっている DI、サービスロケータが、ただの「パターン」の1つであることを理解してない DI(Dependency Injection)を正しく理解する そもそも、Dependeny Injectionを日語にするとどういう意味になるでしょうか。 多くの人が「依存性の注入」とか応えるのではないでしょうか? 私もそうでした。きっと何かで読んだのでしょう。 (wikipediaに「依存性の注入」と書いてありますね) 補足 なぜ依存性を注入してあげると良いのか、そのメリット等は後述しますが、 DIというのはただのパターンの1つです。 たまに

    DI・DIコンテナ、ちゃんと理解出来てる・・? - Qiita
  • 1