【问题标题】:When to "let it crash" and when to defend the code in Erlang?什么时候“让它崩溃”,什么时候保护 Erlang 中的代码?
【发布时间】:2016-08-08 18:00:28
【问题描述】:

因此,“让它崩溃”的口号是 Erlang 代码旨在抵御残酷的世界事件,例如意外拔掉插头、硬件故障和不稳定的网络连接。

另一方面,有defensive programming

作为 Erlang 的新手,我想知道,如何知道我希望进程何时崩溃以及何时希望它使用 ifcase..of 来保护流?

说,我有一个认证模块,如果认证成功与否,它可以返回true/false结果。如果由于登录/密码错误导致用户身份验证失败,它是否应该只是成功场景并崩溃?

如果在数据库中没有找到产品,或者搜索结果为空,那么其他情况呢?

我想,我不能完全忽略防御结构,因为任何守卫本质上都是为了保护应用程序的“正常”流程?

是否有经验法则何时防守和何时崩溃?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    正如 Fred Hebert 在 http://ferd.ca/the-zen-of-erlang.html 所说的那样 -

    如果我知道如何处理错误,很好,我可以这样做 具体错误。否则,就让它崩溃吧!

    我想说,身份验证错误、空搜索结果等都是预期错误,并且需要对用户做出适当的响应。

    【讨论】:

      【解决方案2】:

      我认为在这种情况下实际上没有经验法则

      正如我所见,只要您知道如何处理预期的错误 - 处理它。在身份验证的情况下,我真的不认为这是一个实际的错误,这是一种正常的行为,所以请继续编写几行代码来处理这种特定情况。
      相比之下,网络故障可能由于各种原因而发生,它们实际上并不是您的代码正常行为的一部分,因此在这种情况下,我会采用“让它崩溃”的理念。

      无论如何,当使用 让它崩溃 - 你当然仍然需要处理进程崩溃的情况(即使用链接和监视器并重新启动进程)。

      请检查this very good answer。你可以阅读更多关于它的信息herehere

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-10
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 2020-07-05
        相关资源
        最近更新 更多