Use Case 的职责是把业务逻辑封装,一个 Use Case 大致可以对应到一个 User Story。一开始我们对 Use Case 要怎麽设计并没有太多想法,便开始整理以前的 User Story,发现大部分都可以归纳成
取得资料 → 业务逻辑 → 储存资料
而单元测试内则是,"取得资料"对应到"建立测资",业务逻辑则是测试的重点,"储存资料"则应该被mock 或 stub 掉,因此第一版的 Use Case 设计的两个对外的 method,一个是 create
, 放业务逻辑,如果业务逻辑过长则可以用 private method 封装,另一个则是 save
,放储存资料的程序或 call 第三方服务,而在测试中只测 create
。
这边简单用建立订单举一个例子
这时候 Boxenn DAL 的介面还没设计出来
# Use Case 大概长这样子
class CreateOrder
def initialize(params:)
@params = params
end
def create
# 其他逻辑 (如验证、处理参数等等)
@order = Order.new(params)
end
def save
@order.save!
end
end
use_case = CreateOrder.new(params: params)
use_case.create
use_case.save
这样做其实有不少缺点:
这时候我们发现了 dry-monads ,他的核心理念是 functional programing 当中的 monad。
关於 monad 的解释可以看以下资料
那这样做的好处是:
到此,我们的 Use Case 介面便有了雏形。
下一篇将会介绍 Boxenn::UseCase
的实作细节,以及如何使用。
<<: 卡夫卡的藏书阁【Book19】- Kafka - KafkaJS 消费者 1
哈罗大家好~ 关於 SharePoint 的应用,到昨天告一段落,回顾一下你可能会觉得,文件库、清单...
React 其中一种常见的使用情况是在一个 component 中回传多个 element,fra...
这次来介绍两个方式在专案里设置使用React吧! 本系列文章使用的环境系统为 电脑系统:macOS ...
今天大概会聊到的范围 Theme 透过 Android Studio 内建的精灵建立一个新的 Co...
今天我们会用部落格跟使用者的关系来讲解关联,首先先做设定,部落格跟使用者的关系为 使用者对应多个部落...