我正在修改一些遺留代碼。我有一個對象,它有一個方法,讓我們說doSomething()。當特定的斷言失敗時,此方法會引發異常。但是由於新的要求,在某些情況下,不拋出異常並繼續使用該方法是可以的。我在這裏使用全局狀態,有沒有更好的方法來做到這一點?
現在我不是直接從我需要忽略異常的地方調用此方法。這個doSomething()就像是一個審計方法,可以通過很多其他方法在內部調用,例如method1(),method2()等。
在我需要忽略異常的地方,我調用method1 ),現在我不想讓method1()拋出異常。所以我修改了method1()以接受默認參數method1(ignoreException = false)並調用method1(true)。
我還修改了doSomething()來接受額外的參數,而method1只是將ignoreException傳回給doSomething(ignoreException)。
潛在地,我需要改變所有的方法,方法2,方法3等以及採取這個額外的參數。
在看到這段代碼時,有人建議不要傳遞此標誌,而是可以將它作爲類的成員變量,然後在調用method1()之前調用setter。可以說我的對象是obj,那麼我應該做 obj.setIgnoreXXXException(true); obj.method1(); obj.setIgnoreXXXException(false);
在我看來,這似乎保持了一些全球性的狀態,看起來並不錯。但傳遞論據的另一種方式似乎也很笨拙,我必須改變很多地方(這個類有子類,有些方法是虛擬的,所以我需要隨處修改)
有沒有更好的方法來做這個。既然它是遺留的,並且沒有單元測試,我不想修改很多現有的代碼。
感謝您在此解釋警告,我將使用函數參數 – Arvind 2009-11-11 06:33:03