コントローラーのアクションから呼び出された独自のコードによって例外がスローされた場合、どのように処理する必要がありますか? try-catch ステートメントがまったくないベスト プラクティスの例がたくさんあります。たとえば、リポジトリからのデータへのアクセス:
public ViewResult Index()
{
IList<CustomModel> customModels = _customModelRepository.GetAll();
return View(customModels);
}
呼び出しがアクセスできないデータベースであり、たとえば Entity Framework のような ORM を使用している場合、このコードは明らかに例外をスローする可能性があります。
しかし、私が見ることができるのは、例外が発生し、ユーザーに厄介なエラー メッセージが表示されることだけです。
私は HandleError 属性を認識していますが、未処理の例外が発生した場合にエラー ページにリダイレクトするために主に使用されることを理解しています。
もちろん、このコードは try-catch でラップすることもできますが、特にロジックがさらにある場合はうまく分離できません。
public ViewResult Index()
{
if (ValidationCheck())
{
IList<CustomModel> customModels = new List<CustomModel>();
try
{
customModels = _customModelRepository.GetAll();
}
catch (SqlException ex)
{
// Handle exception
}
if (CustomModelsAreValid(customModels))
// Do something
else
// Do something else
}
return View();
}
以前に、エラーを処理し、ユーザーにメッセージを表示するためにメッセージを返す DataProvider クラスに、データベース呼び出しなどの例外をスローする可能性のあるすべてのコードを抽出しました。
これを処理する最良の方法は何ですか?一部の例外ではそうすべきではないため、常にエラーページに戻りたいとは限りません。代わりに、ユーザーへのエラー メッセージを通常のビューで表示する必要があります。以前の方法は正しかったですか、それともより良い解決策はありますか?