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

Ruby 在没有Rails的情况下将单个文件转换为MVC,ruby,model-view-controller,Ruby,Model View Controller,我需要获取下面的单个文件代码,并将其分离为一个模型、视图、控制器MVC ruby程序,该程序可以通过命令行中的ruby命令运行,而无需使用Rails。有关如何从irb运行该程序的说明,请查看Github Repo上的README.md require_relative 'view' class BankAccount attr_accessor :name, :balance def initialize(name, balance=0) @name = name @b

我需要获取下面的单个文件代码,并将其分离为一个模型、视图、控制器MVC ruby程序,该程序可以通过命令行中的ruby命令运行,而无需使用Rails。有关如何从irb运行该程序的说明,请查看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

我正在寻找一个开始的好地方,或者一个完成这项任务的一般方法。

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

BankAccount减去文本输出是您的模型

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

您的控制器负责a对用户输入作出反应,b修改模型,c保持与银行账户不直接相关的状态。这一点可以讨论,如登录或从您当前的状态可以执行哪些操作。控制器从您的视图接收包含用户提供的数据的所有操作


在控制台应用程序中,视图和控制器之间的清晰分离可能有点困难。此外,有大约一百万种可能的方法以MVC风格实现这一点。最重要的一点:没有UI代码放入/获取模型。

应用程序应该做什么?您的类BankAccount是模型减去文本输出,如果它不只是日志记录的话。您现在需要的是某种视图和一个控制器类,它将模型修改为视图中的操作。你必须有一些规格说明a哪些操作必须是可能的,b哪些视图必须创建web、控制台、桌面等等。。否则,您将很难满足客户/教师的要求。应用程序应该从命令行欢迎他们,提示他们注册帐户,然后允许他们存款、取款或显示当前余额。在这种情况下,应用程序基于控制台。当前具有PUT的方法可以转换为不同的视图或泛型视图的不同方法。您的控制器应接受控制台的输入,根据需要调用模型的相关部分,例如,有人注册时实例化BankAccount.new,询问时调用deposit等,并决定下一步显示哪个视图。此任务不属于我当前的技能范围;这使我困惑。虽然这似乎意味着,但练习的重点是让你明白这一点。学习并不总是容易的;很多时候,当我们探索不同的方法去达到我们想去的地方时,我们花了几天的时间困惑,似乎没有取得任何进展。在我们学习了我们所使用的语言的模式和细节之前,编程就是这样。我们应该足智多谋,并找出解决办法。我们不会死在尝试中,但我们确实做了一次英勇的尝试。这不是外包任务,但方向是明确的。下面我提供了一个宝石,我在过去用它来做你正在尝试的事情。还需要在一个文件中要求AcRecErrd和其他的Rails GEM来完成同样的事情。这对我来说是有意义的。对我来说没有意义的是如何让视图文件和控制器文件彼此播放或相互通信。那么,您将模型和视图传递给控制器。如果我输入'draw 2000',视图会将其转发给控制器。在这里,您决定用户输入的意思是“调用用户pin,2000”。然后需要更新视图,因为可用资金的模型已更改。这通常是通过从模型中通知视图来完成的。在您的情况下,如果在每次操作后都重新加载,您应该会很好。因此,理论上,如果我将yes\u或_no=gets.chomp放在视图文件中,如何使其与控制器文件中的if/else通信?您可以调用controller.registeryes\u或\u no,或者可能首先收集更多信息,如果是或否,则获取controller.registeruser\u信息。您可以在视图中收集数据,并将其转发给控制器,在那里您可以决定做什么。我希望你得到了整体概念-没有正确的解决方案。哈哈。我非常困惑,在黑暗中四处闲逛。但是你得到了答案。谢谢