데이터 액세스 계층 (또는 다른 계층)에서보기로 오류 메시지를 표시하는 것이 가장 좋은 방법인지 또는 최상/우아한 방법인지 알고 싶습니다.데이터 액세스 계층에서보기로 오류 메시지를 표시 할 수있는 권장 사항이 있습니까?
나는 ASP.NET MVC 5를 사용하고, 내 프로젝트는 다음과 같은 여러 층이 있습니다
- MyApp.Web
- MyApp.Business
- MyApp.Repository
- MyApp.DAL을 :
나는 내가 IHM에 제기하고 싶습니다 "오류 메시지"의 두 가지 유형이
예외에 의해 생성 된 오류 : 예외가 기록되고 사용자에게 친숙한 오류 메시지가 표시됩니다.
비즈니스 오류 : 예를 들어, 작업은 고객이 최소 3 송장을 가지고 필요로하고 그는 단지 다른 프로젝트 2.
을 가지고, 여기에 내가 무슨 짓을 :
컨트롤러
[HttpPost]
public ActionResult Edit()
{
//...
ErrorModel errorModel = new ErrorModel();
BusinessLayer businessLayer = new businessLayer()
businessLayer.Edit(/* some parameters */, out errorModel)
TempData[Error] = errorModel
}
보기
모든 레이어에서@{
var errorModel = TempData[Error]
}
/* if error model is not null, display the error correctly */
는, 내 모든 방법, 또는 때문에 사업 실패의 try/catch
블록에 채워지는 out ErrorModel
변수가 나는 확실히 그것을 좋아하지 않는다.
Google 또는 스택 오버플로에 대한 많은 답변을 찾았지만 모두 오류를 잡는 방법에 중점을 둡니다.
* 내 질문에 대한 답변 : 우아한 방식으로보기에서 발생하는 계층에서 오류를 일으키는 방법을 알아 냈습니다.
재미있을 것 같습니다. 그래서 당신에 따르면, 나는 "내"모든 레이어에서 예외를 잡으려고 시도하고 "내"컨트롤러에서 "메인"try catch로 처리해야합니다. – user2687153
최상위 레이어 (프리젠 테이션)에서만 시도/캐치 오류를 처리합니다.다른 레이어에서는 필요한 경우 예외를 throw 할 수 있습니다. –
그리고 일부 예외를 최상위 레이어에 표시하고 싶지 않으면 하위 레이어에서 예외를 잡으려고 시도 할 수 있습니다. 예를 들어 DAL 내부에서 SqlConnectionException을 웹 레이어로 전달하지 않으려면 Business 레이어에서이 예외를 catch하고 CriticalAppException과 같은 것을 던져보십시오. –