So erstellen Sie vollständig modulare Webanwendungen

34

In den kommenden Monaten werden wir ein Projekt starten, in 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, so dass dieser spezielle Client seine eigene Gruppe von Modulen hat, die er verwendet. Dann kann ein anderer Client eine andere Gruppe von Modulen verwenden. Der Trick dabei ist, dass Unternehmen A möglicherweise eine Reihe von Checkout- und Benutzermodulen hat, die die Funktionsweise dieses Systems ändern. Firma B hält sich möglicherweise an das Standard-Checkout-Verfahren, passt jedoch an, wie die Produkte durchsucht werden.

Was sind einige gute Ansätze für die Anwendungsarchitektur, wenn Sie eine Anwendung von Grund auf neu erstellen, die von Coreallen Clients gemeinsam genutzt werden soll, während die Flexibilität für Änderungen beibehalten wird, die speziell für einen Client vorgenommen werden sollen?

Ich habe die Hooks von CodeIgniter gesehen und halte das nicht für eine gute Lösung, da wir am Ende 250 Hooks haben könnten und es immer noch nicht flexibel genug ist. Welche anderen Lösungen gibt es? Im Idealfall müssen wir keine Linie in den Sand ziehen.

Webnet
quelle

Antworten:

26

Um eine hochgradig organisierte und entkoppelte Modularität zu erreichen, können Sie dem hierarchischen MVC- Architekturmuster folgen , das manchmal als Präsentationsabstraktionssteuerung bezeichnet wird (obwohl sie nicht genau dasselbe Muster sind). Kohana , Alloy , Fluency und FuelPHP unterstützen HMVC nativ *. Der HMVC-Ansatz von Kohana wird in Scaling Web Applications with HMVC und Optimizing HMVC Web Applications for Performance von Sam de Freyssinet beschrieben .

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

Bildbeschreibung hier eingeben

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 Schichtung von MVC-Triaden eine tiefere und robustere Anwendungsentwicklung. Dies führt zu mehreren Vorteilen, die uns zum nächsten Punkt bringen.

Schließlich sind Sie mit Hooks auf dem richtigen Weg. Auch wenn Sie eine HMVC-Architektur verwenden, müssen Sie je nach Implementierung und gewünschtem Automatisierungsgrad noch einige Probleme mit Hooks lösen . Eine gute Verwendung von Hooks wäre beispielsweise ein pre_controllerHook, der sicherstellt, dass alle Abhängigkeiten für installierte Module vorhanden sind.

* Es kann andere geben, die ich nicht kenne.

yannis
quelle
1
Unterstützt ASP.NET MVC dies?
Robert Harvey
@ Robert Harvey Ich habe keine Ahnung ...
Yannis
@ Robert Harvey Für mich scheint dies eher ein Muster als ein Framework zu sein. Möglicherweise fehlt mir etwas, aber ich kann nicht erkennen, warum ich dies nicht mit der Vererbung in ASP.NET MVC tun kann.
Jeremy
3
@ Jeremy: In den Ansichten wird es schwierig, insbesondere wenn Sie Teile von Ansichten wiederverwenden möchten. Es sieht faszinierend aus, aber ich finde es schwierig, es mir auf der Ebene der Schrauben und Muttern vorzustellen.
Robert Harvey
In der obigen Abbildung sieht es so aus, als würden die Ansichten der oberen Ebene aus kleineren Ansichten zusammengesetzt, die sich in der Hierarchie unten befinden. RenderAction()
Robert Harvey
5

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 mehrere Systeme dafür, wie z. B. RequireJS , die Java-Skript haben Module, 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ängigkeitshandling als Build-Schritt auf dem Server, beim Laden von Seiten oder dynamisch auf Anfrage ausgeführt wird und in welchem ​​Umfang Sie die Art und Weise ändern müssen, in der Sie Ihr Java schreiben. Skript.

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

Wenn Sie nicht zu viel Java-Skript haben, aber 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 nahezu modular und kostet Sie nicht viel, um sie zu implementieren.

bA
quelle
0

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

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

Die HMVC-Code-Organisation selbst führt nicht unbedingt zu Modularität.

Goce Ribeski
quelle