4

我有五个共享公共代码的控制器。最好让他们从父控制器继承,还是使用关注点?例如:

class PostsController < ApplicationController
  before_action :authenticate, :set_project
  layout 'projects'
end

class CommentsController < ApplicationController
  before_action :authenticate, :set_project
  layout 'projects'
end

# three other controllers, etc...

我可以让控制器从一个声明before_actions和的控制器继承layout,或者我可以将公共代码填充到关注点中。

一种选择的标准是什么?定义了吗?

4

2 回答 2

4

我的经验法则是:

如果控制器在 URL 中共享相同的命名空间(例如/projects/...or /admin/...),那么我使用从Projects::BaseControlleror继承Admin::BaseController

如果他们只共享方法或声明而不共享命名空间,那么我使用 mixins。

有时我更喜欢重复的代码。因为就地代码比名称无意义的 mixin 更容易理解。您是否为涵盖authentication layout的问题取了个好听的名字?

于 2013-10-07T17:34:33.567 回答
1

在大多数情况下,我使用 mixins 来添加特性和继承来定制特性。

例如:如果我需要覆盖current_user我选择继承。如果我只有一些共享方法,那么我会选择 mixins。

于 2013-10-07T17:42:51.320 回答