假设系统有三种角色的用户(甚至更多),分别是 Foo、Bar、Baz,系统有 Post 模型,三种角色都要对 Post 数据进行 CRUD 处理,相同动作(例如 index)相互之间展示的样式也不同
我能想到的组织代码的方法有两种
第一种,创建一个posts_controller
如下
# posts_controller.rb
# ...
def index
if is_foo?
get_posts_for_foo
render foo_posts
elsif is_bar?
get_posts_for_bar
render bar_posts
elsif is_baz?
get_posts_for_baz
render baz_posts
end
end
# ...
第二种,如下树形结构为每个角色创建单独的posts_controller.rb
,然后再在其对应的 controller 中维护单独的逻辑
controllers
|
foo
|
posts_controller.rb
|
bar
|
posts_controller.rb
|
baz
|
posts_controller.rb
第一种方法,逻辑一旦复杂,角色一多的话,即使把该封装的语句封装成方法,action 的代码也会越来越多;第二种方法又会出现很多 DRY
所以想请教下大家,觉得这两种方法哪种更好,还是有更好的方法?