Ho un'applicazione ASP.NET che mette gli utenti attraverso una serie di moduli in una procedura guidata come la moda e li ha compilare i campi nel modulo. Nel codice, queste forme e campi sono rappresentati come oggetti "Step", con una collezione di oggetti "Field" come proprietà.
Attualmente ho solo una classe Step e ogni singola fase è un'istanza di questa classe con varie proprietà di identificazione impostate su di essa, inclusa la raccolta di campi. Gli oggetti passo vengono mantenuti in un database e caricati utilizzando un ORM. Nota che questi oggetti "Step" non sono effettivamente responsabili del progresso di un utente specifico, sono solo modelli che descrivono proprietà del passo come nome, nome visualizzato, ordine dei passi, ecc. Il progresso è tracciato attraverso una serie di "ItemStep" oggetti che fondamentalmente collegano uno di questi modelli "Step" a uno specifico "Progetto". "ItemSteps" memorizza le informazioni su quali passaggi sono completati, bloccati, saltati, ecc.
Tuttavia, questi oggetti passo e gli oggetti campo associati non sono progettati per essere configurati dagli utenti finali. La maggior parte delle modifiche agli oggetti probabilmente interromperà l'applicazione senza le corrispondenti modifiche al codice. Considerato tutto ciò, vedo 3 possibili cose che posso fare.
- Spostamento di passaggi e campi dal database e in una sorta di raccolta in memoria. Il mio processo di pensiero di base è di avere una raccolta statica che contiene tutti i passaggi, che saranno nascosti dietro la mia logica di accesso ai dati esistente.
- Crea una nuova classe per ogni passaggio e definisci in modo appropriato i metodi di uguaglianza in modo che gli oggetti a due fasi della stessa classe siano considerati uguali. Quindi, invece di interrogare il mio repository in memoria, o il mio ORM, tutto ciò che devo fare è creare un'istanza della classe di passaggi appropriata. L'unico svantaggio è che devo trovare un modo per mantenere la relazione tra un "ItemStep" nel database e la classe "Step" con cui dovrebbe essere istanziata.
- Non fare nulla e tenere tutto com'è.
I figura 1 o 2 si tradurrà in un miglioramento delle prestazioni dal momento che avranno meno viaggi nel database e semplificheranno il processo di modifica delle applicazioni, dal momento che non dovrò preoccuparmi di aggiornare il database. Inoltre, 1 o 2 potrebbero rendere più semplice la creazione di un ricco modello di ereditarietà attorno ai passaggi e spostare alcuni elementi logici nella stessa classe di passaggi, anziché dove si trova attualmente, all'interno dei miei Presentatori.
Di queste tre soluzioni possibili, cosa consiglieresti?