Sto lavorando su un'applicazione MVC e mi sto interrogando sul modo migliore di progettare uno dei miei modelli.
Ho una classe chiamata RightLeftPersonToggle che rappresenta due caselle di riepilogo selezionate nella pagina. L'utente è in grado di spostare "persone" tra la casella sinistra e quella destra usando i pulsanti tra di loro.
Questa classe può rappresentare sia un driver del veicolo che un gestore, quindi il carico e il codice di salvataggio sono diversi per ogni tipo. La classe è di sotto.
public class RightLeftPersonToggle
{
public RightLeftPersonToggle()
{
LeftList = new List<Person>();
RightList = new List<Person>();
}
public List<Person> LeftList { get; set; }
public List<Person> RightList { get; set; }
public string LeftListTitle { get; set; }
public string RightListTitle { get; set; }
public string PropertyName { get; set; }
}
Mi chiedo quale sia il modo migliore per gestire il caricamento e il salvataggio degli elenchi. Ho trovato due soluzioni ma non sono sicuro su quale sia il migliore.
1) Il controller (o modello principale) è responsabile del caricamento e salvataggio di LeftList e RightList. La classe RightLeftPersonToggle non ha alcuna conoscenza di quel codice e rimane esattamente come il codice precedente.
2) RightLeftPersonToggle ottiene due metodi (uno per il salvataggio e uno per il caricamento) che prendono le funzioni come parametri per dirgli come fare il suo lavoro.
public void LoadAndFilterLists(Func<List<Person>> leftListFilter, Func<List<Person>> rightListFilter)
public void LoadSaveLists(Func<List<Person>> leftListSave, Func<List<Person>> rightListSave)
La soluzione numero uno mantiene il codice più semplice a mio parere, mentre la soluzione numero due sembra fornire una migliore seprazione delle preoccupazioni dal momento che RightLeftPersonToggle dovrebbe sapere come caricare e salvare se stesso.
Tenendo presente il fatto che RightLeftPersonToggle non carica sempre e salva i dati allo stesso modo, quale delle mie soluzioni proposte sarebbe considerata una best practice? Avete altri consigli per il miglioramento?