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 29.07.2010, 17:14  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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

Hallo xm22,

wie oben schon angesprochen interpretierst du DI nicht korrekt. DI ist situativ und nicht global und es löst explizite Abhängigkeiten auf. Das bedeutet auch, dass du in definierten Elementen deiner Software auf eine Konfiguration zurückgreifst, die genau im gewünschten Fall in das Objekt injiziert wird.

Benötigt ein Action-Controller eine Konfiguration, wird diesem einfach die notwendige Konfiguration per Definition injiziert. Die Art der Konfiguration kannst du ja gerne Abstrahieren und eine Klasse schreiben, die Konfigurations-Attribute auf zurückliefert. Der Kern des Mechanismus ist jedoch, dass du eine Möglichkeit schaffst, Inhalte jedweder Art in ein Objekt injizieren zu können.

Üblicherweise werden im JAVA-Bereich die Business-Objekte (Beans) mit Spring-DI erzeugt und diese können dann auch der Präsentations-Schicht als Konfigurations-Element dienen. Controller selbst per DI zu erzeugen halte ich für nicht notwendig. Die beschriebene Vorgehensweise ermöglicht dir die Konfiguration dann zuzugreifen, wenn du sie benötigst, ohne die Konfiguration in allen Objekten (was ohnehin Blödfug ist) vorhalten zu müssen. Weiterhin ist es dann nicht notwendig, Namespaces oder andere Unterscheidungs-Merkmale einzuführen, denn das Konfigurations-Objekt ist dann immer eine eigene Instanz.
__________________
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
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.07.2010, 18:00  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.129
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

Ich denke, ich habe es schon verstanden. Das Hinkefuß ist in meinen Augen, dass ich, wenn ich das stringent durchziehen will, für alle Objekte, die dafür in Frage kommen, eine Konfiguration wie z. B. im APF vorhalten muss, die enthält, was das Objekt benötigt.

Bei den zig Klassen, die ich da habe, ist mir das einfach zu aufwändig.
xm22 ist offline   Mit Zitat antworten
Alt 29.07.2010, 23:40  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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

Hallo xm22,

du musst eben nicht eine Konfiguration für alles vorhalten. Auch das APF tut das nicht. Möchtest du in einem Modul A eine Konfiguration haben, dann greifst du in Modul A darauf zu und sonst nirgends. Umgekehrt formuliert ist es auch Blödsinn, dass die Konfiguration eines Moduls A im Modul B zugreifbar ist.

Dashalb würde ich den vorgeschlagenen Weg gehen und deine Services mit DI erzeugen um dort - und nur wo es auch benötigt wird - die richtige Konfiguration zu haben.
__________________
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 30.07.2010, 07:32  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.129
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

Ich verstehe schon, was Du damit meinst. Aber zwei Punkte sprechen (zumindest für mich dagegen):
1. Will ich _eine_ zentrale Konfiguration für alles
2. Sind das meiste übergreifende Informationen (z. B. Pfade, Logging-Informationen, etc.)

So sieht meine Config im Moment aus:
PHP-Code:
<?php
    
return array(
        
'output'=>array(
            
'encoding'=>'utf-8'
        
),
        
'env'=>array(
            
'timezone'=>'Europe/Berlin',
            
'frontend'=>array(
                
'mediaPath'=>'c:\xampp\a/frontend/htdocs/media'
            
)
        ),
        
'db'=>array(
            
'host'=>'localhost',
            
'username'=>'root',
            
'password'=>'',
            
'database'=>'a',
            
'collate'=>'utf8_unicode_ci',
            
'encoding'=>'utf8',
            
'dbms'=>'mysql',
            
'port'=>3306
        
),
        
'auth'=>array(
            
'passwordSalt'=>'Dwer23$R"?Fewtfs"',
            
'roles'=>array(
                
'anonymous'=>1
            
)
        ),
        
'language'=>array(
            
'list'=>array(
                
'de'=>2,
                
'en'=>1
            
),
        ),
        
'core'=>array(
            
'applicationId'=>'wewewwsa324324"$we',
            
'errorLevel'=>E_ALL|E_STRICT,
            
'displayErrors'=>false,
            
'sessionName'=>'br.com',
            
//mandatory when using ZN_Log
            
'log'=>array(
                
'INFO'=>array(
                    
'writers'=>array(
                        
'ZN_Log_Writer_FirePHP'=>array(
                            
'file'=>dirname(__FILE__).'/../log/test.log',
                            
'type'=>'info',
                            
'format'=>"%1\$s [%2\$s]\r\n--------------------------------------------------------------------------------\r\n%3\$s\r\n--------------------------------------------------------------------------------\r\n\r\n"
                        
)
                    )
                ),
                
'ERROR'=>array(
                    
'writers'=>array(
                        
'ZN_Log_Writer_Screen'=>array(
                            
'file'=>'test.log',
                            
'format'=>"%1\$s [%2\$s]\r\n--------------------------------------------------------------------------------\r\n%3\$s\r\n--------------------------------------------------------------------------------\r\n\r\n"
                        
)
                    )
                ),
                
'CRITICAL'=>array(
                    
'writers'=>array(
                        
'ZN_Log_Writer_Screen'=>array(
                            
'file'=>'test.log',
                            
'format'=>"%1\$s [%2\$s]\r\n--------------------------------------------------------------------------------\r\n%3\$s\r\n--------------------------------------------------------------------------------\r\n\r\n"
                        
)
                    )
                )
            )
        )
    );
Einige Sachen dort sind natürlich speziell, aber wie gesagt - Ich stehe nicht so auf das Prinzip, alles separat zu speichern..
xm22 ist offline   Mit Zitat antworten
Alt 30.07.2010, 11:11  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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

Hallo xm22,

auf etwas stehen oder nicht ist die eine Sache, dein Vorgehen verletzt jedoch Paradigmen der objektorientierten Entwicklung wie z.B. spearation of concerns.

Ich bin ebenfalls ein Freund davon, wirklich zentrale Elemente auch in einem zentralen Container zu halten (beim APF ist das die Registry), jedoch sind DB-Zugangsdaten definitiv keine globale Konfiguration. Denn: innerhalb einer Applikation kann es auch mehrere davon geben und diese können wiederum von diversen Parametern (Modul A benutzt Connection A, ...) abhängig sein. Ebenso das Thema Authentifizierung. Dieses kann man - das APF beweist das mit dem UMGT-Modul - sehr schön entkoppeln (separation of concerns) und als Komponente nutzen. Jede Komponente bringt dabei ihr eigenes Set von Konfigurationen mit, das einem - wie oben beschrieben - globalen Schema folgt.
__________________
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 30.07.2010, 11:42  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.129
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

Mmh... Ich muss mir das mal durch den Kopf gehen lassen..

Zitat:
auf etwas stehen oder nicht ist die eine Sache, dein Vorgehen verletzt jedoch Paradigmen der objektorientierten Entwicklung wie z.B. spearation of concerns.
"Drauf stehen" hört sich zu sehr nach Geschmacksfrage an - Es hat sich im Laufe der Zeit als praktikabel herausgestellt, Konfigurationen zentral zu halten und nicht verteilt auf verschiedene Bereiche. Wie das APF das löst, das habe ich auch eine Zeit lang so praktiziert. Aber schon allein verschiedene Umgebungen mit verschiedenen Parametern zu handlen artet bei dezentraler Konfiguration aus.


EDIT: Was sagst Du dann zu der WEb-Config bei asp.net?

Geändert von xm22 (30.07.2010 um 11:56 Uhr).
xm22 ist offline   Mit Zitat antworten
Alt 30.07.2010, 14:24  
Erfahrener Benutzer
 
Registriert seit: 02.09.2009
Beiträge: 921
PHP-Kenntnisse:
Fortgeschritten
mquadrat befindet sich auf einem aufstrebenden Ast
Standard

Ich persönlich arbeite bei der globalen Konfiguration mit dem Singleton-Pattern. Informationsquelle ist ein XML, das mehrere "configuration" Elemente besitzt. Die Singleton-Klasse wählt entsprchend die korrekte Konfiguration aus (z.B. debug, qa, release), liest die Daten aus und stellt sie zur Verfügung. Könnte man sicher auch anders lösen, aber da das für mich funktioniert habe ich derzeit keine Veranlassung da etwas dran zu ändern.
__________________
Wir suchen PHP / Delphi und .NET Entwickler im Raum Darmstadt / Rhein-Main. Infos via E-Mail mueller@new-frontiers.de
mquadrat ist offline   Mit Zitat antworten
Alt 30.07.2010, 21:33  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
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

Hallo xm22,

Zitat:
Zitat von xm22 Beitrag anzeigen
Wie das APF das löst, das habe ich auch eine Zeit lang so praktiziert. Aber schon allein verschiedene Umgebungen mit verschiedenen Parametern zu handlen artet bei dezentraler Konfiguration aus.
Wie gesagt, separation of concerns und das Thema lose Kopplung sind einfach OO-Paradigmen, die ihre Berechtigung haben. Möchtest du ein Modul in mehreren Projekten verwenden, hast du vielleicht nicht immer die Konfiguration so zur Verfügung wie in einem anderen Projekt. Daher empfiehlt es sich, die Konfigurationen auch so zu handhaben. Deine Einschätzung klingt für mich deshalb etwas zu negativ. Zentrale Konfigurationen sind zwar für kleine Projekte sicher "praktikabel", nach wiederverwendbarer Software sieht das dann aber einfach nicht aus. Und wenn wir hier schon im Software-Design-Forum diskutieren, gilt Faulheit nicht als Argument.

Zitat:
Zitat von xm22 Beitrag anzeigen
EDIT: Was sagst Du dann zu der WEb-Config bei asp.net?
Das ist genaus schlecht, wie im JAVA die web.xml in einem Servlet-Container. Dort alles hineinzupfriemeln ist genauso sträflich wie in ASP.NET. Genau deshalb verwendet man in der JAVA-Welt auch Meta-Frameworks wie Spring, die eine vernünftige Möglichkeit mit sich bringen um Services zu konfigurieren. Hier werden DI und andere Methodiken (Service-Locator, ...) verwendet um für Entkopplung, Testbarkeit und Wiederverwendung zu sorgen. Eine zentrale Konfiguration ist gerade bei Unittests echtes Gift!
__________________
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 01.08.2010, 09:10  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.129
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

Ok, das sind Argumente. Ich werde mir das mal überlegen..
xm22 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
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 Tipps 2010 2 26.03.2010 11:12
Vergleichbare Funktionen ISTNV aus Excel?????? axeos PHP Tipps 2009 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
mvc 3 why applicationid

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 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