因此,“让它崩溃”的口头禅Erlang代码意味着抵制残酷的世界事件,如意外拔插头,硬件故障和不稳定的网络连接。
另一方面,有defensive programming。
对Erlang不熟悉,我想知道,如何知道我希望这个过程什么时候崩溃,以及当我希望它用if
,case..of
来保护流程时,打字?
说,我有一个身份验证模块,如果成功验证成功,可以返回true
/ false
结果。如果由于登录/密码错误导致用户身份验证失败,它是否只有成功的场景和崩溃?
如果在数据库中找不到产品,或者搜索结果为空,其他方案如何呢?
我想,我不能完全忽视防御结构,因为任何守卫本质上都是为了捍卫应用程序的“正常”流程?
是否有经验,何时进行防守以及何时崩溃?
答案 0 :(得分:4)
弗雷德赫伯特在http://ferd.ca/the-zen-of-erlang.html -
说如果我知道如何处理错误,那很好,我可以做到这一点 具体错误。否则,就让它崩溃!
我会说认证错误,空搜索结果等是预期的错误以及需要对用户做出适当响应的错误。
答案 1 :(得分:2)
在这种情况下,我认为实际上并没有经验法则。
正如我所看到的,每当你知道如何处理预期的错误时 - 处理它。在身份验证的情况下,我并不认为这是一个实际的错误,这是一种正常的行为,所以请继续编写几行代码来处理这种特殊情况。
相比之下,网络故障可能由于各种原因而发生,它们实际上并不是代码正常行为的一部分,因此在这种情况下,我会选择“让它崩溃”的理念。
无论如何,当使用让它崩溃时 - 你当然仍然需要处理进程崩溃的情况(即使用链接和监视器并重新启动进程)。
请同时查看this very good answer。您可以阅读更多相关信息here和here。