Ho un problema molto difficile da risolvere, ho pensato e cercato molto e sono giunto a una conclusione che menzionerò. il problema è che ho un client che vuole creare un sito web basato su una funzionalità comune, quindi chiamiamolo Moduli, quindi quello che pensavo è usare MVC Contrib. Portable Aree, che sono ottime idee per collegare i moduli, ma io ho un grosso problema, diciamo che ho creato un modulo Blog che sarà implementato in un nuovo sito che vuole, ora alcuni utenti hanno requisiti unici come uno di loro ha bisogno di aggiungere una galleria di immagini per ogni articolo, o Elenco di riferimenti in ogni articolo . questo sarebbe facile in situazione normale in cui si dispone di un sito su cui lavorare, quindi tutto quello che dovete fare èBasato su modulo complicato Creare un nuovo record in DB con ASP.NET MVC 2
- aggiungere una nuova tabella galleria con chiave esterna per la tabella Blog.
- rigenerare il codice Linq2SQl e aggiornare il modello.
- aggiungi nuovi elementi del modulo a Crea, Modifica, Elimina viste.
- aggiungere la logica nel controller.
ma nella mia situazione è complicata e il tempo ingombrante a causa di 2 motivi
- se la nuova funzionalità è fresco ed il cliente decide di implementare in tutti i siti, allora devo ripetere la lavoro per ogni sito.
- se la funzionalità è unica creerà incoerenza per me in futuro
è per questo che, come primo passo per risolvere il problema che ho usato Aree portatili per creare relazionati a ciascun modulo, ora questo sarà sicuramente facilitare il mio lavoro trascinando 1 DLL per ogni nuovo modulo o Addon, ma ho un piccolo problema qui, che
- perché il nuovo modulo o componente aggiuntivo è un Dll, come posso creare un tale funzionalità nel mio pannello di amministrazione di installa il nuovo Addon o trova uno nuovo aggiunto Modulo/Addon trascinato nuove DLL per l'applicazione principale
- ciò che è meglio pratica per creare un'installazione procedura all'interno dell'Area portatile, come aggiornamento DB, nuove rotte, ecc ..
Ora per il problema più grande che è specifico per il modulo Addon :) prendiamo indietro l'articolo Galleria Addon, se seguo la logica che ho accennato in precedenza con la creazione di una zona come portatile, sarebbe più facile creare una funzionalità nel codice del modulo per scorrere tutti i componenti aggiuntivi installati e elencarli nelle viste CRUD, ma poiché ho isolato l'addon e non voglio aggiornare manualmente il codice del modulo principale per i motivi sopra, non ci sarà alcun modo per eseguendo operazioni CRUD per i nuovi Addon in Sync con il modulo principale perché non esiste alcuna relazione di chiave esterna, anche perché come ho detto sopra potrebbe essere Opzionale, quindi ho pensato alla seguente soluzione che spero ci sarebbe una migliore
Primo processo di installazione Creerò una tabella per l'addon di Gallery, ma invece di creare una relazione di chiave esterna creerò una chiave esterna manuale che verrà popolata generando un ID univoco nel controller del modulo principale quando creo record utilizzando il seguente codice poi riporlo in Viewdata e basta passare al controller Addon quando creo il nuovo record,
private string GenerateId()
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}
ViewData["FK"] = GenerateId();
ma qui ci sono le mie preoccupazioni
- è questo il modo fattibile o semplicemente stupido .
- è questa tecnica produce generare una chiave veramente unica.
Sono estremamente dispiaciuto se la mia domanda è zoppo, ma questo è il posto migliore per chiedere e penso che molte persone vorrebbero avere un tale funzionalità e spero che qualcuno risponderà mi
Non è affatto una domanda zoppa, ma * è * una domanda di design, che richiede un po 'di riflessione. Non penso che la progettazione del tuo database debba mai richiedere di creare i tuoi ID personali, comunque.Il mio istinto è che hai bisogno di una tabella contenente tutte le informazioni del tuo plugin (se è quello che stai facendo), con una colonna aggiuntiva per distinguere i plugin l'uno dall'altro. Ciò consentirebbe di utilizzare lo stesso schema Linq in SQL per tutti i plug-in. Se sono disponibili informazioni univoche per un particolare plug-in, è possibile creare uno schema Linq/SQL separato per le informazioni univoche del plug-in. –
Lo schema Linq to SQL separato può convivere con il plug-in, pertanto non è necessario aggiornare lo schema Linq a SQL principale ogni volta che si aggiunge un plug-in con informazioni univoche. Questo è solo uno dei molti modi in cui il problema potrebbe potenzialmente essere risolto. –
grazie ragazzi ma, puoi dirmi esattamente cosa devo includere nello schema di plugin, solo le Tabelle Plugin? un altro problema che esiste ancora è come posso collegare il record appena inserito con i Plug in, è come ho accennato o c'è modo migliore? – DevMania