使复杂逻辑更容易

时间:2013-09-11 11:28:32

标签: ruby-on-rails ruby-on-rails-3 oop model-view-controller

人们如何组织复杂的方法? 我的意思是程序员通常把方法放在不属于任何特定模型的方法上,而是使用3-4个模型和2-3个范围来做出一些复杂的决策?

例如,我正在研究的应用程序的核心是遵循脚本:

@items_to_post = Item.where(calendar_id: Ad.ready_to_post.collect(&:calendar_id).uniq).not_posted_yet(ad)
if @items_to_post.renewable.count > 0
  @output = "Please Renew First"
else
  @first_item = @items_to_post.first
  @post = Post.new(title: @first_item.randomizations.first.title, body: @first_item.description, ... )
  ...
end

我只是不想厌倦整个代码 - 它很长,需要在两个地方调用,但差别很小。

我把所有这些都放到我的ExportController上,这很难看,特别是对于Controller,因为它破坏了MVC约定,但我不知道如何处理它。

你们通常会把这样的方法放在哪里?

1 个答案:

答案 0 :(得分:0)

单一责任原则:将每个作业分配给一个单独的类,该类只知道(接受依赖性)完成其工作所需的事物。如果你将这些职责做得很小,每个类的依赖项数量就会很少,而且类很简单。它可能会使您的代码整体变得更加复杂,但这没关系,因为您不必一次查看它。

如果您实际发布了更多代码,那么人们可能会建议一些可以拆分为单独类的职责。