it-swarm.dev

So erstellen Sie vollständig modulare Webanwendungen

In den kommenden Monaten werden wir ein Projekt starten, bei dem wir ein System, das wir für einen Client (v1) erstellt haben, von Grund auf neu erstellen. Unser Ziel mit v2 ist es, es modular zu gestalten, damit dieser bestimmte Client seinen eigenen Satz von Modulen hat, die er verwendet. Dann kann ein anderer Client einen anderen Satz von Modulen insgesamt verwenden. Der Trick dabei ist, dass Unternehmen A möglicherweise über eine Reihe von Checkout- und Benutzermodulen verfügt, die die Funktionsweise dieses Systems ändern. Unternehmen B hält sich möglicherweise an das Standard-Checkout-Verfahren, passt jedoch die Art und Weise an, wie Produkte durchsucht werden.

Was sind einige gute Ansätze für die Anwendungsarchitektur, wenn Sie eine Anwendung von Grund auf neu erstellen, für die Sie ein Core haben möchten, das von allen Clients gemeinsam genutzt wird, während die Flexibilität für Änderungen an einem Client erhalten bleibt?

Ich habe CodeIgniters Hooks gesehen und denke nicht, dass dies eine gute Lösung ist, da wir am Ende 250 Hooks haben könnten und es immer noch nicht flexibel genug ist. Was sind andere Lösungen? Im Idealfall müssen wir keine Linie in den Sand ziehen.

34
Webnet

Um eine hoch organisierte und entkoppelte Modularität zu erreichen, können Sie dem Architekturmuster Hierarchical MVC folgen, das manchmal als Presentation-Abstraction-Control bezeichnet wird (obwohl es sich nicht ausschließlich um dasselbe Muster handelt). Kohana , Alloy , Fluency und FuelPHP unterstützen HMVC nativ* * und Kohanas HMVC-Ansatz wird in Skalieren von Webanwendungen mit HMVC und Optimieren von HMVC-Webanwendungen für die Leistung von Sam de Freyssinet erörtert.

Leider unterstützt CodeIgniter HMVC nicht nativ. Ich habe meine eigenen Bibliotheken erstellt, um eine Art HMVC-Unterstützung für CodeIgniter bereitzustellen, wobei ich mich von Codeigniter-modular-extensions-hmvc von wiredesignz inspirieren ließ. Es gibt einen sehr netten Einführung in HMVC Artikel bei nettus +, der CodeIgniter und die Erweiterung von wiredesignz behandelt. Das folgende Bild und Zitat stammen aus diesem Tutorial:

enter image description here

Jede Triade funktioniert unabhängig voneinander. Eine Triade kann über ihre Controller den Zugriff auf eine andere Triade anfordern. An beiden Punkten kann die Anwendung bei Bedarf auf mehrere Standorte verteilt werden. Darüber hinaus ermöglicht die Überlagerung von MVC-Triaden eine tiefgreifendere und robustere Anwendungsentwicklung. Dies führt zu mehreren Vorteilen, die uns zu unserem nächsten Punkt bringen.

Schließlich sind Sie mit Hooks auf dem richtigen Weg, selbst wenn Sie eine HMVC-Architektur verwenden, gibt es einige Probleme, die Sie mit Hooks noch lösen müssen, abhängig von Ihrer Implementierung und dem gewünschten Automatisierungsgrad . Eine gute Verwendung von Haken wäre ein pre_controller Hook, der beispielsweise sicherstellt, dass alle Abhängigkeiten für installierte Module vorhanden sind.

* Es kann andere geben, die ich nicht kenne.

26
yannis

Ich bin kein PHP Typ, aber auf der Java-Skript-Seite, wenn Sie viele Module haben wollen, die Sie so unabhängig wie möglich halten möchten, gibt es dafür mehrere Systeme, B. RequireJS mit Java-Skriptmodulen, die Abhängigkeiten von anderen Modulen deklarieren, und das Framework stellt sicher, dass sie bei Bedarf geladen werden.

Die verschiedenen Frameworks unterscheiden sich darin, wie Abhängigkeiten deklariert werden, wie viel Abhängigkeitsbehandlung als Build-Schritt auf dem Server, beim Laden der Seite oder dynamisch auf Anfrage ausgeführt wird und wie stark Sie die Art und Weise ändern müssen, in der Sie Java schreiben. Skript.

Diese Frameworks gelten nicht so häufig (oder überhaupt nicht), wenn Ihr serverseitiges Framework dies handhabt oder Ihr Java-Skript für Sie generiert. Möglicherweise möchten Sie jedoch, dass Ihr Java-Skript unabhängig von Ihrem serverseitigen Framework ist.

Wenn Sie nicht zu viel Java-Skript haben, aber eine gewisse Modularität wünschen, können Sie sich immer an anonyme selbstaufrufende Funktionen halten, die Abhängigkeiten behandeln, indem Sie die Skript-Tags zuerst mit Abhängigkeiten ordnen und sich gegenseitig referenzieren, indem Sie sich mit einem einzelnen Objekt in registrieren der globale Namespace. Das macht sie zumindest fast modular und kostet Sie nicht viel, um sie zu implementieren.

5
psr

Hier einige Anweisungen zum modularen Aufbau: https://class.coursera.org/saas/lecture/preview/9

auch dies: " SOA kann in einem Kontinuum gesehen werden, aus älteren Konzepten des verteilten Rechnens und modularer Programmierung , über SOA und weiter zu aktuellen Praktiken von Mashups, SaaS , ... "

Die Organisation des HMVC-Codes an sich führt nicht unbedingt zu Modularität.

0
Goce Ribeski