重复使用程序方法,有条件地添加一个额外步骤

时间:2014-07-16 01:46:19

标签: ruby

我的申请中有一个流程,要求我从“通常”流程中采取额外步骤。

假设我有一个类/方法:

    class ImportProcessor
     attr_reader : file

     def initialize(file)
       @file = file
     end

     def process
       validate_file(file)
       file_set = split_file(file)
       import_files(file_set)
     end
   end

该类处理我要导入的文件。现在让我们说我需要在流程中添加另一个步骤。

现在我的#process方法需要看起来像这样:

def process
  validate_file(file)
  file_set = split_file(file)
  api_processing(file)
  import_files(file_set)
end

正如您所看到的,唯一的区别是#process方法中有一个额外的方法调用。是否有我应该使用的模式来实现这一点,或者你会推荐别的什么?

我有一个想法是为我导入的每个文件创建一个ImportProcessor类的子类,这样我就可以通过传入lambda来为ImportProcessor #process方法添加一个方法调用。

这样的事情:

class File1 < ImportProcessor
  def initialize(file)
    super(file)
  end

  def process
    super(lambda {|file| api_processing(file)})
  end

  private

  def api_processing(file)
    ApiProcessor.new(file).process
  end
end

现在,ImportProcessor类看起来像这样:

   class ImportProcessor

    attr_reader : file
        def initialize(file)
          @file = file
        end

        def process(api_processor=nil)
          validate_file(file)
          file_set = split_file(file)
          api_processor.call(file) if self.is_a?(File1)
          import_files(file_set)
        end
     end

1 个答案:

答案 0 :(得分:0)

为什么不在方法中添加一个参数?

 def process(run_some_other_method=false)
   validate_file(file)
   file_set = split_file(file)
   import_files(file_set)
   some_other_method(file) if run_some_other_method
 end

然后这样称呼:

process # runs like normal since run_some_other_method defaults to false
process(true) # run with added method