可维护性和可测试性的活跃记录组织

时间:2009-09-18 18:21:57

标签: ruby-on-rails

我的一些AR课程开始......腰部凸起。我开始认为可能是时候让它们节食了。可能我最担心的是一个文件中有如此多的代码,我正在考虑将验证,关联和相关方法组分解为模块。还有其他我未考虑过的替代方案吗?

我也想对我的测试做同样的事情(我使用带测试/规范的应用程序,如果它有所不同)......

非常感谢您的想法。

2 个答案:

答案 0 :(得分:2)

我熟悉你的问题。我项目中的一些模型也变得太大,无法与他们愉快地合作。我发现了一小段代码(我想在PaulBarry.com上),它可以让你将模型分成几个文件。

concern_with可以将模型的一部分放在子文件夹中。例如,您在原始模型中添加以下行:

class User < ActiveRecord::Base
    concerned_with :validation
end

然后在'models / user / validation.rb'中创建一个包含验证的文件:

class User
    validates_presence_of :username
end

只需将此代码放入Rails项目中的初始化文件中即可使用此功能!

class << ActiveRecord::Base
  def concerned_with(*concerns)
    concerns.each do |concern|
      require_dependency "#{name.underscore}/#{concern}"
    end
  end
end

答案 1 :(得分:0)

使用像“acts_as_fat_model”这样的类方法将所有内容或最常见的行为与关联一起提取到插件中是很正常的。

一般来说,其中一个rails mvc习语是“Fat models - skinny controllers”。这是一个好兆头,你的模型(而不是控制器)很胖。