是否可以在Rails之外使用关注点

定音

我喜欢这样的想法,ActiveSupport::Concerns但想知道是否可以在香草Ruby应用程序中使用。还是仅在Rails应用中?我正在考虑在Sinatra应用程序中使用ActiveRecord的示例。

编辑

看来您可以这样做requiring 'active_support',尽管我不确定是否有任何细微差别不起作用。

喜欢:

require 'active_support'

module Printable
  include ActiveSupport::Concern

  def print
    puts "I will print here"
  end
end


class User

  include Printable

  def initialize(name)
    @name = name
  end

  def say_my_name
    puts "my name: #{@name}"
  end
end
卡切

是的,您可以(而且似乎已经发现了方法)。ActiveSupport的大部分编写方式都可以将其自身添加到其他项目中。

你甚至可以要求 Concernrequire "active_support/concern"

意见

我通常不赞成使用ActiveSupport::Concern

  • 违反了Composition Over Inheritance(请参见Sandi Metz的《没事》
  • 功能95%是由香草红宝石已经提供,仅在0-3多行代码(零意味着你并不需要Concern 在所有

例子:

  • 您粘贴的代码片段与裸露的Ruby完美配合 module
  • Rail自己的文档Concern解释了相同长度和复杂性的Vanilla Ruby示例的用法
  • 在该文档中,它说:“给出一个Foo模块和一个Bar依赖于前者模块...”,就好像您处理mixin地狱一样

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章