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 11.06.2010, 19:21  
Neuer Benutzer
 
Registriert seit: 29.05.2010
Beiträge: 8
PHP-Kenntnisse:
Fortgeschritten
schnipseljagd befindet sich auf einem aufstrebenden Ast
Standard

wenn du es verhindern kannst solltest du dich imho immer gegen ein singleton und für dependency injection entscheiden.
Gründe sind z.B. eine wesentlich bessere Testbarkeit und das schichtenmodell (sofern es eins gibt) kann nicht leichtfertig durchbrochen werden.
schnipseljagd ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 12.06.2010, 10:51  
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

Ich würde das nicht gegenseitig ausschließen. Es kann durchaus Sinn machen, einen Datenbank-Treiber als Singleton zu erstellen und per DI in eine Datenschicht-Komponente zu injizieren. Viel wichtiger ist es bei der Testbarkeit, dass die Klasse kein "echtes" Singleton ist, sondern durch einen DI-Container oder eine abstrakte Singleton-Implementierung zu einem solchen "erklärt" werden kann. Dann hast du genau beide Vorteile.

Exakt deshalb gibt es beispielsweise beim APF eine abstrakte Singleton- und SessionSingleton-Implementierung, die im Zusammenspiel mit dem DIServiceManager solche Initialisierungen erzeugen kann. Die Trennung und Definition eines Schichtenmodells wird dabei ebenso unterstützt wie die Testbarkeit. Ich kann meinen Service jederzeit in einem PHPUnittest manuell erzeugen, manuell mit MOCK-Komponenten initialisieren und meine Tests ausführen. Das funktioniert mit Business-Komponenten genau wie mit Taglibs und Controller, da diese mit den genannten Konzepten (DI und entsprechende Factories) alle zur Laufzeit mit einem definierten "Umfeld" ausgestattet werden.

Nachteil des Konzeptes ist in der Tat, dass Fehler erst zur Laufzeit auffallen. Es sagt dir kein Compiler, dass du etwas vergessen hast einzubinden oder zu initialisieren. Man muss bei einer derartig starken Entkopplung als Entwickler eine sehr große Disziplin haben, nicht aus Frust eine Kopplung wieder stärker werden zu lassen, weil einem die Hilfsmittel wie Compiler und IDE besser unter die Arme greifen.
__________________
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 12.06.2010, 14:09  
Neuer Benutzer
 
Registriert seit: 29.05.2010
Beiträge: 8
PHP-Kenntnisse:
Fortgeschritten
schnipseljagd befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von dr.e. Beitrag anzeigen
Ich würde das nicht gegenseitig ausschließen. Es kann durchaus Sinn machen, einen Datenbank-Treiber als Singleton zu erstellen und per DI in eine Datenschicht-Komponente zu injizieren. Viel wichtiger ist es bei der Testbarkeit, dass die Klasse kein "echtes" Singleton ist, sondern durch einen DI-Container oder eine abstrakte Singleton-Implementierung zu einem solchen "erklärt" werden kann. Dann hast du genau beide Vorteile.
Ich würde es beim Dependency Injection Container nicht mehr Singleton nennen (es wird zwar immer dasselbe Objects zurückgegeben, aber es können schließlich durchaus auch mehrere Instanzen dieser Klasse bestehen), aber im Prinzip gebe ich dir recht.

Wer sich unter Dependeny Injection Container nichts vorstellen kann:
Symfony Dependency Injection - Reinventing how you manage PHP classes
schnipseljagd ist offline   Mit Zitat antworten
Alt 12.06.2010, 14:12  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.994
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
aber es können schließlich durchaus auch mehrere Instanzen dieser Klasse bestehen), aber im Prinzip gebe ich dir recht.
Stimmt an sich nicht. Das sind zwei verschiedene Patterns. Das war auch das, was raygtek meinte.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online   Mit Zitat antworten
Alt 12.06.2010, 17:57  
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

Zitat:
Zitat von schnipseljagd Beitrag anzeigen
Ich würde es beim Dependency Injection Container nicht mehr Singleton nennen (es wird zwar immer dasselbe Objects zurückgegeben, aber es können schließlich durchaus auch mehrere Instanzen dieser Klasse bestehen), aber im Prinzip gebe ich dir recht.
Siehe Nikosch' Post...

Zitat:
Zitat von schnipseljagd Beitrag anzeigen
Wer sich unter Dependeny Injection Container nichts vorstellen kann:
Symfony Dependency Injection - Reinventing how you manage PHP classes
Es ist schon nett, dass Symfony DI so als ihr Konzept "verkaufen". Kann sein, dass Symfony nun auch soetwas kann, aber das DI-Konzept ist schon etwas älteren Semesters. An dieser Stelle wäre IMHO eine Wikipedia-Seite relevanter gewesen.
__________________
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
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
Scriptangebot Yunio CMS MiST3R-FL4SH Scriptbörse 17 29.05.2010 00:46
[Erledigt] verständnisfrage CMS d0ne Off-Topic Diskussionen 4 25.05.2010 06:44
CMS bzw Board einbauen? gombi Scriptbörse 12 28.04.2010 15:44
PHP CMS PEAR Musikseite R24 Gewerblich 0 28.04.2010 07:40
Was braucht ein gutes CMS Lollix Off-Topic Diskussionen 33 03.03.2010 17:51
Login Script / CMS bikone PHP Tipps 2009 14 31.10.2009 23:33
Scriptsuche [Erledigt] Suche CMS für Clan / Community dontworry Scriptbörse 11 26.10.2009 20:07
Was muss ein gutes CMS können? beckerCodes Software-Design 33 14.09.2009 11:44
Eigenes CMS Moep PHP Tipps 2009 12 06.08.2009 23:00
Cms Yusuf Scriptbörse 9 30.07.2009 19:14
Open Source CMS: wer macht mit? chris14465 Beitragsarchiv 6 24.06.2009 17:02
Dreamproject [S] CMS evtl. Feststellangebot vnBiT.sys Beitragsarchiv 4 25.04.2009 10:51
Modulares CMS programmieren NikB PHP-Fortgeschrittene 7 14.04.2009 22:41
[S] erfahrene Coder für eigenes CMS DarkSky25 Beitragsarchiv 14 31.03.2009 12:06
CMS mit Framework KeKs0r PHP-Fortgeschrittene 11 27.12.2008 23:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
cms architektur, software architektur datenschicht, datenschicht cms, http://www.php.de/software-design/68813-cms-architektur-3.html, dependency injection, dependency injection container php

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