|
|
1
15
我听上去很合适。异常是可取的,因为它们可以从服务层内的任何地方被抛出到服务层的顶部,不管它在服务方法实现中嵌套得有多深。这样可以保持服务代码的整洁,因为您知道,呼叫演示者总是会收到问题通知。 不捕获异常 然而, don't catch Exception 在演示者中,我知道它很诱人,因为它使代码更短,但是您需要捕获特定的异常,以避免捕获系统级的异常。 规划一个简单的异常层次结构 如果您打算以这种方式使用异常,您应该为自己的异常类设计一个异常层次结构。 至少创建一个ServiceLayerException类,并在出现问题时在服务方法中抛出其中一个类。然后,如果您需要抛出一个应该/可以由演示者以不同方式处理的异常,那么您可以抛出ServiceLayerException的特定子类:例如,AccountAlreadyExistsException。 然后,演示者可以选择
在自己的异常类中使用继承意味着不需要在演示者中捕获多文件异常(如果有必要的话可以这样做),并且最终不会意外地捕获无法处理的异常。如果演示者已经位于调用堆栈的顶部,请添加catch(exception)块以使用其他视图处理系统错误。 我总是尝试将我的服务层看作一个独立的可分发库,并将其作为一个特定的异常抛出,这是有意义的。然后由演示者/控制器/远程服务实现决定是否需要担心特定的细节,或者只是将问题视为一般性错误。 |
|
|
2
3
正如Cheekysoft所建议的,我倾向于将所有主要异常转移到异常处理程序中,并让这些异常冒泡。exceptionhandler将为异常类型提供适当的视图。 但是,任何验证异常都应该在视图中处理,但通常这种逻辑对于应用程序的许多部分都是通用的。所以我喜欢有这样的助手
那么,打电话给您的服务时,只需执行以下操作
那么在错误中是空的,你可以走了。 您可以进一步理解这一点,并使用处理 罕见的 例外情况。 |
|
|
3
1
回答后续问题: 至于创建异常变得乏味,你有点习惯了。使用一个好的代码生成器或模板可以在5或10秒内创建异常类,并且只需最少的手工编辑。 然而,在许多现实世界的应用程序中,错误处理可以占到工作的70%,所以它实际上只是游戏的一部分。 正如TGMDBM建议的那样,在MVC/MVP应用程序中,我让所有不可处理的异常冒泡到顶部,并被委托给异常处理程序的调度程序捕获。我将其设置为使用一个异常解析器来查找配置文件以选择一个合适的视图来显示用户。Java的Spring MVC库做得很好。这里有一个Spring MVC的异常解决程序的配置文件的片段,它是针对Java/Spring的,但是你会明白的。 这就需要对演示者/控制器进行大量的异常处理。
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |