2013-07-03 39 views
0

我有一個調用業務層的方法,其當前簽名的MVC4項目值如下:需要的HttpContext在業務層

businessObject.BusinessMethod(param1, param2, param3) 

在此業務層的方法,我現在需要有從HttpContext.Current.Session["SomeSessionValue"]財產的一些數據。

因此,而不是添加使用Resharpers重構功能兩個參數,我想俱樂部所有的三成一個對象,並重新命名的簽名如下

businessObject.BusinessMethod(myParametersObject) 

該業務層方法用遍瞭解決方案並測試代碼。如果我使用resharper修改方法簽名,現在我需要在調用方法之前將參數1,參數2,參數3的值分配給MyParameters類的對象中的相應屬性businessObject.BusinessMethod(myParametersObject)

有超過2000個地方需要做這個改變。有沒有更快的方法來做這個改變?我不想手動更改任何地方的代碼或將HttpContext添加到業務層。一些面嚮對象的技術可以幫助我嗎?

謝謝。

+0

所有的2000調用都依賴於會話變量嗎?否則,只需爲所做的調用創建一個新的重載。 – CodeCaster

+0

過載是多參數地獄的方式,在C#4中完全沒有必要,您可以使用默認參數值 –

+0

儘管您可能是對的,但維護通常不是理想世界的情況。無論如何,默認參數是超負荷語法糖,有自己的優點和缺點。 – CodeCaster

回答

2

使用HttpContext對象傳遞全局對象是一個壞主意。通常,業務層甚至不應該引用System.Web。

Resharper對「Extract Class from Parameters ...」進行了重構,使您所描述的內容自動化。您可以通過右鍵單擊您的方法名稱並選擇Refactor> Extract>從參數中提取類來訪問它。然後,您可以選擇要包含在課程中的參數。

Resharper將更新所有對創建和使用新類的方法的引用。

在任何情況下,超過3或4個參數都是代碼異味,表明該方法可能會嘗試做太多事情。當你越過這個門檻時,是時候改變你的設計,並且合併參數或分解方法。