我的申请中有一个流程,要求我从“通常”流程中采取额外步骤。
假设我有一个类/方法:
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
答案 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