Quali sono le risorse migliori se si desidera creare un'applicazione con modularizzazione? [chiuso]

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

  •  03-07-2019
  •  | 
  •  

Domanda

Nella mia analisi delle più recenti piattaforme / applicazioni Web, come Drupal, Wordpress e Salesforce, molti di loro creano il loro software basato sul concetto di modularizzazione: dove gli sviluppatori possono creare nuove estensioni e applicazioni senza dover cambiare il codice in il "core" sistema gestito dagli sviluppatori principali. In particolare, so che Drupal usa un "gancio" sistema, ma non so molto del motore o del design che lo implementa.

Se dovessi seguire una strada per creare un'applicazione e volessi un sistema che consentisse la modularizzazione, da dove inizi? È questo un particolare modello di progettazione che tutti conoscono? Esiste un manuale a cui questo paradigma tende a iscriversi? Esistono dei siti Web che discutono questo tipo di sviluppo da zero?

So che alcune persone puntano direttamente su OOP, ma questa non sembra essere la stessa cosa, del tutto.

Questo particolare sistema che sto pianificando tende maggiormente verso qualcosa come Salesforce, ma non è un sistema CRM.

Per motivi di domande, ignora l'argomento Compra vs. Build , poiché tale considerazione è già in corso. In questo momento, sto studiando l'aspetto della build.

È stato utile?

Soluzione

Ci sono due modi per andare qui, quello da prendere dipende da come si comporterà il tuo software.

Un modo è il plugin route , dove le persone possono installare un nuovo codice nell'applicazione modificando gli aspetti rilevanti . Questo percorso richiede che l'applicazione sia installabile e non solo offerta come servizio (oppure che installi e riveda il codice inviato da terze parti, un incubo).

L'altro modo è offrire una API , che può essere chiamato dalle parti interessate ed eseguire il controllo del trasferimento dell'applicazione al codice situato altrove (come le app di Facebook) o fare in modo che l'applicazione faccia come i comandi API consentono allo sviluppatore (come la Google Maps).

Anche se i meccanismi variano e le modalità di attuazione effettiva differiscono, in ogni caso è necessario definire

  • Quale libertà lascerò agli utenti?
  • Quali servizi offrirò ai programmatori per personalizzare l'applicazione?

e la cosa più importante:

  • Come abilitarlo nel mio codice rimanendo sicuro e solido. Questo di solito viene eseguito tramite sandboxing del codice, convalida degli input e potenzialmente offrendo funzionalità limitate agli utenti.

In questo contesto, gli hook sono posizioni predefinite nel codice che richiamano la funzione hook di tutti i plugin registrati, se definiti, modificando il comportamento standard dell'applicazione. Ad esempio, se si dispone di una funzione che esegue il rendering di uno sfondo, è possibile avere

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 questo caso hai l'hook 'renderBackground' che i plugin possono implementare per cambiare lo sfondo.

In modo API, l'applicazione utente chiamerebbe il tuo servizio per ottenere lo sfondo reso

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

Tutto ciò è anche correlato al Principio di Hollywood , che è una buona cosa da applicare , ma a volte non è solo pratico.

Altri suggerimenti

Il Modello del plug-in da P di EAA è probabilmente ciò che stai cercando. Crea un'interfaccia pubblica per il tuo servizio a cui plug-in (moduli) possono integrarsi ad hoc in fase di runtime.

Questa si chiama architettura componente. È davvero una grande area, ma alcune delle cose importanti qui sono:

  • composizione dei componenti (i componenti del contenitore possono contenere qualsiasi altro componente)
    • ad esempio una griglia dovrebbe essere in grado di contenere altre griglie o qualsiasi altro componente
  • programmazione tramite interfaccia (i componenti sono interagiti con interfacce note)
    • ad esempio un sistema di visualizzazione che potrebbe richiedere a un componente di eseguire il rendering stesso (ad esempio in HTML, oppure potrebbe essere passato un'area di rendering e chiedere alla vista di disegnarci direttamente
  • ampio uso di registri dinamici (quando viene caricato un plugin, si registra con i registri appropriati)
  • un sistema per il passaggio di eventi ai componenti (come clic del mouse, cursore, ecc.)
  • una notifica
  • gestione utenti

e molto altro ancora!

Se stai ospitando l'applicazione, pubblica (e dogfood) un'API RESTful.

Se stai distribuendo software, guarda OSGi .

Ecco un piccolo video che almeno ti darà alcuni suggerimenti; il processo Lego [meno di 2 minuti]

Esiste anche una ricetta completa su come creare il proprio framework basato ampiamente sulla modularizzazione ...

L'elemento chiave più importante per creare un software modulare è ricordare che è puramente [principalmente] una questione di quanto sia possibile accoppiare liberamente i propri sistemi. Più si accoppiano liberamente, più è facile modulare ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top