何时“让它崩溃”以及何时在Erlang中保护代码?

时间:2016-08-08 18:00:29

标签: erlang

因此,“让它崩溃”的口头禅Erlang代码意味着抵制残酷的世界事件,如意外拔插头,硬件故障和不稳定的网络连接。

另一方面,有defensive programming

对Erlang不熟悉,我想知道,如何知道我希望这个过程什么时候崩溃,以及当我希望它用ifcase..of来保护流程时,打字?

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

如果在数据库中找不到产品,或者搜索结果为空,其他方案如何呢?

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

是否有经验,何时进行防守以及何时崩溃?

2 个答案:

答案 0 :(得分:4)

弗雷德赫伯特在http://ferd.ca/the-zen-of-erlang.html -

  

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

我会说认证错误,空搜索结果等是预期的错误以及需要对用户做出适当响应的错误。

答案 1 :(得分:2)

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

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

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

请同时查看this very good answer。您可以阅读更多相关信息herehere