2017-09-16 108 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(); 
    
  • 它可以说,上述方法只是方法链接而不是一个正式的流畅接口,但可能你的实际实现可能返回一些东西,或者可能有一些方法需要额外的上下文等,所有这些都会使它更接近流畅接口的规范形式。除了如何描述这种模式的语义之外,它至少允许你整理你的代码并以易于理解的方式表示这个方法链之间的依赖关系。

相关问题