基于ruby脚本的一些最佳实践
入口
- 可选:拥有一个main.rb 文件,作为项目的入口文件
执行起点:
if __FILE__ == $0 # alias $PROGRAM_NAME # main point end
加载路径
将当前路径加入ruby的load_path中,以便查找到下面的模块或模型
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__))) unless $LOAD_PATH.include?(File.join(File.dirname(__FILE__)))
配置文件
使用ymal作为配置文件,使用
yaml
模块来读取config = YAML.load_file(File.join(File.dirname(__FILE__), CONFIG_FILE))
命令行参数
使用
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
模块
- 一个模块只应该解决一个核心问题。比如解析特定格式的文件,返回解析后的模型数据
- 可选: 以功能命名相应的文件夹,如parser
- 模块的接口设计为返回一个模型的实例
- 一个模块只应该解决一个核心问题。比如解析特定格式的文件,返回解析后的模型数据
模型
- 项目需求分析阶段,抽象出的核心概念都应该作为一个模型
- 模型应该采用rails的充血模型设计,模型之间能导航,但不需持久化
- 当代码在响应需求变化时显得复杂,这时候应该抽象出一个模型,在业务中插入一个对象来应对业务的变化。
- 可选:把所有模型保存到domain或models文件夹中