Rails结构,在这种情况下我应该使用服务层吗?

时间:2011-05-03 02:58:52

标签: ruby ruby-on-rails-3

我是Ruby和Rails的新手,我正在制作我的第一个应用程序。基本上我正在解析HTML并将其作为JSON发送给客户端。

现在我有两个HTML数据来源,但未来我可以拥有更多。因此,我认为删除负责从控制器解析HTML并将其放入服务层的代码是个好主意。我想出了这个结构:

  • 应用
    • 控制器
      • main_controller.rb
    • 模型
      • project.rb
      • task.rb
    • 服务
      • source1_service.rb
      • source2_service.rb

MainController调用两个服务来获取项目和任务;每个服务都解析自己的HTML。

这是一个很好的解决方案吗?还有更多的RoR方法吗?

2 个答案:

答案 0 :(得分:3)

将您的服务放在您的模型目录中,没有规则所有模型都必须从ActiveRecord::Base扩展,但您的服务是不透明的数据模型到您的应用程序的其余部分(如果我理解你的话)。理想情况下,让服务代码模仿活动记录,以便其他只使用您的模型代码的人不必知道它与rails应用程序中的任何其他模型不同。

答案 1 :(得分:3)

与Java世界不同,“服务层类”概念在RoR世界中并不真正流行/使用。从控制器中删除该代码是个好主意(您希望控制器很薄)。但我认为你可以将它们注入你的模型。如果您觉得它变得太复杂,您可以将额外的代码分解为模块,并将这些模块混合到您的模型中。

它不是唯一的做事方式。

但是,如果解析HTML包含一些可以重用的常用逻辑,即使在另一个项目中,最好将它放在lib /文件夹中。