2008-10-21 25 views
8

我已經看到這個主題現在不止一次地出現了。我希望那些目前處於類似情況或過去的人可以提供一些有見地的建議。如果您也分享過去的經歷,這可能會很有用。業務邏輯在大型WinForms應用中侵入UI

所以有這麼多年來開發的這個相當大的windows窗體應用程序。儘管開發團隊試圖將業務邏輯與用戶界面分開,但事實並未發生,業務邏輯硬連線到用戶界面的代碼有很多方面。事實上,以前嘗試採用MVP架構的遺留物可以在很多地方看到。還有單元測試,但代碼覆蓋率相對較低。然而,有一些熱點 - 每個人都知道的領域已經變得越來越複雜,他們一定需要。

很多早期可能發現的錯誤只有在測試人員抓住他們的手電筒並且真正開始尋找錯誤時纔會發現,這些錯誤很遺憾,太晚了,代價太高,而且很危險。工程師,測試人員和首席財務官 - 都意識到需要完成某些工作。

完全解決這種情況或改善情況最實際的方法是什麼?既然這將是一項長期任務,那麼衡量實現目標進展的最佳方式是什麼?客觀條件下如何定義目標?

+0

順便說一下,> 100K LOC並不是很大。 > 1M LOC很大! – 2008-10-22 00:09:34

+0

刪除了提及的數字,使這個問題與更多的人有關:) – Sid 2008-10-22 00:34:28

回答

0

聽起來像一個典型的應用程序給我。

5

您需要重新構建業務層,然後將UI連接回此架構層。
您可以在完成此操作後保持現有的用戶界面和硬連線業務邏輯,並一次將其切換爲新格式。

這樣做的好處是允許您添加所需的所有單元測試和自動測試工具,而效果很小。你也可以確保你的組件正在做他們需要做的事情。

基本上,短期內投資回報有限,但在中長期(真正長期)有潛在的巨大收益。

1

聽起來像你在你面前有相當大的挑戰!

從最廣泛的角度來說,我認爲您必須首先與您的團隊合作,非常清楚地確定您認爲可接受和不可接受的內容。根據我的經驗,一定程度的業務邏輯(如驗證)必須在UI中(儘管它也應該在業務層中實施)。

一旦你明確定義了什麼是可接受的,什麼不是,它應該是一個相對機械的(雖然令人生畏的)任務,列出項目中的違規行爲。

這會給你一個清晰的問題規模指標 - 而且如果你打算以任何可衡量的方式解決問題,那纔是真正的唯一可以明智地開始的地方。 「

2

」業務邏輯侵入用戶界面「...我喜歡這個詞的選擇。

  • 首先,最重要的是,通過單元測試獲得代碼覆蓋率。
  • 之後,請閱讀Martin Fowler的書Refactoring
  • 應用很長的一系列Extract Class重構來形成域圖層。每一個之後,重新運行你的單元測試,以確保你有綠色條。
  • 一旦您對新代碼感到滿意,請刪除舊的內容。
  • 最終,您需要Introduce Controller

當然,棘手的部分將是單元測試用戶界面。您可能必須先在UI本身中執行Extract Method,以便單元測試那裏的邏輯位,然後按照上述步驟操作。

3

該產品有多利潤? 團隊有多大?

這些問題將是您解決問題的出發點。團隊越有利可圖,代碼越快,您可以將代碼重構爲更新的表單。

但是對於大型項目,代碼更改通常會有很大的風險。必須有幾年沒有看到的「正常工作」區域。在這些領域發現錯誤將是一個很大的挑戰。花費一些時間讓你的齒輪旋轉甚至調試這些區域。

我的目的是要詳細研究代碼。當你確信自己知道它很冷時,請向代碼庫中知道的其他人介紹一下。這將指出你認爲你知道但是沒有的下一批代碼。隨着代碼開始進入你的腦海,對你所需要的內容的更清晰更清晰的描述將出現在你的腦海中。然後你準備好制定第一步的計劃。讓它合理,不要太多。

最重要的是,學習和樂趣。只要你有正確的態度,重新開展一個大項目可能會很有趣。