Ist dies eine gute Praxis der Verwendung von Ausnahmen in Ruby? (Verwendung von raise ArgumentError falls object.nil?)Ruby Ausnahme gute Praxis
Soll ich hier den ArgumentError löschen? Oder benutzerdefinierte Ausnahme schreiben wie 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
Ist das wirklich Schienen? Wenn ja, warum nicht Modellvalidierungen verwenden? –
nur eine Randnotiz, aber 'guests = options.has_key? (: Gäste)? Optionen [: Gäste]: Null ist unnötig. Ein Hash-Wert bei einem unbekannten Schlüssel ist bereits Null, Sie können einfach sagen: Gäste = Optionen [: Gäste] ' –
Validierungen sollten meiner Meinung nach verwendet werden, anstatt Fehler zu erhöhen. Entschuldige, ich habe keine Antwort für dich, weil ich glaube, dass es etwas Refactoring braucht. – vee