处理DDD风格的ASP.Net MVC2 Web应用程序中的错误

alp*_*ogg 5 error-handling domain-driven-design asp.net-mvc-2

在DDD设计的ASP.NET MVC2 Web应用程序中,有关错误处理的"最佳实践"是什么?例如,让我们采用Web应用程序最常见的方面,即登录:

  • UserController:显然协调一些域对象最终登录或拒绝用户,并根据需要重定向到Web界面的其他部分.在我的例子中,它是对IsLoggedIn()或LogIn()等不同UserTasks方法的一些调用,以及一些RedirectToAction.
  • UserTasks:协调相关域对象服务的工作,如SecurityService和较低域对象,如调用SecurityService.ValidateUser()或检查User.IsUserInactive().
  • SecurityService:显然协调身份验证/授权服务.类似于MembershipProvider,没有超重行李.
  • 用户:表示用户.没有贫血,因为它有各种特定于用户的方法,如IsuUserInactive(),它检查IsDeleted,IsLockedOut或用户是否在FromDt和ThruDt之间.

你如何冒泡错误,使他们提供信息,而不是对用户充满敌意?您是否使用异常丢弃代码然后只在Application_Error()中处理它们?例如,当密码为空时,ValidateUser()抛出一个ArgumentNullException(),当密码不正确时,抛出一个AuthenticationException(),或者返回一个bool = false?如果是后者,您如何告知用户导致验证失败的原因?

Dan*_*anP 0

我假设您正在使用基于我看到的命名约定的 WhoCanHelpMe / S#arp 架构?如果是这样,我强烈建议您查看这篇文章,它演示了更清晰的应用程序服务层的实现。看一下ActionConfirmation服务层返回的结果;我们发现这是从任务层返回不太令人讨厌的错误结果的理想方法。