加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

未来[Scala中的[AppError,Option [User]]]

发布时间:2020-12-16 19:20:40 所属栏目:安全 来源:网络整理
导读:如标题中所述,使用此类数据结构是否有意义?让我逐一解释: Future – 表示异步计算 要么 – 传达已知错误 选项 – 表示可能不存在该值 看着这个我有点害怕.使用这种类型的组合是一个好习惯吗? 解决方法 我们来看一下解决方案空间: Success(Right(Some(use
如标题中所述,使用此类数据结构是否有意义?让我逐一解释:

> Future – 表示异步计算
>要么 – 传达已知错误
>选项 – 表示可能不存在该值

看着这个我有点害怕.使用这种类型的组合是一个好习惯吗?

解决方法

我们来看一下解决方案空间:

Success(Right(Some(user))) => Everythig OK,got an user
Success(Right(None)) => Everything OK,no user
Success(Left(AppError)) => Something went wrong at app level
Failure(Exception) => Something went wrong

这看起来非常富有表现力,但是当你尝试用其他调用组合这样的嵌套结构时,事情变得很难看(参见Converting blocking code to using scala futures),作为composingFuture的一个例子[Option [T]])

所以在the principle of the least power之后,
我们问自己:是否存在保留语义的不太复杂的替代方案?
有人可能会说,如果我们充分利用异常(和异常层次结构)的全部潜力,Future [User]就足够了.

让我们检查:

Everythig OK,got an user => Success(user)
Everything OK,no user => Failure(UserNotFoundException)  (Application level exception)
Something went wrong at app level => Failure(AppException) (Application level exception)
Something went wrong => Failure(Exception) (System-level exception)

这种方法的唯一限制是API的用户需要知道异常,这在界面中没有自我记录.最重要的是拥有基于Futures的API将允许表达的monadic组合与其他基于Future的API.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读