0
루비에서 예외를 사용하는 것이 좋은가요? (object.nil의 경우 raise ArgumentError 사용)루비 예외 좋은 설명
여기서 ArgumentError를 삭제해야합니까? 또는 ProductNilError, QuantityMustBeMoreThanZeroError와 같은 사용자 정의 예외를 작성 하시겠습니까?
def create_order(product, options = { quantity: 1, guests: nil, confirmation_needed: false })
raise ArgumentError, 'product is nil' if product.nil?
guests = options.has_key?(:guests) ? options[:guests] : nil
quantity = options.has_key?(:quantity) ? options[:quantity] : nil
confirmation_needed = options.has_key?(:confirmation_needed) ? options[:confirmation_needed] : nil
raise ArgumentError, 'quantity must be > 0' if quantity.nil? || quantity < 0 || quantity == 0
raise ArgumentError, 'product of beneficiary_type need guests' if product.is_a_beneficiary_type? && guests.nil?
raise ArgumentError, 'guests do not respond_to each (not an array)' if !guests.nil? && !guests.respond_to?(:each)
raise ArgumentError, 'product of quantity_type do not need guests' if product.is_a_quantity_type? && !guests.nil?
begin
order = build_order(guests, product)
debit_stock(quantity)
pay(order, product, quantity)
confirm_order(order)
ensure
rollback(order, quantity)
end
end
이게 진짜 레일입니까? 그렇다면 왜 모델 유효성 검사를 사용하지 않습니까? –
사이드 메모가 있지만'guests = options.has_key? (: guests)? options [: guests] : nil'은 불필요합니다. 알 수없는 키의 해쉬 값은 이미 nil입니다.'guests = options [: guests]' –
내 의견으로 오류를 제기하는 대신 유효성 검사를 사용해야합니다. 죄송합니다. 리팩토링이 필요하다고 생각하기 때문에 답변을 드릴 수 없습니다. – vee