我正試圖在工作中的一個應用程序中重寫非常難看的類。在我們的一個類中,有數百行代碼確保某些類的初始化和重新初始化。目前,這是通過可怕的強力-y方式完成的,在這種方式中,您編寫init代碼並手動將其複製到re-init部分(因爲它們非常相似)。延遲或可重複初始化的最優雅方式
因此,我開始將它重寫爲代表列表的形式,然後在兩個地方都使用參數調用它們(bool isReinit)。然後我注意到大多數代表也是相同的,因爲90%的類的初始化過程是相同的。這意味着我應該能夠創建一些默認的初始化函數來大幅簡化代碼。目前,我創造了這樣的事情:
https://dotnetfiddle.net/RVS5UT
我還創建類CustomInitializer它實現IInitializer,只需要一個Func鍵作爲參數,並運行它的初始化,對於初始化是很多不同的情況。
現在,這個簡化和匿名的工作代碼塊,但它的工作原理。問題是整個方法非常尷尬,構造函數簽名很糟糕。有什麼方法可以簡化嗎?我找不到可以幫助我的任何模式或方法?任何邁向更好代碼的步驟都是值得歡迎的,也許我只是錯過了一些東西。
還有一個問題。我想出的一個解決方案是將屬性對(var1a + var1b,var2a + var2b,..)存儲在一個對象中,並將其直接傳遞給Initialize方法。但是這意味着移動這些屬性,目前遺憾的是這些屬性是不可能的,因爲這個文件有超過18K行,並且由於重構了一個方法(即使它很長),代碼審查人員會因爲更改第三個而殺了我。我需要將目標屬性(var1a,var1b,var2a,..)留在現在的位置。這也可能意味着沒有優雅的方式來解決這個問題。
我使用.NET 4.0,C#5.0
編輯:我要初始化的類型沒有接入(另一種愚蠢的捕撈)
感謝您的幫助。
爲什麼不簡單地用新的實例替換舊實例?重新初始化可以通過簡單地引用新實例來完成。無論如何,一個如此之大的班級沒有任何意義。所有這些屬性之間的凝聚力是什麼?這個班級的單一指數是多少?它有什麼行爲?重新初始化這個類是什麼意思?有時最好解釋最初的問題,並將所有當前的解決方案部分從圖片中刪除。 – plalx