php.de

Zurück   php.de > Webentwicklung > Software-Design

Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.10.2011, 19:20  
Neuer Benutzer
 
Registriert seit: 15.03.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Gruber's Hans befindet sich auf einem aufstrebenden Ast
Standard Setter vs Constructor Injection

Aloah,

folgender Fall:

Ich habe mir einen DI-Container / ServiceManager (wie auch immer man das nennen mag und der Unterschied ist) gebaut.

Im Prinzip werden die Klassen geladen und per Setter-Injection werden die Dependencies injected. Dazu stellt die Klasse einfach eine Settermethode zur Verfügung.

Jedoch ist mir jetzt erst klar geworden, dass man praktisch die Basisklasse instanziert und erst dann die Dependencies injected, was natürlich ziemlich blöd ist, wenn man z.B. im Konstruktor schon auf die Dependencies zugreifen möchte. Zur Runtime sind diese nämlich noch gar nicht vorhanden (da noch nicht injeziert).

Irgendwelche Ideen, wie man dies beheben könnte? Mit der Constructor Injection habe ich ein paar technische Probleme v.a. mit der Argumentübergabe (explizit: wie kann der Container dynamisch auf die geforderten Argumente reagieren?)

Liebe Grüße

Gruber's Hans
Gruber's Hans ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 01.10.2011, 21:38  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Wie du schon erkannt hast, haben beide Varianten ihre Vor- und Nachteile. Um explizite Abhängigkeiten zu injizieren macht es nach den OO-Prinzipien definitiv Sinn, abhängige Elemente im Konstruktor zu injizieren.

Andererseits ist es einfacher und auch hinsichtlich eines Interfaces schöner zu realisieren über Methoden zu injizieren. Ich habe mich für letzteres entschieden, da die Konfiguration in dann einfacher zu realisieren ist (siehe http://adventure-php-framework.org/S...plexe-Services).
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 02.10.2011, 06:54  
Erfahrener Benutzer
 
Registriert seit: 21.12.2009
Beiträge: 415
PHP-Kenntnisse:
Fortgeschritten
G.Schuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Gruber's Hans Beitrag anzeigen
Irgendwelche Ideen, wie man dies beheben könnte? Mit der Constructor Injection habe ich ein paar technische Probleme v.a. mit der Argumentübergabe (explizit: wie kann der Container dynamisch auf die geforderten Argumente reagieren?)
Evil eval, Reflection?
Oder, was mir spontan noch einfällt, create_function().
Am ehesten würde ich aber zur Reflection tendieren, auch wenn die aufwändiger ist.

Vielleicht findest du auch noch ein paar Inspirationen in exTSend_DIContainer.
__________________
actra.development - Schwabstr. 2 - 70825 Münchingen
www.actra.de/velopment/ - eMail: php.de@actra.de
Zend Certified Engineer for PHP5
G.Schuster ist offline   Mit Zitat antworten
Alt 02.10.2011, 11:21  
Neuer Benutzer
 
Registriert seit: 15.03.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Gruber's Hans befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von G.Schuster Beitrag anzeigen
Evil eval, Reflection?
Oder, was mir spontan noch einfällt, create_function().
Am ehesten würde ich aber zur Reflection tendieren, auch wenn die aufwändiger ist.

Vielleicht findest du auch noch ein paar Inspirationen in exTSend_DIContainer.
mit evil eval bin ich durch. Reflectionclasses wollte ich mir diesbezüglich noch einmal anschauen.

Hat jemand vielleicht ein Beispiel für eine generische Factory? Die müsste doch auch dynamisch auf geforderte Argumente reagieren?

Ich hatte auch schon daran gedacht die Dependencies einfach in einem array an die Klasse zu übergeben und es der Klasse dann zu überlassen, wie die Objekte integriert werden, wobei mir dieser Ansatz nicht wirklich gefällt. Ich würde gerne so viel wie möglich im Container selber machen.
Gruber's Hans ist offline   Mit Zitat antworten
Alt 02.10.2011, 16:01  
Neuer Benutzer
 
Registriert seit: 15.03.2011
Beiträge: 7
PHP-Kenntnisse:
Anfänger
Gruber's Hans befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mir jetzt mal die ReflectionAPI angesehen und werde den Container wohl so umsetzen.

Hat jemand 'ne Ahnung wie performant die API ist?
Gruber's Hans ist offline   Mit Zitat antworten
Alt 02.10.2011, 23:51  
Erfahrener Benutzer
 
Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse:
Fortgeschritten
notyyy befindet sich auf einem aufstrebenden Ast
Standard

du kannst dir auch gerne mal meinen dic anschauen, meiner meinung nach habe ich da was echt cooles geschaffen. Testabdeckung ~99% und Doku existieren auch.
http://anydi.ainfach.de

im schnitt ist sowas 50-70x langsamer als ein einfaches new statement, die reflextion api ist erstaunlich flott.
notyyy ist offline   Mit Zitat antworten
Alt 03.10.2011, 02:08  
Neuer Benutzer
 
Registriert seit: 15.06.2011
Beiträge: 14
PHP-Kenntnisse:
Fortgeschritten
joshiausdemall befindet sich auf einem aufstrebenden Ast
Standard

Normalerweise "baut" man sich seinen DIC zur "compiletime", sodass man zur runtime keine Nachteile hat durch Performanceverluste. Alles andere ist eher kappes... Skaliert ja dann nicht so gut.
joshiausdemall 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
[Erledigt] Getter & Setter in PHP Codercrush Software-Design 19 04.08.2011 00:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
constructor injection, php setter injection, setter injection, php setter injection runtime, php setter, php construct vs set, php im constructor auf this zugreifen, dependency injection getter setter, @inject vs constructor parameter, constructor injection php, constructor vs property injection, php konstruktor, unterschied setter konstruktor, setter versus constructor argument, dependency injection getter setter php, php5 setter, php constructor injection, getter und setter vs konstruktor, setter getter statt konstruktor

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:39 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