2010-10-01 43 views
1

問題有什麼技術可以防止/刪除共享狀態?

共享狀態在某些情況下是壞事。我現在在一個項目中,幾乎所有的方法都會執行某種狀態更改。我相信這是一個問題。一方面,我不能重用這些方法,因爲根據當前的系統狀態,方法調用後的新系統狀態將會不同。另一方面,在這個項目中,測試非常困難或幾乎不可能。

問題

所以我想知道什麼技術在那裏防止共享狀態或重構這樣的應用程序,以便有依賴性少間。

一種方法是以更多功能的編程方式進行編程。還有哪些其他最佳做法,以及哪些情況最適合他們?

代碼示例將非常讚賞,如果他們幫助解釋技術。

ModuleA

Public Sub DoSomething 
    Range("A2").Value = Worksheets("Sheet2").Range(cellReference).Value + 10 
End Sub 

ModuleB

Global cellReference = "B22" 

更好(因爲爲全局變量和沒有硬編碼片和單元格引用無附圖)

ModuleA

Public Sub DoSomething(resultCell, sourceSheet, sourceCell) 
     Range(resultCell).Value = Worksheets(sourceSheet).Range(sourceCell).Value + 10 
End Sub 

ModuleB

deleted 

說明

所以,我想在這裏應用的技術是:

  • 刪除硬編碼值,並通過他們在作爲參數
  • 刪除引用全局變量,並通過他們在作爲參數

我知道,這是一個無論如何都應該遵循基本的最佳實踐。但也許有一些特別有助於防止共享狀態。我認爲Erik Meijer表示,如果你有共享狀態,通常會出現問題(我不確定我是否正確地引用了他)。

環境

順便說一句,這是一個Excel VBA項目,沒有軟件工程背景的人開發的大量的遺留代碼。不過,答案並不一定要針對這個特定的設置。

+0

我會大量重構刪除儘可能多的全局變量,這將是第一步。 作爲第二步,對had-code和製作屬性文件的一些重構可能是有用的。 稍後,您可以分析方法,找到代碼重複(通常在這類軟件上有大量重複...) 也許,隨着應用程序的知識需求,您可能可以更進一步並使用一些狀態機... – SoulWanderer 2010-10-04 07:34:32

+0

你是對的:很多重構是最有可能的路要走。是的,許多重複的代碼遍佈整個地方。如果你想添加你的評論作爲答案,我會接受它作爲答案。 – Lernkurve 2010-10-04 18:12:44

回答

0

我會大量地重構以儘可能多地移除全局變量,那將是第一步。 作爲第二步,對硬編碼和製作屬性文件的一些重構可能是有用的。

後來,你可以分析方法,找到代碼重複(這是通常有很多重複這種軟件......)也許,隨着應用程序的知識,你可能能夠去甚至進一步和使用一些狀態機.. (你說你會接受它它給了它作爲答案)

0

我真的不知道我是否已經清楚瞭解,但如果我遇到了大量共享狀態問題,我會使用一些state machine

有了這個,你也許能找出代碼是狀態依賴和什麼樣的代碼是跨...

例如,要建立一種工作流(大量的狀態信息,要檢查什麼需要這是一個很好的解決方案,並且你有大量的文檔...

希望它有幫助!

+0

我在我的問題中添加了一個示例部分來澄清我的問題。感謝狀態機提示。 – Lernkurve 2010-10-01 08:30:20