小编Phi*_*ell的帖子

多种方法中的Ruby救援异常

我已经构建了一个简单的银行应用程序,它能够执行常规操作; 存款,提款等

我的控制器方法执行这些操作并挽救帐户或其他实体引发的异常.

以下是控制器代码中使用的一些方法:

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 …
Run Code Online (Sandbox Code Playgroud)

ruby rescue

5
推荐指数
2
解决办法
2185
查看次数

Ruby Case语句的替代方案

我目前正在使用Ruby为银行管理系统编写程序.该系统的一个功能是它可以创建一个新帐户,帐户可以是六种类型之一.

我的控制器中有以下方法来满足此功能:

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
Run Code Online (Sandbox Code Playgroud)

这些账户中的每一个都从基础账户继承,最终将包含个人属性,例如利率,透支等.

虽然这是功能性的,并提供了所需的结果,但感觉有点冗长.但是我想不出任何明显的重构方法.

欢迎任何建议......

ruby switch-statement

3
推荐指数
1
解决办法
1277
查看次数

标签 统计

ruby ×2

rescue ×1

switch-statement ×1