Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns “在什么情况下应该有人”;试着……抓住”吗;?这适用于图书馆吗?_Design Patterns_Templates_Exception_Exception Handling - Fatal编程技术网

Design patterns “在什么情况下应该有人”;试着……抓住”吗;?这适用于图书馆吗?

Design patterns “在什么情况下应该有人”;试着……抓住”吗;?这适用于图书馆吗?,design-patterns,templates,exception,exception-handling,Design Patterns,Templates,Exception,Exception Handling,假设您正在设计一个应用程序(WebApp、桌面、任何东西),并且需要为代码定义异常处理。既然您希望使事物可重用,那么在处理异常时应该遵循什么逻辑?有什么模式可以遵循吗 例如,如果某个DLL将使用网络,而网络不可靠,则最好覆盖该函数的异常处理程序以重试请求 开发人员如何处理开发的所有公共方面的异常?是否有任何模式或模板可以遵循 在处理诸如网络、文件、IO、Active Directory和Web之类的问题时,我确信在如何处理当今最常见和最有问题的问题方面有一套预设的最佳实践。他们在哪里 一般规则是

假设您正在设计一个应用程序(WebApp、桌面、任何东西),并且需要为代码定义异常处理。既然您希望使事物可重用,那么在处理异常时应该遵循什么逻辑?有什么模式可以遵循吗

例如,如果某个DLL将使用网络,而网络不可靠,则最好覆盖该函数的异常处理程序以重试请求

开发人员如何处理开发的所有公共方面的异常?是否有任何模式或模板可以遵循


在处理诸如网络、文件、IO、Active Directory和Web之类的问题时,我确信在如何处理当今最常见和最有问题的问题方面有一套预设的最佳实践。他们在哪里

一般规则是捕获一般异常并生成特定于域的异常。还有一个API的调试模式,这样您就可以记录每个异常,并且可以在将来的版本中调试它

当然,这需要良好的调试,因为您不希望生成不相关的异常

就我的两分钱:)。

一般来说:

  • 针对异常情况引发异常

  • 处理异常(如果这样做有意义)。如果无法处理该异常,请允许它向上迁移调用堆栈


  • NET等框架的文档通常描述特定方法调用可能引发的异常。

    您回答了自己的问题。在任何可能发生超出应用程序控制/范围的错误的地方,明智的做法是将错误处理放在周围。您永远不会有太多的错误处理。只需确保您不是通过异常编码。

    抛出异常自然只能在异常情况下进行

    对于处理,我想说,当您想要捕获异常时,有两种情况:

    当需要进行翻译时

    • 输入错误代码
    • 另一个例外
    • 用户可以理解的东西
    在模块边界处

    • 例如,从COM调用返回(进入非异常感知框架)
    • 从线程返回(否则没有人可以捕获)
    • 从回调函数返回(因为回调机制不太可能知道或关心您的异常)
    如果你发现自己在做一种“尝试-捕获-清理-再捕获”之类的事情,用RAII代替,完全摆脱“尝试-捕获”。编写代码,以便在出现异常时,能够以正常的方式进行操作。查阅亚伯拉罕保证书,了解其中的细节


    下面是对MakerOfThings7的回答,因为它太长,无法发表评论

    我所说的“用户可以理解的东西”,是指例如弹出的错误消息

    想象一下,如果您愿意,用户单击应用程序UI上的一个按钮去检索一些数据。您的按钮点击处理程序将分派到某个数据存储界面。这个接口可以从内存流、文件和数据库中获取数据。谁知道呢?反过来,它们可能会失败,生成MemoryStreamException、FileException或DatabaseException。这些可能被抛出15个堆栈帧,并且被编写良好的异常安全代码正确地忽略,而不需要翻译它们

    按钮点击处理程序对这些一无所知,因为数据存储接口可以使用越来越多的数据存储方法。因此,数据存储接口捕获这些异常,并将其转换为通用DataStorageException。这是抛出的


    然后,调用数据存储接口的按钮单击处理程序捕获此异常,并具有足够的信息,能够向用户显示某种故障消息,将异常转换为一些格式良好的文本并显示出来。

    异常在调试时很有帮助。如果可能的话,应该避免它们,因为您应该知道您的控制流

    异常编码意味着什么?+1,因为这似乎是明确的、定义的和有意义的。仍在寻找基于此的异常示例。e、 我认为你应该写一本书,或者写一篇关于你的观点的文章。。。还有代码示例(c#,java…?)。谢谢定义例外conditions@qntmfred:无法自动恢复的条件,例如:内存不足、被零除、参数不正确等。