2009-10-12 43 views
0

我正在修改子類的重寫方法。爲了確定這種變化的影響,我經歷了所有可能的情景並進行了測試。對子類的影響分析

的問題是,「一切可能出現的情況」被讀業務用例,把破發點,以找出何時被擊中,而不是其他人這種特殊的重寫的方法來確定。

是否有可靠或程序化的方式來了解影響?例如,如果它不是重寫的方法,我可以簡單地「查找所有實例」,或者甚至使用grep來找到它被調用的位置。對於重寫的方法是否有類似的措施?還是僅僅是多態的不便?

回答

1

這個主題可能有科學的方法。但總的來說,您可能不得不採用「多態性帶來的不便」。

我知道有些人因爲這個原因直接反對任何OO。實際上,這也是爲什麼在.Net方法中,與Java不同,默認情況下不能重寫。

如果你在google上搜索多態休息封裝或繼承休息封裝,你會發現很多關於該主題的討論。

0

一個快速的建議是重命名該函數。編譯器會讓您快速瞭解需要查看和可能重構的內容。顯然,這完全取決於你在控制所有可能的客戶端代碼。

+0

好吧,這是一個重寫的方法,編譯器不會抱怨,只是使用基類實現。 – 2009-10-12 23:04:21

+0

是的,我可以通過在基類中更改它來重命名該方法。這是我知道的唯一可靠的武器,迫使你去參觀所有可能的用途。這並不好玩,但它完成了。 – 2009-10-13 01:31:34

+0

這樣做的問題是,取決於有多少其他的子類繼承基類並重寫此方法,它將從不方便變爲不可能。與使用「查找所有參考」或類似功能並沒有多大區別。 – 2009-10-13 05:25:19

1

我不知道所有的細節,所以很難推測,但是你認爲這種變化會產生什麼影響?

只要你不改變方法的簽名,只要單獨驗證類的行爲即可。這是單元測試的一個關鍵原則。既然你提到了斷點,我假設你在調試器中手動測試。單元測試可以讓你遠離所有這些;值得一看。

如果該方法修改全局狀態或者該類與其他類緊密耦合,則可能很難單獨進行測試。見Adding unit tests to legacy code

作爲另一種選擇,ReSharper有一個查找用法功能,可以找到一種方法的調用者和基類的可選呼叫者。在「查找使用高級」下也可以找到重寫方法。

+0

不幸的是,它正在修改全局狀態(一些緩存數據)。但是,您的另一個問題的鏈接很有趣,謝謝! – 2009-10-13 05:16:30