【问题标题】:OOP: Why call a public method that goes on to call a private method with the same parameters?OOP:为什么调用公共方法,然后调用具有相同参数的私有方法?
【发布时间】:2017-06-21 14:10:02
【问题描述】:

我是一个相对较新的程序员,维护着旧代码库。我遇到了一种模式,但我不太确定它对我是否有意义。假设我有一个类(我们称之为 OutputClass)处理写入日志文件并创建 XML 文件以供其他系统使用。

现在,在代码中的几个地方,OutputClass 得到了证实,并被发送了一些对象(称为 A、B 和 C)。例如(这是在 VB 中,但适用于任何语言):

Call ObjectClass.WriteFile(A, B, C)

然后在 OutputClass 中,我有这段代码:

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 寻求帮助。

必填:我查找了相关问题,但找不到我要查找的内容。

【问题讨论】:

  • FWIW,我从未见过如此多余的反射。通常,在将参数传递给允许假设输入有效/安全的私有函数之前,需要对参数进行清理或验证。
  • 可能只是重构类的人留下的一些工件。 WriteFile 可能曾经做过一些有意义的事情,但被删除了,但程序员在删除了所有其他代码后将其留在那里。
  • 这是有道理的。所以假设公共方法没有做任何特别的事情,删除它,将私有方法设为公共,然后让其他代码直接调用它可能是安全的?

标签: oop


【解决方案1】:

这可能不是一个完整的答案,但根据我的经验,你永远不会看到这样的东西,除非它是为了保持一致性,或者是从曾经做重要事情的东西中重构代码之后的工件。

我所说的“一致性”是指其他类是否也遵循这种模式,但在将参数传递给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

【讨论】:

    【解决方案2】:

    没有这样的模式。最可能的原因是代码重构的剩余部分。很可能这两个函数正在做完全不同的事情(或同样的事情不同)。有人意识到这一点(当然这很令人困惑)并试图将它们统一起来。

    他们本可以取消公共功能并公开私有功能,但他们只是因为它的遗留代码而让它保留下来,而且出于谨慎考虑,他们让这两个功能在某个时候需要它们时都保留下来。

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 2011-09-19
      • 1970-01-01
      • 2016-12-26
      • 2011-06-21
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多