Si supponga che sto costruendo un'applicazione Web ASP.NET API ed ha la seguente struttura:lanciare o non generare l'eccezione dai metodi consumati dallo strato di ASP.NET Web API
Come puoi vedere dal diagramma, il nucleo dell'API Web ASP.NET parlerà con il livello di servizio del dominio (ad esempio la classe MembershipService
che ha metodi come GetUsers
, CreateUser
, ecc.) e le mie classi di servizio parleranno con uno o più repository per gestire il operazioni.
È ovvio che un'operazione di servizio (come il metodo MembershipService.CreateUser
) non riuscirebbe per diversi motivi (condizioni non soddisfatte, un'eccezione generata dal repository, ecc.) E questo è il posto in cui ho dei dubbi.
Pensi che le classi di servizio dovrebbero gestire le eccezioni e restituire una sorta di oggetto risultato come il sotto di un:
public class OperationResult {
public OperationResult(bool isSuccess) : this(isSuccess) {
IsSuccess = isSuccess;
}
public OperationResult(bool isSuccess, Exception exception) : this(isSuccess) {
Exception = exception;
}
public bool IsSuccess { get; private set; }
public Exception IsSuccess { get; private set; }
}
public class OperationResult<TEntity> : OperationResult {
public OperationResult(bool isSuccess)
: base(isSuccess) { }
public OperationResult(bool isSuccess, Exception exception)
: base(isSuccess, exception) { }
public TEntity Entity { get; set; }
}
O pensi che i metodi di servizio non dovrebbe astratto l'eccezione del genere e dovrebbe lanciare l'eccezione direttamente o indirettamente (creando un nuovo tipo di eccezione significativo specifico per l'operazione e ponendo l'eccezione generata come sua eccezione interna)?
Chi ha voluto chiudere questa domanda come non costruttivo? Per favore dimmi cosa usi per ottenere un alto valore perché funziona a mio piacimento. – tugberk