我正在使用 DDD 模式开发类似企业的项目。我的 C# 解决方案中有以下项目:
领域模型 - DLL 项目
WebUI - ASP.NET MVC3 项目
DesktopUI - WPF 项目
DAL - 实体框架代码优先
持久性 - SQL Server 数据库
这个项目并不大,但我正在尝试使用企业应用程序的所有良好实践。
我现在想定义的是异常策略,但我不确定如何处理。我可能应该使用企业库异常处理和日志记录块,但我不确定如何将其融入图片中。我试图在脑海中解决的一些具体场景如下:
如果用户在 WPF 应用程序中创建了新实体,并且单击了“保存”按钮,应如何报告和记录错误以防不同级别发生异常(例如,实体未根据域规则正确创建,或者存在尝试将新对象持久保存到数据库时出错)
用户尝试从数据库中检索未知实体(例如,通过在 URL 中指定未知实体 ID 从 WebUI)
我知道我可以定义自定义异常,但我不太确定在哪里以及如何。是否应该为每一层定义它们?我知道有包装异常的做法,但又不太确定如何最好地使用该模式。
我还应该为某个层中的每个错误创建一个自定义异常(例如,UserAlreadyExistInDatabaseException 用于尝试使用相同的电子邮件保存两个用户,以及 UnknownUserDatabaseException 如果尝试从 DB 获取未知用户),还是应该使用一种异常类型来处理多个层错误(例如 DatabaseException,然后用自定义属性或 Exception.Message 属性区分错误)。