关注,装饰,演示者,服务对象,助手,帮我决定

时间:2015-03-19 10:14:55

标签: javascript ruby-on-rails ruby ruby-on-rails-4

Rails中有一些东西:

## Concerns
## Decorators
## Presenters 
## Service Objects
## Helpers

任何人都可以给我一个真正的问题示例,我应该遵循什么类型的情况,所以我可以更好地理解这些功能。

示例将更好地理解概念

提前致谢并感谢您的光临

2 个答案:

答案 0 :(得分:7)

好吧,正如我在评论中所说的那样,通过简单的谷歌搜索,你会更好。

例如,this是关于大多数文章的好文章。

我将带您了解基础知识。

  1. 主要关注的是干燥模型和控制器。如果你有一个非常胖的控制器/模型,其中有很多功能(违反SRP),最好将其分解为几个独立的问题并将它们包含在内。这样你也可以在类似的控制器之间共享功能/楷模。 Here's一篇不错的文章。

  2. 装饰器用于将模型的业务逻辑与其用户外观分离。例如。用于存储仅在视图中使用的方法和用于其他显示的方法。它们还用于扩展对象的逻辑。 Here是一个很好的尽管的帖子。

  3. 演示者几乎相同,但仅用于显示目的。

  4. 服务对象主要用于复杂的逻辑,这些逻辑不是必须属于特定的模型/控制器和/或处理多个模型。

  5. 助手可以很好地将逻辑移出视图,从而简化视图模式并干掉视图。通常用于简单的事情(因为否则最好使用装饰器或演示者)。

答案 1 :(得分:0)

关注

用于在一个'类型的文件之间共享功能。 (' model',' controller',...)。 你有

  /app
    /controllers
       /concerns

    /models
       /concerns

concerns中,您放置了将包含在类中的模块。放一些行为代码是上帝的做法。例如

/app
  /models
    /concerns
       messageable.rb
    project.rb
    ..
    proposal.rb

项目模型

class Project < ActiveRecord::Base
  include Messageable
end

提案模型

class Proposal < ActiveRecord::Base
  include Messageable
end

app/models/concerns/messageable.rb

require 'active_record/concern'
module Messageable
  extend ActiveSupport::Concern

  # implement behaviour
  module ClassMethods
     # class methods for the behaviour
  end
end