所以,假设我正在编写一个 API 来制作美味的糖霜蛋糕。这一切都很好并且记录在案,但偶尔会出现错误,或者用户可能正在通过 IRB 探索库,并且在他们进行原型设计时使用了一个变量。
这就是我通常向调用者指示参数不能为 nil / 具有其他约束的方式:
# Cake.rb
def make_cake(cake_type, *arguments)
raise "cake_type required!" unless !cake_type.nil?
raise "cake_type must be in KNOWN_CAKES" unless KNOWN_CAKES.include?(cake_type)
# blah blah blah
end
但是,我最近考虑过这样的事情,使用rspec-expectations
gem:
# Cake.rb
include RSpec::Matchers
def make_cake(cake_type, *arguments)
cake_type.should_not be_nil, "cake_type required"
KNOWN_CAKES.should include(cake_type), "cake_type not found"
end
优点:
- 简洁的 DSL 让针对 API 进行开发的人非常容易阅读。
- RSpec::Expectations::ExpectationNotMetError 有一些很好的异常格式,为您提供预期值与实际接收值。
缺点(s?):
- RSpec::Expectations::ExpectationNotMetError 可能有点过于冗长。
所以,这种方法:好主意,还是坏主意?它违反了哪些设计原则?