それで、私がおいしいつや消しケーキを作るための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にはいくつかの優れた例外フォーマットがあり、期待値と実際の受信値を比較できます。
短所:
- RSpec :: Expectations::ExpectationNotMetErrorは少し冗長すぎる可能性があります。
だから、このアプローチ:良いアイデア、または悪いアイデア?どのような設計原則に違反していますか?