Was sind die besten Ressourcen, wenn Sie eine Anwendung mit der Modularisierung schaffen wollte? [geschlossen]

StackOverflow https://stackoverflow.com/questions/413247

  •  03-07-2019
  •  | 
  •  

Frage

In meiner Analyse der neueren Web-Plattformen / Anwendungen wie Drupal, Wordpress, und Salesforce, viele von ihnen ihre Software basiert auf dem Konzept der Modularisierung erstellen: Wo Entwickler neue Erweiterungen und Anwendungen, ohne erstellen können Code zu ändern in das „Kern“ System von den führenden Entwicklern gepflegt. Insbesondere weiß ich Drupal ein „Haken“ System verwendet, aber ich weiß nicht viel über den Motor oder Design, das es implementiert.

Wenn Sie einen Pfad zum Erstellen einer Anwendung gehen waren, und Sie wollten ein System, das für die Modularisierung erlaubt, wo soll man anfangen? Ist das eine besondere Designmuster , dass jeder kennt? Gibt es ein Handbuch , dass dieses Paradigma abonnieren neigt? Gibt es irgendwelche Websites , die diese Art der Entwicklung von Grund auf zu diskutieren?

Ich kenne einige Leute direkt zu OOP zeigen, aber das scheint nicht die gleiche Sache zu sein, ganz.

Dieses spezielle System ich lehnt sich mehr in Richtung etwas wie Salesforce Planung, aber es ist kein CRM-System.

Aus Gründen der Frage, bitte ignoriert das Buy vs. Build-Argument , wie die Berücksichtigung bereits in Arbeit ist. Gerade jetzt, ich bin die Erforschung des Build-Aspekts.

War es hilfreich?

Lösung

Es gibt zwei Möglichkeiten, um hier zu gehen, die man zu nehmen, hängt ab, wie Ihre Software verhalten.

Eine Möglichkeit ist die Plugin Route , wo die Menschen neuen Code installieren in der Anwendung die relevanten Aspekte modifizieren . Dieser Weg erfordert die Anwendung installiert werden kann und nicht nur als Dienst (oder dort, wo Sie installieren und Überprüfung Code gesendet in von Dritten, einen Alptraum) angeboten.

Der andere Weg ist ein API , bietet die von den betreffenden Parteien aufgerufen wird und macht die Anwendung der Steuerung an Code an anderer Stelle befindet (a la Facebook-Apps) oder die Anwendung machen zu tun, wie die API-Befehle, um den Entwickler (a la Google maps) zu aktivieren.

Auch wenn die Mechanismen variieren und wie man tatsächlich implementieren sie unterschiedlich sind, müssen Sie auf jeden Fall definieren

  • Was Freiheit lasse ich die Benutzer?
  • Welche Dienste biete ich für Programmierer die Anwendung anpassen?

und das Wichtigste:

  • Wie dies in meinem Code zu ermöglichen, während sichere und robuste bleiben. Dies erfolgt in der Regel durch den Code Sandbox, Eingaben zu validieren und möglicherweise begrenzten Fähigkeiten für die Nutzer bieten.

In diesem Zusammenhang sind Haken vordefinierte Orte in dem Code, der alle Hookfunktion der registrierte Plugins nennen, wenn definiert ist, das Standardverhalten der Anwendung zu modifizieren. Zum Beispiel, wenn Sie eine Funktion haben, die einen Hintergrund machen Sie haben

function renderBackground() {
    foreach (Plugin p in getRegisteredPlugins()) {
        if (p.rendersBackground) p.renderBackground();
    }
    //Standard background code if nothing got executed (or it still runs, 
    //according to needs)
}

In diesem Fall, dass Sie die ‚renderBackground‘ Haken haben, die Plugins implementieren können den Hintergrund zu ändern.

In einer API Weise würde die Benutzeranwendung Ihren Dienst rufen Sie den Hintergrund bekommen gemacht

//other code
Background b = Salesforce2.AjaxRequest('getBackground',RGB(255,10,0));
//the app now has the result of calling you

Das alles ist auch mit dem Hollywood Prinzip , was eine gute Sache ist anzuwenden , aber es ist manchmal einfach nicht praktikabel.

Andere Tipps

Die Plugin Muster von P von EAA ist wahrscheinlich das, was Sie nach. Erstellen Sie eine öffentliche Schnittstelle für Ihren Dienst, zu dem Plugins (Module) zum Ad-hoc zur Laufzeit integrieren.

Dies ist eine Komponentenarchitektur bezeichnet. Es ist wirklich ein ziemlich großes Gebiet, aber einige der wichtigsten wichtigen Dinge sind hier:

  • Zusammensetzung der Komponenten (Behälterkomponenten kann eine andere Komponente enthalten)
    • zum Beispiel ein Gitter sollten andere Netze enthalten können, oder andere Komponenten
  • Programmierung von Schnittstellen (Komponenten interagierten mit über bekannte Schnittstellen)
    • zum Beispiel ein Sichtsystem, das eine Komponente fragen könnte sich in HTML zu machen (sagen, oder es könnte eine Fläche machen weitergegeben werden und bitten Sie den Blick hinein zu ziehen direkt
  • umfangreiche Verwendung von dynamischen Register (wenn ein Plugin geladen wird, registriert er sich mit den entsprechenden Registern)
  • ein System für Veranstaltungen zu den Komponenten (wie Mausklicks, cursor eingeben usw.)
  • Passieren
  • eine Benachrichtigung
  • Benutzerverwaltung

und vieles mehr!

Wenn Sie die Anwendung hosten, veröffentlichen (und dogfood) eine RESTful API.

Wenn Sie Software sind zu verteilen, schauen OSGi .

Hier ist ein kleines Video, dass zumindest gibt Ihnen einige Hinweise; der Lego-Prozess [weniger als 2 Minuten lang]

Es gibt auch eine komplette Rezept dafür, wie Sie Ihren eigenen Rahmen zu schaffen, ausführlich über Modularisierung auf Basis ...

Die wichtigste Schlüsselelement zu machen modularisierte Software zu erinnern ist, dass es rein [meist] eine Frage, wie man lose gekoppelten Ihre Systeme erstellen können. Je mehr lose gekoppelt ist, desto leichter ist es modularisieren ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top