我有以下代码(简化):
decorator.rb
require 'decoratable'
class Decorator < SimpleDelegator
include Decoratable
end
decoratable.rb
require 'decorator_builder'
module Decoratable
def decorate(*decorators)
decorators.inject(DecoratorBuilder.new(self)) do |builder, decorator|
builder.public_send(decorator)
end.build
end
end
decorator_builder.rb
require 'rare_decorator'
class DecoratorBuilder
def initialize(card)
@card = card
@decorators = []
end
def rare
@decorators << ->(card) { RareDecorator.new(card) }
self
end
def build
@decorators.inject(@card) do |card, decorator|
decorator.call(card)
end
end
end
rare_decorator.rb
require 'decorator'
class RareDecorator < Decorator
# Stuff here
end
当我需要decorator.rb时,它将导致在声明Decorator之前声明RareDecorator,这是一个问题,因为RareDecorator继承自Decorator。
一个可能的解决方案是像这样拆分decorator.rb:
class Decorator < SimpleDelegator; end
require 'decoratable'
class Decorator
include Decoratable
end
但是,在文件中间声明依赖似乎对我来说似乎不是一个很干净的解决方案。
有没有更好的解决方案来解决这个问题?
无需在每个文件中指定要求,而是创建一个将需要应用程序所有要求的文件。举个例子environment.rb
:
require 'decoratable'
require 'decorator'
require 'decorator_builder'
require 'rare_decorator'
您不必担心Decoratable
不知道是什么DecoratorBuilder
,因为它在方法中使用,并且在调用此方法时将执行对常量的检查。由于稍后需要装饰器,因此所有功能都可以使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句