如果我正确理解所有内容,您可能需要考虑的一件事是拆分命令行界面和基于 Web(或基于桌面 GUI)的界面。因此,例如,如果我正在创建一个计算器 CLI,您可以按照以下方式使用它
$ myscript -a 2 3
其中-a 用于“加法”函数,然后您可能有-s、-d 和-m(减法、除法、乘法)...不是很友好必须记住普通乔用户。您可以创建一个类,例如
class Calculator
class<<self
def perform(operation, left_side, right_side)
# figure out from operation what I need to do and do it or delegate it
end
end
end
然后你创建一个 CLI 脚本
#!/usr/bin/env ruby
require 'calculator'
# parse options, couple ways to do this, you probably already have one in mind
operation_option = ... # check for -a or -s or -d or -m
left_side_option = ...
right_side_option = ...
Calculator.perform(operation_option, left_side_option, right_side_option)
现在您还可以为其创建一个基于 Web(或基于桌面)的界面,该界面也只调用计算器类:
require 'calculator'
# read from text fields/drop downs/whatever
operation_option = ...
left_side_option = ...
right_side_option = ...
Calculator.perform(operation_option, left_side_option, right_side_option)
这种方式有点重复,但不是真的......无论哪种方式,您都需要从界面解析文本字段,而不是将它们写入 CLI 然后读取的中间文件,您只需绕过 CLI 并直接转到您要执行的代码。因此,您有 2 个(或更多)接口文件,它们只负责显示(如果适用)和从其特定接口读取,并以通用格式将数据传递给“工作马”类。
就创建第二个界面而言,Ruby 确实支持curses(我安装了一个使用该名称的 gem),但您需要自己构建表单和交互(据我所知'我知道,我从来没有寻找宝石来帮助使表单更容易在诅咒中)并且基于桌面的可能比编写基于 Web 的东西更好,根据您的描述(红宝石确实有相当数量的 GUI 宝石,但我' 从来没有使用过除诅咒之外的任何东西),但在这一点上,这一切都只是“适合你的项目的东西”。