将有关在ruby中生成报告的所有逻辑放在轨道上的最佳位置是什么?

时间:2012-11-01 14:22:47

标签: ruby-on-rails code-organization project-organization

我有很多模型用于获取数据并生成报告。

报告不需要存储,即它不是活动记录。

但肯定有80行代码可以生成报告数据。

我应该把这些线放在哪里?

他们目前在控制器中,但由于控制器应该很薄,我不确定这是不是最好的地方。

4 个答案:

答案 0 :(得分:11)

我会在应用中创建一个名为reports的目录,并将所有报告放在那里。

只要文件名和类遵循常规约定,就可以找到rails中app目录中的所有内容。

例如,如果您在app/reports/example_report.rb中有以下内容:

class ExampleReport
  def initialize
    ...
  end
end

您可以从控制器中使用它:

class SomethingController < ApplicationController
  def something
    example = ExampleReport.new
    ...
  end
end

依赖于模型的报告被视为应用程序域的一部分,这就是我推荐app目录的原因。在应用程序中添加子目录的简便性意味着您可以在应用程序中维护不同角色的逻辑分离。不应该猜测某事的实现在哪里。控制器位于app/controllers,模型位于app/models,因此报告位于app/reports。例如,如果您要向应用添加通用服务类,则可以使用app/services

相比之下,它们不属于lib,因为它们不能以通用方式运行。为了进一步说明,只有您可以设想在任何 rails项目中使用的代码属于lib目录。

答案 1 :(得分:0)

我想说类似的东西属于辅助方法/方法。

答案 2 :(得分:0)

当您的业务逻辑与持久性无关时,您可以将其放在模型中而无需继承ActiveRecord。参见:

答案 3 :(得分:-1)

Helpers应该是更好地放置代码的地方,

还要确保提取/处理数据的纯逻辑相关代码仍应转到model