ASP.NET MVC Portable Areas - Possono comunicare e essere usati come un'architettura plug-in?

3

Andrò dritto al punto: Mi chiedevo se esistesse un modello comune per utilizzare le aree portatili come componenti di un'architettura simile a un plugin.

Esempio: Abbiamo 3 plugin (aree portatili) confezionati e distribuiti tramite feed NuGet. Ognuno di essi segue la struttura MVC standard (dispone di propri modelli, viste e controllori). Diciamo modulo di accesso, intestazione e piè di pagina.

Quello che mi stavo chiedendo se c'è un modo per farli comunicare. Ad esempio: quando l'utente esegue l'accesso, il plug-in di login esegue la propria logica, registra l'utente e quindi aggiorna lo stato del plug-in dell'intestazione con le modifiche indicate di conseguenza.

Modifica : Gestione delle chiamate lato client Un'altra cosa che non ho menzionato nel post originale è che volevo esporre le funzionalità del plugin tramite i controller per essere consumate anche tramite JavaScript. Diciamo che ho tutta l'architettura in atto e tutti i plugin si sono registrati correttamente con il sistema (percorsi, dipendenze, ecc.) Ad esempio, se faccio clic sulla funzionalità "Cambia colore" di un plug-in "Selettore colori", richiama il metodo di azione di un altro plug-in (il plugin Immagine consente di dire) e carica l'immagine del colore richiesto. Ovviamente tutto dovrebbe essere fatto tramite Ajax senza reinviare l'intera pagina che ospita i componenti.

Pensi che sia uno scenario fattibile nelle soluzioni che hai proposto qui?

Grazie in anticipo per tutte le risposte.

    
posta Beton 20.10.2012 - 19:16
fonte

1 risposta

3

Non utilizzerei un database condiviso in cui tutti i plugin hanno accesso in scrittura poiché ciò rende estremamente difficile il debug. Non c'è modo di dire quale plug-in avvitato.

La soluzione migliore oggi è sfruttare l'inversione del contenitore di controllo.

  1. Consenti a ciascun plug-in di avere un assembly separato ( pattern di interfaccia separato ) dove dichiara le sue interfacce di integrazione (utilizzate da altri plugin )
  2. Permetti ad ogni plugin di avere una radice di composizione dove registra i suoi servizi
  3. Quindi lascia che ogni plug-in utilizzi l'iniezione delle dipendenze per utilizzare i servizi specificati da altri plug-in.

Un altro modo è usare comandi ed eventi di dominio come li descrivo qui: link

Tieni presente che non sono specifiche per le aree portatili.

Se sei interessato a un'architettura di plugin MVC3 ne ho realizzato uno utilizzando il mio progetto Griffin.MVcContrib: link

    
risposta data 20.10.2012 - 20:30
fonte

Leggi altre domande sui tag