[DAY24] Boxenn Use Case 的 error handle

Boxenn 的 error handling

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 总回顾及范例程序码。


<<:  [D24] 物件侦测(5)

>>:  连续 30 天 玩玩看 ProtoPie - Day 24

【Day23】参数

参数 首先我们先看一个范例 function fn(para){ console.log(para,...

Day2 Android - 系统预设程序码

来记录一下自己学习的历程及遇到的问题,应该有人会觉得是废话啦~,那麽就开始今天的主题,在一开始建完p...

[2021铁人赛 Day12] General Skills 09

引言 昨天的题目学习到进位制以及「 ASCII code <-> 字元」转换, 关於 ...

Subtotal函数经典用法,以一敌十!

在Excel中subtotal函数既能求和,不但能求平均值,还能计数,求最值等。可以说是非常实用的一...

铁人赛 Day12 -- 一定要知道的 CSS (九) -- Position 定位 & opacity 透明度

今日目标: 做出一个在网页上常会出现的遮屏广告 先来介绍几个 Position 元素 static(...