BEAR Blog

Because everything is a resource.

Advent Day 5: DI Terminology

| Comments

DI用語

Day5はDay4に続かないでDIで使われる用語を色々取り上げてみます。

DI関係の記事を色々見るに言葉がよく分からない事があります。もうあまり使われてる言葉でなかったり、あるいは書かれてる時期や人で使い方やスコープが違うような感じがするときもあります。

よく分からないながらも色々掘り起こして並べてみました。

dependency

依存。オブジェクトに限らず単純な値も含みます。

dependent (dependent consumer)

依存を利用するクライアント

injector / provider / container

wikiによると”an injector (sometimes referred to as a provider or container)”
依存をdependentに用意する。”DIコンテナ”

dependency resolution

依存の解決、依存の取得方法。

Dependency Lookup1

直接の訳語は「依存の参照」

wikipediaでは通常の処理でDIとは逆。と簡単に説明してます

http://xunitpatterns.com%E3%81%A8%E3%81%84%E3%81%86%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E3%81%AF%E3%81%93%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E8%AA%AC%E6%98%8E%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

Dependency Lookup is characterized by the following:

  • Either a Singleton[GOF], a Registry[PEAA] or some kind of Thread-Specific Storage[POSA2],
  • with an interface that fully encapsulated which implementation we are using,
  • with a built-in substitution mechanism for replacing the returned object
    with a Test Double
  • accessed via well-known global name.

Dependency Lookupは2つに分かれるそうです。
http://life.neophi.com/danielr/files/InversionOfControl.pdf

Dependency Pull

“中央”にある依存管理コンテナなどに問い合わせて依存を取得します。

1
$foo = Service::get('foo');

Contextualized Dependency Lookup (CDL)

“渡された”コンテナから取得します。

1
2
3
4
public function do(ConteinerInterface $container)
{
    $this->foo = $container->get('foo');
}

Global Registry

Dependency Pullが用いる中央のレジストリ/コンテナ。

Service Locator

Dependency Lookupと同じ(?)、他にObject Factory, Component Broker, Component Registry等。

Dependency Injection (DI)

1
2
3
4
public function do(FooInterface $foo)
{
    $this->foo = $foo;
}

感想、ちょっと一言

  • dependency lookupは広義では外部を参照するという意味で使われれ、狭義では特定のパターンを指すような感じがします
  • CDLやLookupの言い方はちょっと古くService Locator(SL)で総称されているような感じがします。
  • 一般的に「DIコンテナ」が使われますがwikiにあるように「injector」が表記としてより妥当であると思いました。
  • 用語解説のよい記事になかなか巡り会えませんでした
  1. Service Locator ? []