我已经建立了一个简单的银行应用程序,它能够执行通常的操作;存款、取款等
我的控制器方法执行这些操作,并拯救由帐户或其他实体引发的异常。
下面是控制器代码中使用的一些方法:
def open(type, with:)
account = create type, (holders.find with)
add account
init_yearly_interest_for account
boundary.render AccountSuccessMessage.new(account)
rescue ItemExistError => message
boundary.render message
end
def deposit(amount, into:)
account = find into
account.deposit amount
boundary.render DepositSuccessMessage.new(amount)
rescue ItemExistError => message
boundary.render message
end
def withdraw(amount, from:)
account = find from
init_limit_reset_for account unless account.breached?
account.withdraw amount
boundary.render WithdrawSuccessMessage.new(amount)
rescue ItemExistError, OverLimit, InsufficientFunds => message
boundary.render message
end
def get_balance_of(id)
account = find id
boundary.render BalanceMessage.new(account)
rescue ItemExistError => message
boundary.render message
end
def transfer(amount, from:, to:)
donar = find from
recipitent = find to
init_limit_reset_for donar unless donar.breached?
donar.withdraw amount
recipitent.deposit amount
boundary.render TransferSuccessMessage.new(amount)
rescue ItemExistError, OverLimit, InsufficientFunds => message
boundary.render message
end
def add_holder(id, to:)
holder = holders.find id
account = find to
account.add_holder holder
boundary.render AddHolderSuccessMessage.new(holder, account)
rescue ItemExistError, HolderOnAccount => message
boundary.render message
end
def get_transactions_of(id)
transactions = (find id).transactions
boundary.render TransactionsMessage.new(transactions)
rescue ItemExistError => message
boundary.render message
end
def get_accounts_of(id)
holder = holders.find id
accounts = store.select { |_, a| a.holder? holder }.values
boundary.render DisplayAccountsMessage.new(accounts)
rescue ItemExistError => message
boundary.render message
end
字符串
正如你所看到的,我在多个方法中拯救了多个错误,通常处理相同的错误。
虽然这是工作,我想知道是否有可能重构和处理这些异常时,任何控制器中的方法被调用。
例如:
during:
open, deposit, withdraw
rescue ItemExistError => message
boundary.render message
型
如有任何帮助,我们将不胜感激。
4条答案
按热度按时间lzfw57am1#
通过元编程,您可以定义一个方法来 Package 您希望从中拯救的每个方法。这是不是真正更干净的代码由您决定。
字符串
如果你不打算重用这个方法(即如果你只想为这一组方法和这一个异常类提供一个统一的处理程序),我会删除
rescue_from
定义,并将元编程代码放在该类中。zsbz8rwp2#
你可以试着写一个这样的方法:
字符串
然后使用它:第一个月
alen0pnh3#
Rails的ActiveSupport gem提供了
rescue_from
helper:https://edgeapi.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html#method-i-rescue_from
字符串
l7mqbcuq4#
前后风格回调会有帮助吗?
存储回调动作列表的变量
字符串
定义before_action方法action是要执行的回调,methods是一个action数组,这些action都有回调分配给它们
型
在我们的方法中使用的块,允许我们使用这些回调
型
声明我们希望发生的before和after操作(可能会将#first_do_this和#lastly_do_this等回调函数作为私有方法?)
型
我们想要解决的方法。(我知道它不是那么优雅,它可以改进)
型
调用do_something时
型