【问题标题】:Where to throw an exception in layered architecture?在分层架构中哪里抛出异常?
【发布时间】:2011-03-15 06:34:09
【问题描述】:
我有一个应用程序通过使用 WCF 开发的服务层提供其业务层。
我在想的是:这个服务层提供了创建、更新等操作方法。然后这些操作将这些调用重新路由到业务层。问题是:假设其中一个调用不接受空输入值(例如:创建空对象),执行检查的最佳位置在哪里?我个人的答案是在两个地方(服务和业务),因为我可以保证在不使用服务层的情况下重用业务层,反之亦然。
我说的对吗?
谢谢
马可
【问题讨论】:
标签:
wcf
architecture
exception
business-logic
service-layer
【解决方案1】:
如果你不处理 DAL 或 BLL 中的错误,那么它会冒泡直到你发现它。
异常不会被“覆盖”。
如果您在 DAL 中处理它,那么您将不再有异常。
如果您没有完全处理它,那么由于 DAL 中处理不当的错误,BLL 仍然可能引发另一个异常。
一般规则是这样的:
处理特定的错误,不要使用通用的包罗万象。允许任何意外的异常在堆栈中进一步冒泡。
尝试在您的项目上运行 FxCop,看看您在哪里违反了最佳做法。
http://www.gotdotnet.com/team/fxcop
【解决方案2】:
您的图书馆代码或代码
由您的更高层使用
应用程序必须始终只抛出
例外,从不担心如何
对付他们。
这很重要,因为您可以在许多地方出于不同目的使用此库。
在您的应用程序表示层中,如果您正在使用库代码并且您知道可能的异常,那么请使用 try/catch 捕获它们。