Sto cercando di implementare questo Command Pattern nell'applicazione .NET MVC 3, in particolare per il salvataggio delle modifiche su una cosa. Sono indeciso su come procedere. Prima di arrivare alla domanda reale, ecco il codice semplificato:Modello di comando in .NET MVC 3 (rimozione della posta indesiderata dal controller)
public class ThingController
{
private readonly ICommandHandler<EditThingCommand> handler;
public ThingController(ICommandHandler<EditThingCommand> handler)
{
this.handler = handler;
}
public ActionMethod EditThing(int id)
{
...build EditThingViewModel and return with View...
}
[HttpPost]
public ActionMethod EditThing(int id, EditThingViewModel vm)
{
var command = new EditThingCommand
{
...not sure yet...
};
this.handler.Handle(command);
...redirect somewhere...
}
}
mio EditThingViewModel è del tutto scollegato dal mio dominio, che si compone di classi POCO. Sembra che la mia EditThingCommand dovrebbe assomigliare a questa:
public class EditThingCommand
{
Thing ModifiedThing;
}
Tuttavia, la costruzione ModifiedThing sarebbe quindi ancora accadendo nel mio controller. Questa è la maggior parte del lavoro in questo caso. Al momento della costruzione di ModifiedThing (e del timestamp "vecchio" ad esso applicato per il controllo ottimistico della concorrenza), tutto ciò che rimane è che il comando chiami Update nel mio contesto di dati.
Chiaramente c'è un valore nel poterlo decorare facilmente con altri comandi, ma Vorrei anche essere in grado di spostare la costruzione di ModifiedThing al di fuori del mio controller. (Forse questa domanda riguarda proprio questo.) EditThingCommand è nel mio dominio e non ha riferimenti a EditThingViewModel, quindi non può andare lì. Ha senso avere un altro comando nel mio livello di presentazione per mappare il mio viewmodel alla mia piccola entità?
Suggerirei di guardare oltre l'articolo di Paul Stovell Pulire i controller MVC ASP.NET trovati su http://www.paulstovell.com/clean-aspnet-mvc-controllers –
Grazie per il suggerimento! –