Boxenn 的实作可以在这边复习。
Use Case 中的 error 可以分为两种,可预期的错误和不可预期的错误。
预期的错误只要在 method 中回传 Failure
物件即可:
def send_marketing_email(email)
return Failure('已传送过此讯息') if email.sent_at.present?
email.sent
Success()
end
这样一来只要符合错误逻辑,就不会往下继续执行,并回传指定的物件。
这边回传可以给任何物件,不过我们通常会直接回传
string
,让 controller 可以直接告知使用者错误讯息。
另一种则是非预期的错误,这类型的错误会被 Boxenn::UseCase
rescue,然後包在 Array
里:
# Boxenn::UseCase
rescue StandardError => e
Failure.new([e], trace: e.backtrace.first)
end
而不管是哪种类型的错误都需要在 call use case 的地方额外处理,否则程序会继续往下跑。
额外处理的方式可能是打通知到 slack、打资料到错误管理平台 rollbar 等等:
result = use_case.new.call
if result.failure?
Slack.notify('错误')
Rollbar.error('错误')
end
通常同一个 use case 处理错误的方式需要一致,但上述的写法会把处理过程写在 use case 外,导致只要有呼叫 use case 的地方就会再写相同的程序码。这是我们实际使用後想再加以改良之处。
下篇是 Boxenn 总回顾及范例程序码。
>>: 连续 30 天 玩玩看 ProtoPie - Day 24
参数 首先我们先看一个范例 function fn(para){ console.log(para,...
来记录一下自己学习的历程及遇到的问题,应该有人会觉得是废话啦~,那麽就开始今天的主题,在一开始建完p...
引言 昨天的题目学习到进位制以及「 ASCII code <-> 字元」转换, 关於 ...
在Excel中subtotal函数既能求和,不但能求平均值,还能计数,求最值等。可以说是非常实用的一...
今日目标: 做出一个在网页上常会出现的遮屏广告 先来介绍几个 Position 元素 static(...