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 25.07.2010, 09:54   #1 (permalink)
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 570
PHP-Kenntnisse:
Fortgeschritten
xm22 befindet sich auf einem aufstrebenden Ast
Standard MVC und vergleichbare und Applikations-Config

Hallo,

ich bin gerade an einem Problem, zu dem ich bis jetzt keine "richtige" Lösung güt mich finden konnte. Und zwar stelle ich mir die Frage, wie man in einer Applikation auf die Applikations-Konfiguration zugreift. In meinem Fall ist das ein Objekt ähnlich Zend_Config.

Bisher ist mein Ansatz folgender, mit dem ich aber sehr unzufrieden bin. Das Konzept ist ähnlich wie hmvc:

Ich habe, wie gesagt, ein Konfigurationsobjekt. Dieses enthält sämtliche Konfigurationen zu der Applikation. Das führt natürlich dazu, dass es an den verschiedensten Stellen benötigt wird. Daher war mein Ansatz bisher der, dass ich den Applikationsknoten (Entspricht etwa einer Action im mvc-Prinzip) und den jeweiligen Views dieses Objekt im Konstruktor übergeben habe, so dass gesichert ist, dass es auch vorhanden ist.

Das Problem dabei ist, dass viele andere Objekte - z. B. irgendwelche Plugins, aber eben nicht alle, ebenfalls Zugriff auf die Konfiguration benötigen. Das habe ich bisher so gelöst, dass ich hier den Plugins, die die Konfiguration benötigen, diese mit übergebe. Allerdings ist das sehr frickelig und unflexibel.

Jetzt habe ich folgende Ansätze, die in meinen Augen aber alle nicht ganz gar sind:

1. Singleton (Evtl. mit Parameter, um mehrere verwalten zu können, also etwa so:
PHP-Code:
Config::getInstance('name'); 
2. Per Registry
3. Per DI in JEDES Objekt
4. Ein Applikationsobjekt, etwa wie bei dem Kohana-Framework, also etwa so:
PHP-Code:
Application::config->... 
Mittlerweile tendiere ich zu Punkt 3, da alle Objekte letztendlich von einer einzigen Oberklasse ("Object") abgeleitet werden und das dort relativ leicht zu implementieren wäre. Daraus leitet sich dann ein evtl. 5. Punkt ab, nämlich als statische Eigenschaft von "Object", also so:
PHP-Code:
Object::config->... 
Eine manuelle Übergabe kommt für mich nicht in Frage, weil das einfach zu unflexibel und aufwändig ist.

Was ist eure Meinung dazu?
__________________

xm22 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.07.2010, 12:23   #2 (permalink)
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
papst23 befindet sich auf einem aufstrebenden Ast
Standard

Ich habe das bis jetzt immer mit DI gelöst. Das hat den Vorteil, das man für Tests auch einfach nur die Globle config anpassen muss und so z.B. gegen eine Test DB testen kann.

Allgemein kann man sich das Prinzip auch sehr gut bei Spring (Java-Welt) ansehen. Da Arbeitet man dann viel mit configurations XMLs oder Mockups um teile der Application getrennt entwickeln und testen kann. Was auch den großen Vorteil von loser Kopplung hat, wo man jeden teil der Application austauschen und einzelnt wiederverwenden kann.

Gruß
René
papst23 ist offline   Mit Zitat antworten
Alt 25.07.2010, 12:52   #3 (permalink)
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 570
PHP-Kenntnisse:
Fortgeschritten
xm22 befindet sich auf einem aufstrebenden Ast
Standard

DI hat in meinen Augen jedoch auch immer den Nachteil, dass man diesen Mechanismus ebenfalls wieder überall implementieren muss..
__________________

xm22 ist offline   Mit Zitat antworten
Alt 25.07.2010, 14:08   #4 (permalink)
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 812
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
DI hat in meinen Augen jedoch auch immer den Nachteil, dass man diesen Mechanismus ebenfalls wieder überall implementieren muss..
nein, eben nicht überall:
Zitat:
Das Problem dabei ist, dass viele andere Objekte - z. B. irgendwelche Plugins, aber eben nicht alle, ebenfalls Zugriff auf die Konfiguration benötigen.
Koala ist offline   Mit Zitat antworten
Alt 25.07.2010, 14:44   #5 (permalink)
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 570
PHP-Kenntnisse:
Fortgeschritten
xm22 befindet sich auf einem aufstrebenden Ast
Standard

Eben doch, da ja der Ansatz generisch sein soll. Vielleicht habe ich mich oben falsch ausgedrückt. Im Moment haben nur die Plugins Zugriff auf die Config, die sie auch benötigen. Aber eben das ist unflexibel. Daher will ich es so machen, dass der Zugriff von überall möglich sein soll.
__________________

xm22 ist offline   Mit Zitat antworten
Alt 25.07.2010, 16:12   #6 (permalink)
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 812
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

das ist doch die gleiche Diskussion wie bei dem DB-Objekt das überall verfügbar sein soll
(egal, ob eine andere Klasse es benötigt oder nicht). Quasi "globale Objekte".

Ich dachte immer ein wesentliches Merkmal der OOP sei Kapselung und daß eben gerade NICHT
alles überall verfügbar sein soll.

Oder noch "ketzerischer" ausgedrückt: verzichte auf OOP, dann ist Deine Konfiguration überall verfügbar.

Zitat:
nämlich als statische Eigenschaft
würd ich nicht machen: eine Konfiguration muß auch zur Laufzeit änderbar sein (z.B. im Adminbereich).

Geändert von Koala (25.07.2010 um 16:16 Uhr).
Koala ist offline   Mit Zitat antworten
Alt 25.07.2010, 16:20   #7 (permalink)
Neuer Benutzer
 
Registriert seit: 23.07.2010
Beiträge: 4
PHP-Kenntnisse:
Fortgeschritten
papst23 befindet sich auf einem aufstrebenden Ast
Standard

Du könntest die Plugins natürlich auch über ein Observer Pattern implementieren, so dass du an gewissen Stellen in dennen du Plugins anbieten willst einfach das Observable Interface Implementierst, dass seinen ganzen Context ($this) an die Listener bzw. deine Plugins übergibt. Dann kannst du ganz normal deine DI konfigurieren und dann trozdem dynamisch Plugins registrieren, die dann über den Context auf verschiedene Konfigutationen zugreifen (wie z.B.: ein DB-Objekt oder Registry-Objekt)

gruß
René
papst23 ist offline   Mit Zitat antworten
Alt 26.07.2010, 08:48   #8 (permalink)
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 570
PHP-Kenntnisse:
Fortgeschritten
xm22 befindet sich auf einem aufstrebenden Ast
Standard

Mmh... Wäre auch eine Idee, allerdings wäre dieser Ansatz dann wieder beschränkt auf die Plugins und für alles andere müsste ich mir wieder etwas anderes überlegen.
__________________

xm22 ist offline   Mit Zitat antworten
Alt 26.07.2010, 08:52   #9 (permalink)
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 26.259
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Warum injectest Du die jeweils benötigten Einstellungen (nicht das ganze Conf-Objekt) nicht von außen in die Methode?
__________________
--
„Eins ist Fakt: Gescannt wird nackt!“

Privatsphäre 2.0 - Nacktscanner mit Eyetracking.
Unser Flugzeug darf kein geschlechtsfreier Raum sein.
--
nikosch ist offline   Mit Zitat antworten
Alt 26.07.2010, 09:26   #10 (permalink)
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 570
PHP-Kenntnisse:
Fortgeschritten
xm22 befindet sich auf einem aufstrebenden Ast
Standard

Das Problem, dass ich bei DI sehe, ist, dass ich dann _jedes_ Objekt bei DI-Container o. ä. aufrufen müsste. Ich habe mich mal bei asp.net umgesehen und da ist es so, dass die App-Config oder wie das bei denen heißt, per statischer Methoden bzw. einer Art Singleton gehandhabt wird. Bei jsf/jsp ist es ebenso. Daher tendiere ich jetzt mittlerweile auch wieder mehr zu diesem Ansatz.

Das ist aber auch schwer zu entscheiden...
__________________

xm22 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

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
request GET value max length config? Desian PHP-Fortgeschrittene 3 30.06.2010 13:51
MySQL Config Performance bei schlechten Abfragen cycap Datenbanken 13 15.06.2010 09:21
[Erledigt] CakePHP .hataccess oder Config? BlackScorp PHP Einsteiger 2 26.03.2010 11:12
Vergleichbare Funktionen ISTNV aus Excel?????? axeos PHP Einsteiger 2 26.04.2009 20:52
Welche Methode um Config Files editierbar zu machen? GSJLink PHP-Fortgeschrittene 5 25.07.2008 01:01
SQL Daten in config eintragen rate PHP Tipps 2008 9 09.06.2008 10:27
Config Datei oder Datenbank snatch-ic PHP Tipps 2008 11 17.03.2008 06:13
Wo is die Config? cycap Datenbanken 0 31.05.2006 08:59
Kismet install und config?? c01001 Server, Hosting und Workstations 10 22.11.2005 21:53
Apache2 config oder wie??? c01001 Server, Hosting und Workstations 8 19.11.2005 18:56
config an php anpassen PHP Tipps 2005 8 28.05.2005 13:32
Vergleichbare Fktn. wie in_array für MySQL Igäl Datenbanken 7 28.02.2005 10:07
MYSQL Config Table auslesen? Klappt nicht.. Datenbanken 4 06.01.2005 16:24
1 config Creativ PHP Tipps 2004 5 28.07.2004 16:08
Fatal error: main(): Failed opening required 'config.' ... PHP Tipps 2004 4 11.06.2004 18:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/software-design/70028-mvc-und-vergleichbare-und-applikations-config.html, mvc php wo datenbank abfragen, mvc prinzip mit php, mvc konfigurationsdaten

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




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