2017-09-16 110 views
3

在數據清理應用程序中,我有一系列方法,每個方法都需要一個自定義對象並在處理後返回。獲取和返回相同類型的方法的流水線

我知道設計模式,它們將這些方法放在它們自己的類中並將它們鏈接在一起,但我對分離這個類沒有興趣。這是嵌入在相當大的Java巨集中的一類中間的幾行。出於同樣的原因,我不會在Scala中包含單個模塊,或者爲此小代碼添加其他功能語言。

這些方法必須以正確的順序執行,因爲每個方法的邏輯取決於已完成的內容。因此,我給了他們新的編號名稱,這是我希望保留的這個編號的順序。

我此刻的代碼如下所示:

customObject = method1(customObject); 
customObject = method2(customObject); 
customObject = method3(customObject); 
customObject = method4(customObject); 
customObject = method5(customObject); 
customObject = method6(customObject); 

是否有鏈更加流暢的方式這些結合在一起,沒有扭轉他們的訂單,因爲它出現在代碼?換句話說,我已經駁回了以下內容作爲潛在的誤導性(真正的方法名就不會顯示它們向後排列):

customObject = method6(method5(method4(method3(method2(method1(customObject)))))); 

customObject = method6(customObject) 
= method5(customObject) 
= method4(customObject) 
= method3(customObject) 
= method2(customObject) 
= method1(customObject); 

(在任何情況下,除了扭轉當讀取時,後者不是有效的Java代碼,因爲如果在右側有方法調用,編譯器需要一個變量)

這是關於一小段代碼的一個小問題。我懷疑答案是'否',因爲每行中的處理從右到左(進入方法參數,並分配給左側的變量名稱)。但我無法擺脫這種嘮叨的感覺,我可能會錯過語言中的某些東西,這將允許這些方法調用更優雅的鏈接。也許這是Java不能做的事情。

+0

爲什麼不只是製作一個customObject子類,以便您可以將它們鏈接到customObject? –

+0

@Dave Newton:這個問題並不清楚,但customObject是List 的一個實例(我故意忽略它,因爲它在處理過程中不能流式傳輸或以其他方式分解,我想避免這樣的答案) 。我認爲不應該僅僅爲了僅在這幾行中使用的數據結構創建另一個類。 – Reg

回答

1

您可以使用fluent interface模式。例如:

dataCleaner 
    .method1(customObject) 
    .method2(customObject) 
    .method3(customObject) 
    .method4(customObject) 
    .method5(customObject) 
    .method6(customObject) 

其中dataCleaner上的每個方法返回this例如,

public DataCleaner method1(CustomObject customObject) { 
    // do some cleaning ... 
    // ... 
    return this; 
} 

注:

  • 這假設每個方法變異customObject以這樣一種方式,它已準備好爲輸入到下一個方法。根據你展示你當前的代碼的方式,我認爲這個假設是有效的。如果這不是有效的,那麼你可以做DataCleaner狀態,並通過類成員(們),這樣的事情也許離散方法之間共享狀態:

    CustomObject clean = new DataCleaner(customObject) 
        .method1() 
        .method2() 
        .method3() 
        .method3() 
        .method5() 
        .method6() 
        .get(); 
    
  • 它可以說,上述方法只是方法鏈接而不是一個正式的流暢接口,但可能你的實際實現可能返回一些東西,或者可能有一些方法需要額外的上下文等,所有這些都會使它更接近流暢接口的規範形式。除了如何描述這種模式的語義之外,它至少允許你整理你的代碼並以易於理解的方式表示這個方法鏈之間的依賴關係。

相關問題