Come rendere modulare un sito ASP.NET MVC

14

Sono in fase di pianificazione per la creazione di un sistema intranet di dipendenti con ASP.NET MVC 4. Vorremmo che il sito fosse costituito da "moduli" separati, ognuno dei quali offre una funzionalità diversa: messaggistica, buste paga modifiche, ecc. Mi piacerebbe che questi moduli fossero abilitati o disabilitati in fase di compilazione. La homepage mostrerà una sorta di navigazione che collegherà ogni modulo che viene caricato.

È facile finora, ma non voglio che la funzione di navigazione debba sapere in anticipo sui moduli. In altre parole, voglio che i moduli siano dinamicamente individuabili; Voglio essere in grado di scrivere il codice per un nuovo modulo e quindi aggiungere un collegamento alla barra di navigazione senza modifiche al codice in nessun altro punto della sorgente. Ogni modulo dovrebbe avere un modo per registrarsi con la barra di navigazione e, cosa ancora più importante, dovrebbe essere fatto per ogni modulo appena caricato.

Credo che ciò precluda l'utilizzo delle aree MVC, dal momento che sono progettate per il caso in cui il layout del sito è noto in anticipo. Sembra che il MEF sia appropriato, anche se sembra che la gente abbia avuto successo misto nella combinazione di MEF con MVC. Il MEF è davvero la strada da percorrere qui, o esiste un modo migliore per realizzare ciò di cui ho bisogno?

    
posta bdesham 23.01.2013 - 15:38
fonte

2 risposte

4

Vorrei prima avere una classe centralizzata che viene utilizzata per l'applicazione per registrare i moduli compilati con un costruttore statico e un membro statico Elenco dei moduli che erano nel sistema. I moduli avrebbero una proprietà statica che indica se è una voce di menu o meno e quale ordine dovrebbe apparire nel menu.

Ogni modulo avrebbe il proprio costruttore statico che si annoterebbe nella classe centralizzata che tiene traccia dei moduli.

Pensa a questo sistema più come un sistema di cronometraggio in cui i dipendenti entrano e cronometrano. Poi al momento del pagamento, sappiamo pagare tutti gli impiegati in base a chi ha effettuato il check-in, ecc.

È anche possibile utilizzare Reflection se si dispone di un contratto di interfaccia sui moduli che devono ereditare da tali informazioni di metadati.

Ho lavorato per la Warner Brothers Music e ho realizzato un sistema di elaborazione musicale interno per diversi formati di codifica. Ho creato un modello di plug-in generico per la codifica con reflection che utilizzava l'ereditarietà in modo che potesse essere convertito in typecast con reflection per ottenere le proprietà meta della classe. Tuttavia, non ho provato a utilizzare una classe centralizzata statica. Solo un po 'pensato a quello in modo casuale come un altro modo per provare per divertimento.

Vorrei anche aggiungere che ho usato MVC che serve più client con una linea di base di requisiti ma con anche funzionalità avanzate simili a quello che stai cercando di fare. Invece ho convertito il MVC in usando App_Code piuttosto che richiedere una compilazione. È più facile inviare i file in questo modo senza la necessità di una compilazione centralizzata.

Puoi sfruttare JIT con un semplice FTP o GIT push invece di dover compilare localmente e spingere DLL in giro.

Questo è un link a quell'articolo su stack overflow

    
risposta data 23.01.2013 - 17:27
fonte
1

Potresti voler usare MEF con MVC. Questo ti darebbe la possibilità di aggiungere - Take Away, se necessario, senza la ricompilazione o la distribuzione. Come al solito, Scott è un buon punto di partenza: link

    
risposta data 07.02.2013 - 17:47
fonte

Leggi altre domande sui tag