依存性注入🐠


コードを管理し、拡張可能な保つためにたくさんの素晴らしい戦略があります.今日は「依存注入」について学びましょう.

依存性注入


あなたがダグという金魚であると想像してください🐠), そして、あなたは泡が大好きです.あまりにも多くのので、プログラマブルなタイプのSDKでバブルマシンを買った.
あなたが目を覚ますときに泡を作るプログラムを書く:
import { Bubbler } from 'bubbler';
const initBubbler = () => {

  //  Instantiate
  const bubbler = new Bubbler({ id: "dougs-bubbler" });

  //  Start the Bubbler
  bubbler.bubble({ startTime: "7:00AM", endTime: "8:00AM" })
}
initBubbler();
偉大な、今あなたは新鮮な、よく酸素水に目覚める💦
あなたの友人マルイを教えてください🐟), そして、彼女はとても興奮しているので、彼女もバブラーを買います.
両方のバブラーを初期化するコードを更新します.
import { Bubbler } from 'bubbler';

const initDougsBubbler = () => {
  const bubbler = new Bubbler({ id: "dougs-bubbler" });
  bubbler.bubble({ startTime: "7:00AM", endTime: "8:00AM" })
}

const initMarysBubbler = () => {
  const bubbler = new Bubbler({ id: "marys-bubbler" });
  bubbler.bubble({ startTime: "7:00AM", endTime: "8:00AM" })
}

initDougsBubbler();
initMarysBubbler();
何かがある.生臭いここで行く.
を複製する代わりにinitBubbler 関数の外でインスタンス化段階を"hoisted "することができます.
import { Bubbler } from 'bubbler';

const dougsBubbler = new Bubbler({ id: "dougs-bubbler" });
const marysBubbler = new Bubbler({ id: "marys-bubbler" });

const initBubbler = (bubbler) => { 
  bubbler.bubble({ startTime: "7:00AM", endTime: "8:00AM" })
}

initBubbler(dougsBubbler);
initBubbler(marysBubbler);
今、我々は1つだけ必要がありますinitBubbler 関数は、たとえあなたの友人のラリー🐙) アンドバリー🐡) あまりにもバブラーを購入することを決定.
The initBubbler 関数は、もはやbubbler インスタンス.代わりに、外側のスコープから関数に注入されます.このパターンを「依存注入」(di)と呼ぶ.

Dependency Injection is a great way to keep your functions simple, modular, and re-usable by delegating responsibility to the caller.


制御の反転


さらに、「呼び出し元」は現在、バブラーの初期化に責任がありますinitBubbler 関数は、コントロールが"反転"されていると言います.依存性注入は「制御の反転」(IOC)を達成する手段です.

IOCコンテナ


外部スコープで、インスタンスをインスタンス化するbubbler 依存性は、「コントロールコンテナの反転」(IOCコンテナ)と呼ばれます.

ディフレームワークス


あなたは物事をさらに簡単にするために“DIフレームワーク”を使用することができます.手動で依存関係を初期化する代わりに、DIフレームワークはIOCコンテナとして働き、あなたのために仕事をします.
あなたの関数が必要とする依存関係をフレームワークに伝えるだけで、フレームワークが初期化されると、フレームワークが自動的に関数を呼び出します.
角度と巣はDIフレームワークを含む2つの人気のあるツールです.これらの両方は、この記事の執筆に役立ち、DIの私自身の理解を形成する
  • アングルhttps://angular.io/guide/providers
  • ネストhttps://docs.nestjs.com/fundamentals/custom-providers
  • プラグイン


    DIフレームワークはコードを整理するために最適です.しかし、私は一歩一歩行くと私のアプリのすべての“機能”のためのモジュールを構築することが好きです.
    DI Frameworkが「特徴モジュール」を初期化するとき、依存メソッドを起動することによって、それはそれ自体を「インストールします」.そして、依存関係のAPIをエクスポートしてインストールします.
    我々は、これらのモジュールの呼び出しを呼び出すプラグインは、アプリケーションに戻って機能を注入するため.

    By building apps as a "Tree of Plugins", feature code is centralized instead of being spread throughout the app.


    これは簡単にミックスし、機能を一致させる、新しい機能を構築し、さらに外部の開発者(WordPressのように)の拡張のためのあなたのアプリケーションを開きます.
    プラグインの木としてアプリケーションを構築する方法については、新しいパッケージ「halia」をチェックしてください.
    Halia - Extensible TS / JS Dependency Injection Framework

    Halia is a simple, lightweight, and extensible DI Framework. It's not tied to a particular backend / frontend technology, and you can customize the framework by installing "Plugins".


    結論


    ダグがDIパターンとDIフレームワークの価値を見るのを手伝ったので、あなたの時間を過ごしてください.
    あなたが好きなら、あなたは金魚であり、通常の人間の機能を再開想像を停止することができます.
    または、あなたはアヒルだと想像してプラグインのアプリを構築する方法を学ぶことができます:

    すべての考えやコメントは大いに評価されている.
    歓声
    CR
    このような記事については、Github , , , Reddit