В настоящее время я пишу программу для банковской системы администрирования с использованием Ruby. Одна из возможностей этой системы заключается в том, что она может создать новую учетную запись, учетные записи могут быть одного из шести типов.Альтернатива Ruby Case statement
У меня есть следующий метод, в моем контроллере для удовлетворения этой функции:
def create_account(type, holder)
case type
when :current then CurrentAccount.new(holder, @account_number)
when :savings then SavingsAccount.new(holder, @account_number)
when :business then BusinessAccount.new(holder, @account_number)
when :ir then IRAccount.new(holder, @account_number)
when :smb then SMBAccount.new(holder, @account_number)
when :student then StudentAccount.new(holder, @account_number)
end
end
Каждые из этих счетов наследует от базовой учетной записи и, в конечном счете содержать отдельные атрибуты, например, Процентная ставка, овердрафт и т. Д.
Хотя это функционально и обеспечивает требуемые результаты, он чувствует себя немного длинным. Однако я не могу думать о каких-либо очевидных способах рефакторинга.
Любые предложения приветствуются ...
Я бы разорвать этот на две линии (один для хранения имени класса в переменной, рядом с его экземпляр) и добавьте ошибку но я предпочитаю это к принятому ответу. – aceofbassgreg