jazz's blog

Ruby as Script in Action

基于ruby脚本的一些最佳实践

  1. 入口

    • 可选:拥有一个main.rb 文件,作为项目的入口文件
    • 执行起点:

        if __FILE__ == $0 # alias $PROGRAM_NAME
          # main point
        end
      
  2. 加载路径

    • 将当前路径加入ruby的load_path中,以便查找到下面的模块或模型

        $LOAD_PATH.unshift(File.join(File.dirname(__FILE__))) 
          unless $LOAD_PATH.include?(File.join(File.dirname(__FILE__)))
      
  3. 配置文件

    • 使用ymal作为配置文件,使用yaml模块来读取

        config = YAML.load_file(File.join(File.dirname(__FILE__), CONFIG_FILE))
      
  4. 命令行参数

    • 使用optparse模块处理命令行参数

         OptionParser.new do |opts|
              # options[:action] = args
              opts.on("--open [project_name]","open a sublime projec") do |project_info|
                options[:open] = project_info
              end
      
              opts.on_tail("-h", "--help", "Show this message") do
                puts opts
                exit
              end
          end.parse!
      
      
          options.each do |action , argv|
            SublProject.send action.to_sym,*argv
          end
      
  5. 模块

    • 一个模块只应该解决一个核心问题。比如解析特定格式的文件,返回解析后的模型数据
      • 可选: 以功能命名相应的文件夹,如parser
    • 模块的接口设计为返回一个模型的实例
  6. 模型

    • 项目需求分析阶段,抽象出的核心概念都应该作为一个模型
    • 模型应该采用rails的充血模型设计,模型之间能导航,但不需持久化
    • 当代码在响应需求变化时显得复杂,这时候应该抽象出一个模型,在业务中插入一个对象来应对业务的变化。
    • 可选:把所有模型保存到domain或models文件夹中