2017-06-21 68 views
1

我是一个相对较新的程序员,维护一个遗留的代码库。我遇到过一种模式,我不太确定这对我有意义。假设我有一个类(我们称之为OutputClass),它处理写入日志文件和创建供其他系统使用的XML文件。OOP:为什么调用一个公共方法继续调用具有相同参数的私有方法?

现在在代码的几个地方,OutputClass被证实并被发送了几个对象(称它们为A,B和C)。因此,例如,(这是在VB,但适用于任何语言):在OutputClass类

Call ObjectClass.WriteFile(A, B, C) 

然后,我有这样的代码:

Public Sub WriteFile(A as ObjType1, B as ObjType2, C as ObjType3) 
    Call WriteThisFile(A, B, C) 
End Sub 

Private Sub WriteThisFile(A as ObjType1, B as ObjType2, C as ObjType3) 
    'do stuff 
End Sub 

如果我们只是路过,我们在收到参数公共方法作为私有方法的参数,那完成了什么?我认为我明白公共与私人的目的,但也许不是? TIA寻求帮助。

强制性:我寻找相关的问题,但无法找到我正在寻找的东西。

+0

FWIW,我从来没有见过这种多余的反思。通常,在将参数传递给允许假设输入有效/安全的私有函数之前,有一些卫生或验证参数的步骤。 –

+2

可能只是某些重构该类的人留下的工件。 'WriteFile'可能用于做一些有意义的事情,但是程序员在删除所有其他代码后将其留在那里。 – litelite

+0

这是有道理的。因此,假设公共方法没有做任何特别的事情,那么删除它可能是安全的,私有方法是公开的,并且让其他代码直接调用它? – glassy

回答

0

这可能不是一个完整的答案,但根据我的经验,除非是为了保持一致性,否则从来不会看到类似的东西,或者是在重构代码之前用来做重要事情的东西之后的工件。

我的意思是“一致性”,如果其他类也遵循这种模式,但在将参数传递给private方法之前,在public方法中执行一些有用的操作。

从一般意义上说,您会看到类似这样的模式,它们使public方法的执行能够执行参数的卫生和/或验证,然后将参数应用于private方法。然后private方法是允许作出假设,如输入是有效的,安全的,所以执行将更加简单:

Public Sub WriteFile(A as ObjType1, B as ObjType2, C as ObjType3) 
    // perform validition and throw if invalid 
    // perform sanitation 
    Call WriteThisFile(A, B, C) 
End Sub 

Private Sub WriteThisFile(A as ObjType1, B as ObjType2, C as ObjType3) 
    // relatively simple application logic goes here 
    // because assumptions can be made about input 
End Sub 
0

有这样的格局没有这样。最可能的原因是它是代码重构的遗留物。这很可能是因为这两个功能可能会完成不同的事情(或不同的事情)。有人意识到(确定它很混乱)并试图统一它们。

他们可能已经消除了公共职能,并且让公众公开,但是他们让它留下来只是因为它的遗留代码和大量的谨慎,他们让这两个函数在需要时留下来,毕竟在某些时候。

相关问题