в моем приложении MVC у меня есть простой сценарий: контроллер, который вызывает бизнес-уровень, роль которого состоит в том, чтобы просто вызывать API.Код бизнес-службы следующий:
public class ApiCaller : IApiCaller
{
public async Task<T> GetResponse<T>(Uri url)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try
{
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(responseBody);
}
catch
{
..do something..
}
}
}
}
Для концепции единой ответственности я хочу, чтобы слой просто вызывал API и перехватывал исключения, если что-то идет не так.Поскольку он не несет ответственности за решение, что возвращать (в вышеприведенном контроллере) в случае возникновения исключения, а только при его перехвате, я хочу передать исключение контроллеру.В конце концов, контроллер, увидев, что возвращенный результат дал исключение, вернет что-то, или, если служба не найдена, вернет 404 или около того ... но он будет нести ответственность за решение, что возвращать, а не за бизнес-службу.Итак, мой вопрос: какова лучшая практика, чтобы выдумать исключение из этого случая?Спасибо!