Sie haben eine sehr interessante und grundlegende Frage aufgeworfen. Die Frage nach der großen Projektarchitektur und der Ordnerstrukturorganisation (die der Architektur untergeordnet ist).
Heutzutage ist der häufigste Ansatz zum Erstellen der CMS-Framework-Architektur die Verwendung von MVC-Mustern. Es gibt einige gute Artikel zum Erstellen eigener MVC-Frameworks. Eines davon ist das Erstellen eines MVC-Frameworks mit PHP .
MVC steht für Model, View, Controller. Sie können diese Ansätze beliebig nennen - MVC, HMVC, MVP. Das Wesentliche ist, die einzelnen Komponenten Ihres Systems zu isolieren. Der "Controller" ruft die Daten aus dem "Model" ab und sendet sie an "View", wodurch das endgültige HTML gerendert wird. Sie haben bereits das "V" in Ihr contacts.php
und "MC" in Ihr implementiert contacts_class.php
. Sie haben also die Ansicht vom Modell und der Steuerung getrennt. Jetzt können Sie ganz einfach Ihre "Ansicht" ändern und andere Teile intakt lassen.
Ich rate Ihnen nicht, blindlings dem MVC-, MVP- oder was auch immer "MV" -Muster zu folgen. Es geht um Angemessenheit, Wirksamkeit und Geschmack.
Die allgemeine dynamische Website-Anwendung kann folgende Komponenten enthalten:
- Der Einstiegspunkt, sagen wir
index.php
- Die Hilfsbibliotheken / Klassen
- Der Anforderungsrouter
- Die Module, Komponenten oder Controller
- Die Template Engine oder vielleicht einzelne Views
Die echte Webanwendung kann andere Komponenten wie Event-Handler, Event-Dispatcher und Hooks enthalten, dies sind jedoch tatsächlich Nuancen. Nun, lassen Sie mich es so präsentieren, wie ich es präsentieren möchte:
Die allgemeine Framework-Betriebsroutine lautet wie folgt:
- Die Browseranforderung wird direkt an die ausführbare Datei / script (
index.php
) des Einstiegspunkts gesendet .
- Das Einstiegspunktskript lädt die Hilfsbibliotheken, Klassen und führt eine weitere Initialisierung unserer Programmierumgebung durch.
- Die URL wird an die Anforderungsrouterinstanz übergeben. Dieser Schritt kann der Teil von Schritt 2 sein.
- Der Anforderungsrouter analysiert die URL und sendet die Operation an eine bestimmte Komponente, ein bestimmtes Modul oder einen bestimmten Controller.
- Die Komponente (oder der Controller) verarbeitet die weitergeleitete Anforderung und sendet die Daten an die Ansicht, die gerendert werden soll.
Die entsprechende Projektordnerstruktur ist im Diagramm dargestellt.
Ich würde vorschlagen, dass Sie untersuchen, wie die anderen Frameworks implementiert werden. Die empfohlenen CMS / Frameworks sind zunächst CodeIgniter, OpenCart, Joomla 1.5 und Tango CMS.
Um eine Vorstellung davon zu bekommen, welche Fragen zu stellen sind und welche Lösungen zur Verfügung stehen, empfehle ich das Buch Patterns of Enterprise Application Architecture von Martin Fowler. Sie können sich einen Überblick über die Inhalte des Buches verschaffen, indem Sie seine Website lesen
Bitte beachten Sie, dass das Buch bereits ziemlich alt ist (im IT-Bereich), aber viele Prinzipien immer noch gültig sind, oder Sie sollten sie lernen, um daraus zu lernen. (Hat das Sinn gemacht?)
(Software) Architektur ist ein sehr breites Thema. Erwarten Sie keine Silberkugel, sondern immer mehr Fragen und Zweifel, bis Zeit und Geld ausgehen und Sie sich an die bisher beste Lösung halten müssen.
quelle
Schauen Sie sich zunächst ein gut entwickeltes Projekt an. Wordpress ist ein sehr gutes Beispiel für die Codestruktur: Es ist einfach zu verstehen, bietet aber eine Menge "Plug". So ist WordPress einfach per "Plug-In" zu testen.
Zweitens besteht eine sehr einfache Möglichkeit, Ihre Architektur zu überprüfen, darin, einen Komponententest zu schreiben. Wenn die Klasse "Kartendeck" beispielsweise eine "shuffle ()" - Methode hat, müssen Sie in der Lage sein, ein Kartendeck mit einer vordefinierten Größe (dh 5 Karten 1, 2, 3, 4, 5) zu erstellen, shuffle aufzurufen und in zu überprüfen einfache möglichkeit das ergebnis (id 1,4,2,5,3)
Sie müssen in der Lage sein, dies zu tun, ohne die gesamten Projektklassen zu instanziieren, und der Test muss sehr sauber zu lesen sein.
Wenn Sie dies nicht tun können, müssen Sie Ebenen zwischen Klassen hinzufügen und sie neu strukturieren, bis Sie eine einfache Möglichkeit finden, dies zu tun.
Dann wiederholen Sie diesen Schritt für alle Kernklassen Ihres Projekts.
Last but not least: Eine gute Architektur könnte in weniger wichtigen Klassen "faul" sein (es ist eine Frage der Wirtschaftlichkeit: Sehr gut gestaltete Dinge kosten in der realen Welt zu viel).
quelle
Eine gute Architektur für Großprojekte ist MVC (Model View Controller): http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
Ob andere Programmierer das verstehen würden, ist jedoch völlig anders. MVC kann komplex werden und ist bei kleinen Projekten manchmal zu viel des Guten. Einer der Vorteile davon ist, dass es sich leicht skalieren lässt.
quelle
Wenn ich Ihre Frage richtig verstehe, sprechen Sie über die Projektordnerstruktur und nicht im Wesentlichen über eine Architektur. Wenn mein Verständnis stimmt, lesen Sie weiter. Wenn Sie Ihre Frage bearbeiten oder einen Kommentar abgeben, bearbeite ich meine Antwort entsprechend.
Beim Entwerfen einer Anwendung müssen wir nach Beantwortung einiger grundlegender Fragen wie (was? Und wem?) Die Komponenten identifizieren und sie basierend auf Funktionalität \ Zuständigkeiten klassifizieren. Es gibt zwei Hauptwege, die ich kenne. Sie können Komponenten anhand von Anwendungsfällen (wie Login, Suche usw.) oder anhand von Ressourcen (Objekte ..) klassifizieren. Der erste Weg heißt aktivitätsorientiert und der zweite heißt ressourcenorientiert. Herkömmlicherweise klassifizieren die meisten Anwendungen Komponenten auf der Grundlage von Aktivitäten (da Designer dies beim Übergang von der Problemdomäne zur Lösungsdomäne als einfach empfanden). Aber ich schweife ab.
Sobald die Komponentenklassifikation identifiziert ist, müssen wir die Klassifikation basierend auf Ebenen identifizieren. Eine typische Webanwendung verfügt über View Tier, Model Tier und Controller Tier (MVC). Natürlich könnte es auch komplexere Anwendungen geben. (Die meisten realen Anwendungen sind komplexer als dies unkompliziert ist).
Nachdem ich diese beiden Taxonomien identifiziert habe, erstelle ich Ordner der obersten Ebene, die die einzelnen Ebenen identifizieren. (Benutzeroberfläche, Controller, Dienste, Dienstprogramme usw.). Unter jedem übergeordneten Ordner erstelle ich untergeordnete Ordner basierend auf Funktionen oder Ressourcen (Projekt - / EditProject - / SearchProject usw.). Idealerweise wird die funktionale Klassifizierung mehrstufig sein.
quelle
Es gibt gute und schlechte Architekturen, aber keine Silberkugeln. Eine Architektur muss an die aktuellen und höchstmöglichen zukünftigen Anforderungen angepasst sein.
Eine gute Richtlinie wäre, sicherzustellen, dass jeder Teil der Anwendung mit minimaler Auswirkung auf die anderen Teile geändert werden kann und dass jeder Teil über automatisierte vollständige Abdeckungseinheits- und Integrationstests verfügt.
quelle
Bei der Architektur geht es darum, sicherzustellen, dass Sie sich langfristig weiterentwickeln können. Bei größeren Anwendungen gehört dazu, Kompromisse zwischen der Unabhängigkeit mehrerer Mitarbeiter und der Vermeidung von Doppelarbeit (DRY) zu schließen, damit das Projekt flexibel bleibt. PHP-Projekte konzentrieren sich in der Regel darauf, Dinge unabhängig zu machen und weisen eine große Menge an Duplikaten auf.
Werfen Sie einen Blick auf Seaside, um ein gutes Gefühl für die andere Extremposition zu bekommen
quelle
Wenn Sie nicht wissen, wie man ein großes Projekt strukturiert, sollten Sie das Design / die Architektur anderer mit einem von mehreren guten PHP-Frameworks ausleihen. Ich würde CakePHP, CodeIgniter oder Symfony empfehlen. Alle implementieren ein Model, View, Controller, MVC-Muster, das in der Webentwicklung gut funktioniert. Sie sind alle recht leicht und leicht zu erlernen.
Sobald Sie eines dieser Frameworks kennengelernt haben, können Sie möglicherweise Ihre eigene Struktur für Ihr bestimmtes Projekt entwerfen. Wenn Sie jedoch gerade erst anfangen, würde ich mich auf die Arbeit anderer verlassen und das Rad neu erfinden.
quelle
MVC ist die am häufigsten verwendete Architektur, die nachweislich die meisten Probleme löst. Eine gute Architektur hat die folgenden Eigenschaften (und mehr, oder natürlich)
quelle
Bevor Sie einen Produktionscode schreiben, nehmen Sie sich 2 Wochen (Nächte :) Zeit und lesen Sie dieses Buch. Es wird Ihre Meinung über Programmierarchitektur, -praktiken und -pakete für eine lange Zeit ändern.
Agile Prinzipien, Muster und Praktiken C # von Prentice Hall
Beispiele sind in C #, aber sie sind leicht zu lesen. Es geht nicht darum, wie man die richtige Codesyntax schreibt. Es geht darum, wie man als Programmierer denkt.
Ich verspreche Ihnen, dass Sie es an Ihrem zugänglichsten Ort auf Ihrem PC speichern und Sie werden erstaunt sein, dass Sie programmiert haben, ohne es zu wissen. Es wird dein Denken verändern.
quelle