| | | | |
| |||||||
| Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene |
|
| | LinkBack | Themen-Optionen | Bewertung: |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Neuer Benutzer Registriert seit: 15.06.2011
Beiträge: 14
PHP-Kenntnisse: Fortgeschritten ![]() | Nö warum? Stell Dir bspw. vor, du verwendest zwei Datenbanken. Damit auch zwei DatabaseConnections => 2 unterschiedliche Konfigurationen, dasselbe Interface. Interface injection ist im Grunde 'ne coole Sache, aber "unter der Haube" müssen Services immer einen eindeutigen Identifizierer haben. Alles weitere ist i.d.R. "syntaktic Sugar" und wird auf den eigentlichen DI draufgepappt. So kann man Services "guessen" (indem man bspw. Signaturen analysiert), eine andere herangehensweise ist unter anderem das Mapping durch NamingConventions von Properties (so macht Grails das in seinen Controllern) => "myMailerService" oder so. Das "Problem" heißt generell "ServiceLocator vs. Injection" und ist hier beschrieben: http://bit.ly/5yMot |
| | |
| | |||
| Erfahrener Benutzer Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse: Fortgeschritten ![]() | Zitat:
aber ich verstehe schon die problematik, auch sollte ein interface nichts über die belange und den kontext wissen in dem es verwendet wird. bei meiner lösung wäre dies ja der fall. indirekt besteht die problematik ja aber auch bei dem klassischen di container. $di->get('db') gibt ja im rahmen der di instanz immer identisches objekt mit identischer konfiguration zurück. wenn die klasse plötzlich mit einer anderen datenbank agieren muss, wird die klasse ja einen anderen schlüssel nutzen $di->('db2') omit die grundproblematik weiterhin bestehen würde. ich werde mich nochmal intensiv damit auseinandersetzen und mal schauen welche lösungen noch gangbar wären, insbesondere stört mich die nicht vorhandene typensicherheit. Zitat:
![]() | ||
| | |
| | |
| Erfahrener Benutzer Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse: Fortgeschritten ![]() | die aufgeführte problematik war, dass wenn man identische klassen mit unterschiedlichen konfigurationen hat, welche beide identisches interface besitzten, meine idee nicht aufgehen kann. Beispiel waren 2 datenbanken mit mit unterschiedlichen konfigurationen. ein di container kann jedoch unter einem schlüssel auch nur ein service mit einer konfiguration anbieten. demnach müsste man für die 2. datenbank einen 2. service definieren der identische klassen mit einer anderen konfiguration anbietet. betroffene klassen müssen jedoch von dem service wissen, ansonsten können sie diesen nicht ansprechen. demnach handelt es sich in meinen augen nicht um den selben service, sonderen es gibt 2 verschiedene services welche unterschiedliche aufgaben erfüllen und demnach auch ein unterschiedliches interface gerechtfertigt wäre. mich stört, dass man services willkürlich tauschen kann und man keinerlei möglichkeit hat wirklich typensicher ohne viel gecaste zu arbeiten. wenn man jeden service gegen ein interface implementieren müsste wäre dieses problem quasi nicht mehr vorhanden. |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 12.05.2005
Beiträge: 1.038
PHP-Kenntnisse: Fortgeschritten ![]() | mir fällt grade auf, dass das großer unfung war. durch eine contructor oder einer setter injection ist ja wieder typensicherheit gewährleistet. PHP-Code: |
| | |
| | |||
| Erfahrener Benutzer Registriert seit: 30.07.2008
Beiträge: 1.169
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() | Ah, ich verstehe.. Stimmt, das sind zwei verschiedene Services. Aaaaaber, um beim Bsp. mit den Datenbanken zu bleiben. Angenommen, Dein Interface für 'db' sieht so aus: PHP-Code: Zitat:
Zitat:
EDIT: K.A., ob Du den Thread gelesen hast: http://www.php.de/software-design/81...container.html (DI-Container) Das ist mein Ansatz, allerdings halt mit Bezeichnern statt Interfaces. EDIT: Ich verstehe jetzt nicht ganz, wo Du Typsicherheit vermutet hast: Bei den Parametern, die der aufgerufene Service bekommt oder ging es um den Service, der zurück gegeben wurde? | ||
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Dependency Injection Container | Anyone | PHP-Fortgeschrittene | 33 | 16.06.2011 08:28 |
| jQuery <div> Container generieren lassen ? | dreamcatcher | JavaScript, Ajax und mehr | 5 | 23.02.2011 14:01 |
| [Erledigt] Mehrere DIV Container mit einem Klick ändern (mit mehreren Request Aufrufe | Lebenssonde | JavaScript, Ajax und mehr | 11 | 26.08.2010 09:01 |
| Netz von Objekten mit Abhängigkeiten darstellen/zeichnen | serPHPico | PHP-Fortgeschrittene | 12 | 25.08.2010 18:52 |
| kürzeren div container authoatisch der höhe des contends anpassen | litterauspirna | HTML, Usability und Barrierefreiheit | 15 | 29.07.2009 00:57 |
| 2 div Container immer gleich lang | Kein Genie | HTML, Usability und Barrierefreiheit | 4 | 27.07.2009 13:38 |
| Links vom Untermenü in Container öffnen | Surfer | PHP Tipps 2008 | 0 | 27.12.2008 19:24 |
| Div Container nebeneinander anordnen | tomtaz | HTML, Usability und Barrierefreiheit | 10 | 04.06.2008 12:45 |
| [CSS] Container in Container | Igäl | HTML, Usability und Barrierefreiheit | 5 | 04.09.2007 11:29 |
| CSS - Bild im div container überlappt andere container | Buschdieb | HTML, Usability und Barrierefreiheit | 13 | 19.07.2007 23:17 |
| IE6: Container mit Float dabei wird margin doppelt gewertet | DonTermi | HTML, Usability und Barrierefreiheit | 1 | 11.01.2007 09:02 |
| [CSS] Div container unsichtbar machen | I-Spy | HTML, Usability und Barrierefreiheit | 24 | 05.03.2006 09:37 |
| [Erledigt] Container im Firefox falsch dargestellt | HTML, Usability und Barrierefreiheit | 27 | 15.08.2005 23:18 | |
| &lt;div&gt;- container vertikal auf seite zentrieren | HTML, Usability und Barrierefreiheit | 3 | 08.05.2005 11:16 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| di container, php di container |