| | | | |
| |||||||
| Software-Design Diskussionen auf Profi-Niveau: PHP Lösungen auf konzeptioneller Ebene |
|
| | LinkBack (1) | Themen-Optionen | Bewertung: |
| | |
| Erfahrener Benutzer Registriert seit: 06.09.2008
Beiträge: 189
![]() | Guten Morgen! Ich habe leider immer öfter das Problem, dass ich nicht weiß, wie ich größere Projekte Strukturieren soll. Daher wende ich mich nun hoffnungsvoll an euch. Eine meiner Meinung nach sinnvolle Struktur habe ich mal in dieser PDF-Datei aufgezeigt. Nun habe ich allerdings das Problem, dass ich nicht weiß, wie ich die einzelnen Module sinnvoll aufbauen soll. Eins ist sicher jedes Modul, ich nehme jetzt mal als Beispiel ein News-Modul, soll sein eigenes Template sowohl für das Backend, als auch für das Frontend besitzen. Die einzelnen Aktionen, die innerhalb eines Moduls verfügbar seien sollen, sollen ausgelagert und am besten auch getrennt werden. Doch, wie lagere ich die Aktionen am geschicktesten in eine oder mehrere Dateien aus und wie führe ich letzt endlich alles am geschicktesten zusammen? Und wie mache ich am geschicktesten Objekte, wie eine Datenbank-Verbindung oder geladenene Konfigurationen global verfügbar? Viele Fragen und gleich das nächste Problem? Wie kann ich mir Ausgaben erleichtern? Gibt es da einfach Muster, wie zum Beispiel bei einer Pager-Klasse, die eine Blätterfunktion ersetzt? Die Ausgabe von Daten in sortierbaren Tabellen ist sehr schick und für den User absolut angenehm, aber, wenn man sie jedesmal in das Layout einpassen muss, doch sehr ermüdent und zeitaufwendig. Lohnen sich hier Klassen, die bei solchen Aufgaben helfen und welche lassen könnten das neben einer Pager-Klasse noch sein? Und gleich die nächste Frage. Natürlich ist es nicht schön, wenn man einmal etwas gecodet hat und es beim nächsten mal wieder schreiben muss, da man nicht alles wiederverwenden kann. Daher möchte ich gerne ein Grundsystem schreiben, dass eigentlich nicht mehr erlaubt als Benutzer, Einstellungen und Packages (Module) zu verwalten. Wie könnte so eine Verwaltung aussehen? Ich weiß es leider nicht. Ist es sinnvoll auf einfache Tarballs zurück zu greifen und sollte ich diese lieber einfach auf dem komplizierten Weg über die file()-Funktionen entpacken oder sollte ich die Gefahr auf mich nehmen, dass auf dem einen oder anderen Webspace exec() und system() verboten bzw. gesperrt sind? Wie könnte die Package-erwaltung weiter aussehen? Sollte eine Klasse die Installation eines Packages übernehmen? Das könnte zum Beispiel dann ja einfach so aussehen, dass diese Klasse einen Tarball einfach in ein temporäres Verzeichnis entpackt und dort eine install.php aufruft, die alle wichtigen Dateien verschiebt, Datenbanken erstellt und erste Einträge vornimmt. Ein Problem wäre dann die Deinstallation dieses Paketes. Eine weitere die Verknüpfung zwischen Paketen. Wie kann man überprüfen, ob ein Paket überhaupt gelöscht werden darf ohne andere zu beeinflussen? Sollten installierte Pakete in einer Datenbank erfasst werden? Wie schon gesagt - sehr sehr viele Fragen, aber ich hoffe ihr könnte mir etwas weiter helfen. MfG, Andy
__________________ I'm so tired of slitting the throats of people calling me a violent psychopath. |
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator und Wett-König | Hallo Andy, du formulierst viele Fragen, auf die ich gerne eingehen will. Allerdings ist jetzt schon recht spät und ich habe morgen eine lange Fahrt inkl. Hochzeitseinladung vor mir. Ich melde mich deshalb am Sonntag mit einer ausführlichen Antwort. Zu deinem Post habe ich folgende schnelle Hinweise: - Basis für Entwicklung: Adventure PHP Framework - Startseite - Strukturierung von Modulen: Adventure PHP Framework - Gaestebuch Tutorial - Pager: Adventure PHP Framework - Mitgelieferte Module - Datenbank-Abstraktion: Adventure PHP Framework - Klassenreferenz connectionManager - Wiederverwendbarkeit: Adventure PHP Framework - Kommentar Funktion Tutorial - Grundsystem User-Verwaltung: Adventure PHP Framework - Generischer OR Mapper und forum.adventure-php-framework.org [de] • Thema anzeigen - GenericORMapper Ich hoffe da ist etwas für dich dabei. ![]()
__________________ 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! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | |
| Erfahrener Benutzer Registriert seit: 06.06.2008
Beiträge: 1.631
PHP-Kenntnisse: Anfänger ![]() | Front-Controller: Ein Front-Controller ist ein Objekt, das alles Anfragen an eine Webapplikation entgegennimmt und die Arbeiten durchführt, die bei allen Anfragen identisch sind. Zur Erzeugung der Antwort auf die Anfrage leitet es die Anfragen an die Objekte weiter, die die unterschiedlichen Anfragen verarbeiten können. (Stephan Schmidt in PHP Design Patterns, O'Reilly) Der Front-Controller ist die Zentrale Schnittstelle einer Applikation. Um nicht nur auf normale HTTP-Anfragen sondern um zum Beispiel auch auf SOAP oder AJAX, ohne die eigentliche Anwendung umschreiben zu müssen, reagieren zu können, abstrahiert man sowohl Anfrage als auch Antwort und packt sie in eigene Objekte. Für HTTP wären das HttpRequest und HttpResponse, für SOAP dann SoapRequest und SoapResponse und so weiter. Da man immer gegen Schnittstellen programmieren sollte, zunächst mal die Interfaces für Request und Response: PHP-Code: Request PHP-Code: PHP-Code: Beispiel zur Anwendung: PHP-Code: Wir möchten möglichst flexibel sein, deshalb haben wir Request und Response abstrahiert (anstatt einfach $_REQUEST zu verwenden). Der Request enthält immer einen konkreten Auftrag. Alle möglichen Aufträge die unsere Applikation hat möchten wir in Objekte kapseln. Dazu kommt das Command-Pattern wie gerufen. Das Command-Pattern kapselt einen Auftrag als Objekt. Dadurch wird ermöglicht, andere Objekte mit Aufträgen zu parametrisieren, Aufträge in eine Queue zu stellen oder diese Rückgängig zumachen. (Stephan Schmidt in PHP Design Patterns, O'Reilly) Damit ein Befehl arbeiten kann benötigt er das Request und Response Objekt, daraus resultiert folgendes Interface PHP-Code: Vorteile:
PHP-Code: PHP-Code: soll, ist der CommandResovler. Er soll wie gewünscht Command-Objekte laden, aber wir wollen flexibel bleiben. Vielleicht nutzt unsere Applikation später einen anderen Weg Befehle auszuführen. Daher benötigen wir zunächst mal ein Interface: PHP-Code: für die Erzeugung der Antwort verwendet werden soll. Dazu verlangt das Interface eine getCommand() Methode, die den Request übergeben bekommt und das entsprechende Objekt zurück liefert. Die Logik der einzelnen CommandResolver-Klassen kann dabei so komplex sein wie es die Applikation verlangt. Für dieses Beispiel genügt eine einfache Implementierung, die nach folgendem Schema arbeitet:
PHP-Code: PHP-Code: Alle nötigen Schritte sind getan, jetzt können wir endlich den Front-Controller programmieren, unsere Zentrale Schnitstelle: PHP-Code: PHP-Code: vor und nach der Verarbeitung durch die Command-Objekte zu verändern. Die Codebeispiele und die meisten Erläuterungen stammen aus dem Buch "PHP Design Patterns" von Stephan Schmidt. Die Codebeispiele können von der Seite PHP Design Patterns heruntergeladen werden.
__________________ "Nobody is as smart as everybody" - Kevin Kelly — The best things in life aren't things |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
LinkBacks (?)
LinkBack to this Thread: http://www.php.de/software-design/48056-strukturierung-groessyerrer-projekte.html | ||||
| Erstellt von | For | Type | Datum | |
| Adventure PHP Framework - Literatur | This thread | Refback | 02.12.2008 15:17 | |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Suche kleinere Projekte | Gawain | Beitragsarchiv | 1 | 24.07.2008 20:09 |
| Zend Studio und Projekte | breaker | PHP-Fortgeschrittene | 0 | 26.05.2008 13:51 |
| Partner für neuartige online Projekte gesucht | iSi | Trash | 0 | 25.03.2006 21:22 |
| Strukturierung einer kleinen DB | c-f-g | Datenbanken | 6 | 24.03.2006 09:54 |
| Strukturierung modularer Website mit CleanUrls | ssm | PHP Tipps 2006 | 20 | 22.03.2006 16:49 |
| Mach Websiten und oder ganze Projekte | ClaBo3 | Trash | 26 | 06.02.2006 15:12 |
| [Erledigt] Projekte effektiv Planen? | PHP Tipps 2005 | 17 | 18.10.2005 16:06 | |
| Programierer für projekte gesucht! | Beitragsarchiv | 3 | 19.09.2005 16:20 | |
| mehrere projekte auf 1 Datenbank möglich? | PHP Tipps 2005-2 | 5 | 17.07.2005 17:20 | |
| Erfahrener Typo3-Entwickler sucht neue Projekte | Beitragsarchiv | 1 | 16.07.2005 14:53 | |
| S: Programm, Projekte verwalten | Flor1an | Beitragsarchiv | 5 | 17.04.2005 12:12 |
| Partner für Projekte | Beitragsarchiv | 5 | 03.03.2005 12:23 | |
| Freelancer: PHP Entwickler sucht Projekte | phpprofi | Beitragsarchiv | 4 | 18.02.2005 17:16 |
| Projekte nachträglich auf Klassen und Objekte umstellen??? | PHP-Fortgeschrittene | 7 | 10.12.2004 15:33 | |
| Freelancer sucht neue Projekte | Beitragsarchiv | 0 | 12.08.2004 09:31 | |