2017-06-21 118 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

有這樣的格局沒有這樣。最可能的原因是它是代碼重構的遺留物。這很可能是因爲這兩個功能可能會完成不同的事情(或不同的事情)。有人意識到(確定它很混亂)並試圖統一它們。

他們可能已經消除了公共職能,並且讓公衆公開,但是他們讓它留下來只是因爲它的遺留代碼和大量的謹慎,他們讓這兩個函數在需要時留下來,畢竟在某些時候。

相關問題