2009-05-09 6 views
1

Ich bin gerade dabei, ein DI-Framework für PHP 5 zu schreiben, und ich habe versucht, die "offiziellen" Definitionen einiger Wörter in Bezug auf die Abhängigkeitsinjektion zu finden. Einige dieser Wörter sind 'Kontext' und 'Lebenszyklus'. Und was würde ich das Objekt nennen, das erstellt/injiziert bekommt? Schließlich, was ist der Unterschied zwischen Komponenten und Diensten, und welcher Begriff (wenn) sollte ich die Objekte, die injiziert werden können, aufrufen?Kann mir jemand einige DI-Begriffe beschreiben?

Ich habe Martin Fowlers Artikel gelesen und andere DI-Frameworks durchgesehen (Phemto, Spring, Google Guice, Xyster usw.), aber ich möchte wissen, was Sie denken. Vielen Dank!

+0

Dies ist keine wirkliche Frage, machen diese Community Wiki Schließung zu vermeiden, bitte. Es kann hilfreich sein, mehr als eine Frage zu stellen, die sich jeweils auf ein bestimmtes Detail konzentriert, um die richtigen Antworten zu erhalten. – lothar

Antwort

2

Dependency Injection (DI) bei der Computerprogrammierung bezieht sich auf die Bereitstellung einer externen Abhängigkeit von einer Softwarekomponente. Es ist eine spezifische Form der Umkehrung der Kontrolle, bei der das Anliegen, das invertiert wird, der Prozess ist, die benötigte Abhängigkeit zu erhalten.

  • Lebenszyklus: Singleton, pro-Anfrage, vorübergehende .... wie lange in Behälter
  • Komponenten leben soll: Eine einfachere Definition kann sein: Eine Komponente ist ein Objekt auf eine Spezifikation geschrieben. Es spielt keine Rolle, was die Spezifikation ist: COM, Enterprise JavaBeans usw., solange das Objekt der Spezifikation entspricht.
  • services: Der Begriff Service bezieht sich auf einen diskret definierten Satz zusammenhängender und autonomer geschäftlicher oder technischer Funktionen.
  • Kontext: die Trennung auf Container-Ebene der bereitgestellten Implementierungen zu den Verbrauchern. Ein Beispiel ist, dass goldene Partner auf grünen Seiten 15% Rabatt für rote Socken haben.

haben Spaß :)

+0

Danke, genau das habe ich gesucht! –

1

Ich weiß nicht, dass es eine 'offizielle' Definition gibt. Fowlers Artikel war das erste Stück, das ich auf DI gelesen habe. Wenn das nicht autoritativ genug für Sie ist, sehe ich nicht, wie SO das verbessern wird.

Was bedeutet 'durchgesehen' für Sie? Wie viel von der Dokumentation hast du gelesen? Haben Sie versucht, irgendwelche Anwendungen damit zu schreiben? Sie haben das schon ziemlich gut selbst untersucht, wenn Sie Code mit Spring und Guice geschrieben haben. Wenn Sie gerade ein paar Artikel gelesen haben, die Google mitgebracht hat, haben Sie mehr zu tun.

"Kontext" im Frühling bedeutet die Fabrik, die verwendet wird, um Objekte für Sie zu instanziieren. Ich habe normalerweise eine pro Anwendung oder Web-App. Meine Anwendung ist normalerweise der "Kontext", in dem Objekte erstellt werden.

"Lifecycle" ist nicht anders für DI - es hat damit zu tun, wenn ein Objekt erstellt, initialisiert, verwendet und zerstört wird.

Komponenten sind Daten und Operationen in einem einzigen Softwareartefakt. Dienste sind spezielle Arten von Komponenten, die geschäftsrelevante Vorgänge ausführen, die normalerweise in einem Netzwerk verteilt sind. Dienste sind normalerweise Komponenten, aber nicht alle Komponenten sind Dienste. Sie sind keine Synonyme.

Sie können Komponenten oder Services ohne ein DI-Framework schreiben. Wenn es Ihnen hilft, injizierte Objekte als "Komponenten" zu bezeichnen, seien Sie mein Gast.

Ich bin neugierig: Warum die Betonung auf Namen für diese Dinge? Die Benennung ist sicherlich wichtig, aber es ist nicht das primäre Problem mit DI.

+0

Ich verstehe die Basis der Abhängigkeitsinjektion, aber ich möchte die Begriffe richtig für meine Implementierung von DI –

+0

verwenden Ich kenne keine allgemein "korrekte", präzise Terminologie. Warum denkst du, dass es so wichtig ist? Glaubst du, die Spring-Leute haben gelitten, weil ihre Definitionen nicht offiziell genug sind? Es ist ein Bike-Shed-Argument, das darauf wartet, passiert zu sein, IMO. – duffymo

+0

Es ist mehr Neugier als alles andere, ich hielt es nicht für eine große Sache, nach Meinungen anderer zu fragen. –