Come creare applicazioni Web completamente modulari [chiuso]


34

Nei prossimi mesi inizieremo un progetto in cui prendiamo un sistema che abbiamo creato per un client (v1) e lo ricostruiamo da zero. Il nostro obiettivo con v2 è di renderlo modulare, in modo che questo specifico client disponga del proprio set di moduli che utilizza, quindi un altro client può utilizzare un set di moduli completamente diverso. Il trucco qui è che la società A potrebbe avere una serie di checkout e moduli utente che cambiano il modo in cui quel sistema funziona. La società B potrebbe attenersi alla procedura di pagamento standard, ma personalizzare il modo in cui i prodotti vengono sfogliati.

Quali sono alcuni buoni approcci all'architettura delle applicazioni quando si Corecrea un'applicazione da zero che si desidera condividere con tutti i client mantenendo comunque la flessibilità per qualsiasi cosa da modificare specificamente per un client?

Ho visto i ganci di CodeIgniter e non penso che sia una buona soluzione in quanto potremmo finire con 250 ganci e non è ancora abbastanza flessibile. Quali sono alcune altre soluzioni? Idealmente non avremo bisogno di tracciare una linea nella sabbia.

Risposte:


26

Per ottenere una modularità altamente organizzata e disaccoppiata, è possibile seguire il modello architettonico gerarchico MVC , a volte noto come controllo di presentazione-astrazione (sebbene non siano strettamente lo stesso modello). Kohana , Alloy , Fluency e FuelPHP supportano nativamente HMVC * e l'approccio HMVC di Kohana è discusso in Scalare applicazioni Web con HMVC e Ottimizzare le applicazioni Web HMVC per le prestazioni , di Sam de Freyssinet .

Sfortunatamente CodeIgniter non supporta HMVC in modo nativo. Ho creato le mie librerie per fornire una sorta di supporto HMVC su CodeIgniter, prendendo spunto dal codeigniter-modular-extensions-hmvc di wiredesignz . C'è una bella introduzione all'articolo di HMVC su nettus +, che parla dell'estensione di CodeIgniter e di wireesignz. L'immagine e la citazione seguenti sono tratte da quel tutorial:

inserisci qui la descrizione dell'immagine

Ogni triade funziona indipendentemente l'una dall'altra. Una triade può richiedere l'accesso a un'altra triade tramite i propri controller. Entrambi questi punti consentono all'applicazione di essere distribuita su più posizioni, se necessario. Inoltre, la stratificazione delle triadi MVC consente uno sviluppo più approfondito e robusto delle applicazioni. Ciò porta a numerosi vantaggi che ci portano al prossimo punto.

Infine, sei sulla strada giusta con gli hook, anche se adotti un'architettura HMVC, ci saranno alcuni problemi che dovrai ancora risolvere con gli hook, a seconda dell'implementazione e del livello di automazione che stai cercando . Un buon uso degli hook sarebbe un pre_controllerhook che assicurerebbe la presenza di tutte le dipendenze per i moduli installati, ad esempio.

* Potrebbero essercene altri che non conosco.


1
ASP.NET MVC ha il supporto per questo?
Robert Harvey,

@RobertHarvey Non ne ho idea ...
yannis,

@Robert Harvey Per me questo sembra più un modello che un quadro. Forse mi manca qualcosa, ma non riesco a capire perché non riesco a farlo con l'ereditarietà in ASP.NET MVC.
Jeremy,

3
@Jeremy: diventa difficile nelle viste, specialmente se si desidera riutilizzare parti delle viste. Sembra intrigante, ma sto trovando difficile visualizzare a livello di dadi e bulloni.
Robert Harvey,

Nel diagramma sopra, sembra che le viste di livello superiore siano composte da viste più piccole situate in basso nella gerarchia. Ciò può già essere fatto in una certa misura conRenderAction()
Robert Harvey,

5

Non sono un tipo PHP, ma sul lato java-script se hai molti moduli che vorresti mantenere il più indipendente possibile, ci sono diversi sistemi per questo, come RequireJS , che hanno java-script moduli che dichiarano dipendenze da altri moduli e il framework si assicura che vengano caricati quando necessario.

I vari framework disponibili variano in base al modo in cui vengono dichiarate le dipendenze, a quanto viene gestita la dipendenza come fase di compilazione sul server, al caricamento della pagina o in modo dinamico su richiesta e in quanto è necessario modificare il modo in cui si scrive java- script.

Questi framework non si applicano tanto (o forse del tutto) se il framework lato server lo gestisce o genera lo script java per te, ma potresti voler che lo script java sia indipendente dal framework lato server.

Se non hai troppo java-script ma vuoi un po 'di modularità, puoi sempre attenerti alle funzioni di chiamata automatica anonime che gestiscono le dipendenze ordinando prima i tag di script con dipendenze e facendo riferimento a vicenda registrandosi con un singolo oggetto in lo spazio dei nomi globale. Questo almeno li rende quasi modulari e non ti costa molto da implementare.


0

Ecco alcune istruzioni su come realizzare la progettazione modulare: https://class.coursera.org/saas/lecture/preview/9

anche questo: "La SOA può essere vista in un continuum, dai vecchi concetti di elaborazione distribuita e programmazione modulare , attraverso la SOA, e alle attuali pratiche di mashup, SaaS , ..."

L'organizzazione del codice HMVC da sola non porta necessariamente alla modularità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.