2011-07-28 66 views
8

我在一些老的(比我年長的)C代碼的工作,需要進行清理,提出了更新,以便(除其他事項外),更容易維護和更乾淨地與當前代碼集成。重構遺留的C代碼轉換爲MVC設計

現有的代碼非常混亂,並且可以自由地將GUI邏輯與業務邏輯和數據訪問邏輯分開。唯一的優點是它不是意大利麪代碼,並且它是模塊化的(因爲七十年代的大多數代碼往往是這樣)。我的問題是這樣的:任何人都可以提供關於如何去重構代碼到MVC的指導方針(順便說一下,我也將代碼從C移動到C++,同時承擔這項任務 - 但這是我的最小的擔心,因爲我對這兩種語言都非常有益)。

順便說一句,我完全知道這不是一項簡單的任務。我只是想知道從混合DBAL/BL/GUI的模塊化代碼到更乾淨的MVC實現的步驟。

回答

4

我不相信,可以有一個明確的一系列步驟,我們確實將與現有代碼的結構變化。

我同意@Jesus Ramos的計算測試策略是關鍵。對你而言,問題很可能是代碼目前不是單元可測試的,因爲實際上沒有「單元」,我們無法測試業務邏輯,也就是說,沒有測試用戶界面。

我會非常認真地考慮重寫這個東西,而不是重構。

如果你要重構,那麼我的猜測是,你會採取一種「瑞士奶酪」的做法。鑽出碎片,留下一個有許多孔的中心物體。因此,請拔出數據庫訪問代碼,重點提供一個清晰的API和一組數據對象 - 這些將成爲您的模型的基礎。將GUI代碼拉出到視圖圖層中。 Controller的邏輯剩下的就是你可以重構的東西。

2

我會首先構建業務邏輯層(有一些單元測試一起,以確保它運行像原來的),然後,我會在數據層(再連同單元測試)工作。一旦你有了這兩個,最好創建一個接口,以使GUI代碼可以保持健壯性,而不會如此耦合,並將所需的業務邏輯和數據功能提供給GUI,儘管個人GUI只應提交它所具有的數據業務邏輯層,然後提交給數據層。這裏的關鍵是單元測試(如果可能的話),因爲這會讓你的生活更容易,確保你的代碼和原文在功能上是一致的。

同樣,你不必跟着一步一步來,它只是偏好離開GUI直到結束,因爲這是不太複雜比商業邏輯層(大部分時間)。

最困難的任務是搞清楚去耦本身有些人做出這個艱難的,只是有一個單一功能的所有3層和撕裂,除了可以是一個麻煩。