Sto cercando di guidare un'accusa per aver ridimensionato i nostri controller piuttosto gonfiati. Al momento disponiamo di un BaseModel da cui ereditano tutti gli altri modelli. Il BaseModel contiene elementi comuni a tutte le pagine, come il titolo della pagina, i file css necessari, l'utente corrente.
Ogni costruttore ha un metodo privato per costruire un particolare ViewModel (essenzialmente un metodo factory)
BaseModel.cs
Class BaseModel {
public string title {get; set;}
public List<String> cssFiles {get;set;}
// More Properties
}
HomeModel.cs
Class HomeModel : BaseModel {
public List<News> LatestNews {get;set;}
}
ExtendedHomeModel.cs
Class ExtendedHomeModel : HomeModel {
public List<RSSItem> Twitter {get;set;}
}
HomeController.cs
public ActionResult Index(int userid) {
return View(MakeExtendedHomeModel(userid));
}
private ExtendedHomeModel MakeExtendedHomeModel(int userid) {
var model = new ExtendedHomeModel();
InitialiseBaseModel(model, userid);
InitialiseExtendedBaseModel(model);
model.Twitter = DomainModel.Twitter.GetLatestItems();
}
private HomeModel MakeHomeModel() {
var model = new HomeModel();
InitialiseBaseModel(model);
InitialiseHomeModel(model);
}
private void InitialiseHomeModel(HomeModel model) {
model.LatestItems = DomainModel.GetLatestItems;
}
private void InitialiseBaseModel(BaseModel model, int userid) {
model.PageTitle = "Home"
model.UserId = userid
}
Quindi, la mia domanda è: qual è il modo migliore di inizializzare questo tipo di modelli base? Per quanto posso dire che cosa fa essenzialmente il costruttore è il metodo factory, e per lo meno dovrebbe essere spostato fuori dal costruttore.
Tuttavia, sono convinto che ci sia un modo più elegante per farlo. Il problema principale che vedo è che il codice dipende interamente dal fatto che chiami i metodi di inizializzazione nell'ordine corretto. Un'idea che ho avuto è di usare i costruttori, passando i parametri necessari lungo la catena, se necessario. Ci sono delle insidie a questo approccio che non ho visto? (Tenendo presente che ho iniziato ad usare mvc solo sei mesi fa). Ci sono dei modi migliori?
Grazie per la lettura