Supponiamo di avere una query - come in CQS che dovrebbe restituire un singolo valore .
Supponiamo che il caso in cui non venga trovato alcun valore non è eccezionale, quindi in questo caso non verrà generata alcuna eccezione. Invece, viene restituito null
.
Tuttavia, se non è stato trovato alcun valore, devo agire in base al motivo perché non è stato trovato alcun valore.
Supponendo che la Query ne conosca il motivo, come potrei comunicarlo al chiamante della Query?
Una soluzione semplice non sarebbe restituire direttamente il valore ma un oggetto contenitore che contiene il valore e il motivo:
public class QueryResult
{
public TValue Value { get; private set; }
public TReason ReasonForNoValue { get; private set; }
}
Ma questo sembra goffo, perché se viene trovato un valore, ReasonForNoValue
non ha senso e se non è stato trovato alcun valore, Value
non ha senso.
Quali altre opzioni devo comunicare il motivo? Cosa ne pensi di un evento per ragione?
Per riferimento: questo sarà implementato in C #.