當我創建一個應用程序時,我通常會創建一個靜態類,其中包含靜態方法和屬性,我無法確定將其他位置放在哪裏。
這不是一個特別好的設計,但這就是一個重點:它給了我一個地方化一整套設計決策的地方,我還沒有想到。一般而言,隨着應用程序的增長並通過重構進行改進,這些方法和屬性實際應該存在的地方就會變得更加清晰。毫不誇張地說,重構工具的狀態是這樣的,以至於這些改變通常不會特別痛苦。
我試過用另一種方式做,但另一種方式基本上是在我足夠了解我的應用程序以正確設計對象模型之前實現對象模型。如果我做那,我花了相當多的時間和精力提出了一個平庸的解決方案,我必須在未來某個時候從頭開始重新審視和重建。好吧,如果我知道我將重構此代碼,那麼我怎麼樣跳過設計和構建不必要的複雜類的步驟,這些類並不真正起作用?
例如,我構建了一個正被多個客戶使用的應用程序。我很早就想到,我需要有一種方法來分離需要針對不同客戶以不同方式工作的方法。我構建了一個靜態實用程序方法,我可以在程序中的任何位置調用一個自定義方法,並將其粘貼到靜態類中。
這工作好幾個月。但是有一點剛開始看起來很醜陋。所以我決定將它重構成它自己的類。在我查看所有調用此方法的地方的代碼時,非常清楚,所有自定義方法確實需要成爲抽象類的成員,客戶的程序集需要包含單個派生類它實現了所有的抽象方法,然後程序只需要從配置中獲取程序集名稱和命名空間,並在啓動時創建自定義要素類的實例。對於我來說,找到所有必須定製的方法非常簡單,因爲我需要做的就是找到每個地方,我的負載自定義功能方法被調用。我花了整整一個下午的時間來完成整個代碼庫並使這個設計合理化,最終的結果是非常靈活和強大,並且解決了正確的問題。
事情是,當我第一次實現該方法(實際上是三個或四個相關的方法)時,我意識到這不是正確的答案。但我不知道足夠的答案是什麼。所以我用最簡單的錯誤答案去解決問題,直到正確的答案變得清晰。
問題是關於C#,而不是Java。無論如何,在.NET和Java中,String類是封閉的(最終使用Java) – 2009-10-31 03:19:42