gpt4 book ai didi

exception - 我的持久性类应该返回 Option 还是依赖异常?

转载 作者:行者123 更新时间:2023-12-02 23:16:30 25 4
gpt4 key购买 nike

我的应用程序的持久层由存储特征和实现类组成。我在这个问题上犹豫不决:fetchFoo(key: Key) 方法应该返回 Option[Foo],还是应该抛出 FooNotFound如果找不到 key 会出现异常吗?

为了增加这个问题的趣味性,持久层——它是用 Scala 编写的——由 Java 代码调用。在Java代码中处理scala.Option?嗯。

事实上,直到昨天,持久层都是用Java编写的;我刚刚用 Scala 重写了它。作为 Java 代码库,它依赖于异常而不是返回空值;但现在我遇到了 scala.Option,我正在重新考虑。在我看来,Scala 不像 Java 那样热衷于异常。

最佳答案

我对一般问题的看法是,这取决于 key 的来源。

如果它们是由某些用户或不受信任的系统输入的,那么我会使用Option,这样我就可以有意义地表示未知 key 的可能性并对其进行适当的处​​理。

另一方面,如果 key 来自已知系统(这包括嵌入在最初来自系统的链接中的 key 之类的内容),并且假定有效且存在,我会将其保留为运行时异常,由外层的 catch-all 处理。对于链接示例,如果有人出于某种原因手动更改 url 中的键,则应将其视为未定义行为,并且异常(exception)是适当的,IMO。

另一种思考方式是当这种情况出现时你将如何处理。如果您使用 Option 并且只是将 None 情况委托(delegate)给某些包罗万象的错误处理,那么异常可能更合适。如果您显式捕获 NotFound 异常并更改程序流程(例如,要求用户重新输入 key ),则使用 Option 或已检查异常(或 Either 在 Scala 中),以确保这种情况得到处理。

在与 Java 集成方面,一旦 Scala 运行时库在类路径上可用,Option 就可以很容易地从那里使用。或者,Functional Java 中有一个 Option 实现图书馆。无论如何,我会避免使用 null 来表示“未找到”。

关于exception - 我的持久性类应该返回 Option 还是依赖异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3886781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com