在没有Rails的情况下将单个文件转换为MVC

时间:2015-08-05 15:23:44

标签: ruby model-view-controller

我需要获取下面的单个文件代码并将其分成模型,视图,控制器(MVC)ruby程序,该程序可以在命令行中由ruby命令运行,而不使用Rails(有关如何使用的说明)要从irb运行此程序,请查看我的RubyBank Github Repo上的README.md。

require_relative 'view'

class BankAccount
  attr_accessor :name, :balance
  def initialize(name, balance=0)
    @name = name
    @balance = balance
  end
  def show_balance(pin_access)
    if pin_access == pin || pin_access == bank_manager 
      puts "\nYour current balance is: $#{@balance}"
    else
      puts pin_error_message
    end
  end
  def withdraw(pin_access, amount)
    if pin_access == pin 
      @balance -= amount
      puts "'\nYou just withdrew $#{amount} from your account. \n\nYour remaining balance is: $#{@balance}\n\n"
    else
      puts pin_error_message
    end
    if @balance < 0
      @balance += amount
      return overdraft_protection
    end
  end
  def deposit(pin_access, amount)
    if pin_access == pin
      @balance += amount
      puts "\nYou just deposited $#{amount} into your account. \n\nYour remaining balance is: $#{@balance}"
    else
      puts pin_error_message
    end
  end

  private
  def pin
    @pin = 1234
  end
  def bank_manager
    @bank_manager = 4321
  end
  def pin_error_message
    puts "Invalid PIN number. Try again."
  end
  def overdraft_protection
    puts "\nYou have overdrafted your account. We cannot complete your withdrawl. Please deposit money before trying again. \n\nYour corrected balance is $#{@balance}"
  end
end

我正在寻找一个好的起点或采取一般方法来完成这项任务。

1 个答案:

答案 0 :(得分:2)

一种简单的方法是创建三个类:

BankAccount减去文字输出是您的Model

所有文本I / O都会进入您的View。提示用户进行操作或注册。从控制器获取模型(用于显示数据)或直接使用模型。

你的Controller负责a)对用户输入作出反应,b)修改模型,c)保持与BankAccount没有直接关系的状态(这一点可以讨论),比如登录或行动是什么可能来自您当前的状态。您的Controller会从您的视图中收到用户提供的数据的所有操作。

在控制台应用程序中,View和Controller之间的清晰分离可能有点困难。此外,大约有一百万种可能的方式以MVC风格实现它。最重要的一点是:模型中没有UI代码(put / gets)。