在DDD设计的ASP.NET MVC2 Web应用程序中,有关错误处理的“最佳实践”是什么?例如,让我们采用Web应用程序最常见的方面,即登录:
> UserController:显然是坐标
一些域对象最终
登录或拒绝用户,以及
重定向到网络的其他部分
根据需要界面.在我的情况下,它是
一些调用不同的UserTasks
像IsLoggedIn()或LogIn()这样的方法,
加上一些RedirectToAction.
> UserTasks:有工作的肉
协调相关领域
对象服务,比如
SecurityService和较低域
对象,例如调用
SecurityService.ValidateUser()或
检查User.IsUserInactive().
> SecurityService:显然
坐标
认证/授权
服务.类似于
MembershipProvider,没有
超重行李.
> User:表示用户.不
贫血,因为它有各种各样的
用户特定的方法,如
IsuUserInactive()检查
IsDeleted,IsLockedOut或者如果是用户
介于FromDt和ThruDt之间.
你如何冒泡错误,使他们提供信息,而不是对用户充满敌意?您是否使用异常丢弃代码然后只在Application_Error()中处理它们?例如,当密码为空时,ValidateUser()抛出一个ArgumentNullException(),当密码不正确时,抛出一个AuthenticationException(),或者返回一个bool = false?如果是后者,您如何告知用户导致验证失败的原因?
解决方法
我假设您正在使用基于我看到的命名约定的WhoCanHelpMe / S#arp架构?如果是这样,我强烈建议您查看
this article,其中介绍了更清洁的应用程序服务层的实现.看一下从服务层返回的ActionConfirmation结果;我们发现这是从Tasks层返回一个不太讨厌的错误结果的理想方法.