【问题标题】:Concerns, Decorators, Presenters, Service Objects, Helpers - Help me Understand Them [closed]关注点,装饰者,演示者,服务对象,帮助者-帮助我理解它们[关闭]
【发布时间】:2015-05-22 09:42:36
【问题描述】:

Rails 中有几样东西:

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

谁能给我真正的问题示例,在什么类型的情况下我应该遵循什么,所以我可以更好地理解这些功能。

例子会更好理解概念

提前感谢并感谢您的关注

【问题讨论】:

  • 我认为您只需使用谷歌搜索即可找到所需的一切。有大量关于这些事情的文章,其中许多都非常谨慎而透彻。
  • 如果你设置一个 Rails 4 应用程序,你会注意到 app/models/concerns 和 app/controllers/concerns 目录。关注点是可以混合到模型和控制器中以在它们之间共享代码的模块。实际上,这是一个非常简单而强大的概念。它与代码重用有关。基本上,这个想法是提取通用和/或特定于上下文的代码块,以清理模型/控制器并避免它们变得过于臃肿和混乱。 signalvnoise.com/posts/…
  • 这里有一些关于装饰者和演示者的很好的解释:stackoverflow.com/questions/7860301/…

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


【解决方案1】:

好吧,正如我在评论中所说,您最好使用简单的谷歌搜索。

例如,this 是一篇关于其中大多数的不错的文章。

我将向您介绍基础知识。

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

  2. 装饰器用于将模型的业务逻辑与其用户外观分开。例如。用于存储仅在视图中使用的方法和用于其他显示。它们还用于扩展对象的逻辑。 Here 是一篇不错的思想博文。

  3. 演示者实际上是相同的,但仅用于显示目的。

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

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

【讨论】:

    【解决方案2】:

    担忧

    用于在一种“类型”(“模型”、“控制器”...)的文件之间共享功能。 这样你就有了

      /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
    

    【讨论】:

      猜你喜欢
      • 2014-06-06
      • 1970-01-01
      • 2011-08-15
      • 2011-04-17
      • 2018-05-30
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多