Ho un sito Web MVC ASP.NET che funziona in questo modo:
(Nel controller)
var user = _applicationService.GetUserById(1);
user.ChangeEmail("[email protected]");
user.ChangeAddress("my new street", "21");
(In un HttpModule)
void EndRequest(){
if (HttpContext.Error is null){
_sessionFactory.GetCurrentSession.Transaction.Commit();
}
In questo modo è possibile perché la factory di sessione è costruita nell'avvio dell'applicazione del sito web. È possibile chiamare più metodi di dominio e richiamare il commit una volta alla fine della richiesta.
Ma in un'applicazione distribuita, non è possibile utilizzare direttamente oggetti di dominio, invece un servizio WCF deve ricevere un DTO.
Ora la mia domanda è: come si progettano i metodi ChangeEmail
e ChangeAddress
per uno scenario distribuito? Ognuno deve essere un'operazione distinta nel servizio Web? Se è così, allora quando un utente cambia la sua email E il suo indirizzo deve essere necessario per chiamare due volte al servizio.
O invece devo modellare un servizio web come questo:
var userDTO = _wcfService.GetUserDTOById(1);
userDTO.Email = "[email protected]";
userDTO.Street = "My new street";
userDTO.StreetNumber = "21";
_wcfService.PersistChanges(userDTO);