2014-07-16 21 views
0

我在我的應用程序中有一個流程,需要我從「常規」流程中採取額外步驟。通過有條件地添加一個額外步驟重用程序方法

比方說,我有一個這樣的類/方法:

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

爲什麼不只是增加一個參數的方法?

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 
相關問題