php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.01.2012, 22:27  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Je nach Implementierung kann ein DI-Container selbstverständlich mehr. Für deinen Fall würden mir momentan drei Lösungen einfallen:
  • Factory als Service
  • Bei der Service-Konfiguration einen Flag setzen, ob bei jeder Service-Anforderung ein neues Objekt erzeugt werden soll oder nicht
  • Der get()-Methode einen optionalen Flag spendieren und entsprechend entweder ein neues Objekt erzeugen oder, sofern das Objekt bereits erzeugt wurde, dieses zurückgeben.

Nachdem ich gerade selbst an einer Implementierung eines DI/Service-Containers für mein Framework arbeite, bin ich noch unentschlossen, welche Variante ich favorisieren soll. Erstere scheint mir bisher am Saubersten zu sein.
Trainmaster ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.01.2012, 22:32  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Trainmaster Beitrag anzeigen
[...]
  • Bei der Service-Konfiguration einen Flag setzen, ob bei jeder Service-Anforderung ein neues Objekt erzeugt werden soll oder nicht
  • Der get()-Methode einen optionalen Flag spendieren und entsprechend entweder ein neues Objekt erzeugen oder, sofern das Objekt bereits erzeugt wurde, dieses zurückgeben.
    [...]
Also ein Bestimmen ob "Singleton oder nicht" zur Laufzeit?
__________________
dsentker ist offline   Mit Zitat antworten
Alt 08.01.2012, 23:01  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Ja, aber das gilt nur für Letzteres.

Zitat:
Zitat von dr.e. Beitrag anzeigen
nicht nur ein DI-Container, sondern auch ein service locator und eine abstract factory...
Wieso zwangsläufig service locator?
Trainmaster ist offline   Mit Zitat antworten
Alt 09.01.2012, 10:40  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Du musst sogar alle Fälle über die gleiche Methode abhandeln. Sonst braucht der Aufrufer ja wieder Informationen über den Service und die Kopplung wird wieder enger.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 09.01.2012, 11:53  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.167
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Sonst braucht der Aufrufer ja wieder Informationen über den Service und die Kopplung wird wieder enger.
Sehe ich auch so.
xm22 ist offline   Mit Zitat antworten
Alt 09.01.2012, 12:17  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mquadrat Beitrag anzeigen
Du musst sogar alle Fälle über die gleiche Methode abhandeln. Sonst braucht der Aufrufer ja wieder Informationen über den Service und die Kopplung wird wieder enger.
Du meinst den Fall, wenn Service A1, der Singleton ist, irgendwann mal durch den moderneren Service A2 ausgetauscht wird und nun nicht mehr Singleton ist? Das sehe ich ein, zwei verschiedene Methodenaufrufe sind Unsinn. Im Umkehrschluss heisst das dann ja auch, das tatsächlich der Service selbst bestimmt, ob er Singleton ist oder nicht. Und nicht der Aufrufer.
__________________
dsentker ist offline   Mit Zitat antworten
Alt 09.01.2012, 14:20  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 1.019
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Korrekt.
__________________
Wir suchen PHP Entwickler (Vollzeit) im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 09.01.2012, 15:25  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Okay, also keine create()-Alternative zum get() im Container. Ich werde dann nun Factories ebenfalls als Services implementierbar machen.
PHP-Code:
$container->get('core.view.factory')->create('fooView', array($args)) 
__________________
dsentker ist offline   Mit Zitat antworten
Alt 09.01.2012, 18:28  
Erfahrener Benutzer
 
Registriert seit: 25.05.2010
Beiträge: 852
PHP-Kenntnisse:
Anfänger
Trainmaster wird schon bald berühmt werden
Standard

Nachdem ich nun etliche Stunden mit der Lektüre von DI, DICs, IoC, Service Locator und Factories verbracht habe, ist mir die ganze Thematik klarer geworden. Eine zentrale Erkenntnis ist, dass DIC-Container zumeist als Service Locators verwendet werden. Allein die Anforderung eines Service innerhalb eines Controller über bspw. eine get()-Methode stellt bereits diesen Fall dar. Konsequentes DI würde bedeuten, von der Wurzel an per Injiektion zu arbeiten.

Gerade in Verbindung mit MVC scheint es nicht trivial zu sein bzw. ist ein hoher Aufwand nötig, um konsequent DI einzusetzen zu wollen. Sollten selbst Action-Methoden via Injizierung ihre Abhängigkeiten erhalten, ist es entweder nötig dem Controller per Konfiguration die entsprechenden Abhängigkeiten zu injizieren und somit in den Action-Methoden verfügbar zu machen, oder aber, sofern die Action-Methoden unterschiedlichste Services nutzen und es nicht gewollt ist, diese alle dem Controller zu injizieren, weil zur Laufzeit nur ein Teil davon benötigt wird, wird es nötig, eine eigene Konfigurationen für die Action-Methoden bereitzustellen, um den individuellen Bedürfnissen, sprich Abhängigkeiten, nachzukommen. Meiner Meinung nach wäre das ein glatter Konfigurationswahnsinn.
Trainmaster ist offline   Mit Zitat antworten
Alt 09.01.2012, 18:32  
Erfahrener Benutzer
 
Registriert seit: 26.11.2008
Beiträge: 264
dsentker befindet sich auf einem aufstrebenden Ast
Standard

Ja, aber nur dann wenn du DI Wirklich von der Wurzel an planst. Ein DI-Prozess kann ja auch angestoßen werden, nachdem mehrere "fest verankerte" Komponente integriert wurden, etwa der Controller. Ich denke, mit meiner Realisierung bin ich einen vernünftigen Mittelweg gegangen.
__________________
dsentker ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CSS alphatranzparenz nicht an eingeschlossene container vererben litterauspirna HTML, Usability und Barrierefreiheit 7 03.11.2011 10:57
[CSS] Container in Container Igäl HTML, Usability und Barrierefreiheit 5 04.09.2007 11:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:50 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum