2010-08-13 47 views
4

考慮到一個假設的情況,即過去幾年一直存在一箇舊的,遺留的演示庫,並且通過快速更正和缺乏適當的架構監督,逐漸將更多的業務邏輯編入其中。或者,考慮一個業務類或命名空間,它不是通過彙編邊界與演示分離,因此能夠引用諸如System.Windows.Forms之類的東西,而不必強制添加引用(比簡單的使用子句更加清醒的操作) 。處理混合業務和表示代碼的最佳方法?

在這樣的情況下,它不是不可想象的,通過這個UI代碼中使用的業務代碼最終會在重複使用被調用。爲了實現這個目的,重構這兩層的好方法是什麼?

我對設計模式非常熟悉 - 至少在原則上反正。但是,我沒有一整套實踐經驗,所以我對自己的直覺有點不確定。我已經開始沿着使用策略模式的道路。這個想法是確定業務邏輯調用UI組件的位置,以向用戶提出問題並收集數據,然後將這些數據封裝到一組接口中。該接口上的每個方法都將包含來自原始工作流的面向UI的代碼,然後UI類將實現該接口。

想要重用有問題的業務邏輯也將實現這個接口,但是替代無論是新窗口或可能的pre-fab或參數回答最初由UI組件回答這些問題的新代碼。這樣,biz邏輯可以被視爲一個真正的庫,雖然有些尷尬的接口參數傳遞給它的一些方法。

這是一個體面的方法嗎?我應該如何更好地處理這個問題?我會順從你的集體互聯網智慧。

謝謝!

+0

謝謝你讓我今天學習一個新詞。我仍然不確定我是否知道混合的含義,但是我將立即開始使用它! – 2010-08-13 20:02:27

+0

是您的基本問題「我如何從UI中存在的一堆業務邏輯創建業務邏輯層?」 ? – 2010-08-13 20:04:59

+0

我對融合的印象是把兩件事合併爲一,通常帶有錯誤/否定的基調。很高興你喜歡我的文辭!但是,是的,基本問題並不是真正的「如何製作三層」,而是從實際的角度來看,「我該如何解決這個問題」。 – bwerks 2010-08-13 20:49:16

回答

2

你似乎都採取了一種很好的方法,其中你打破混凝土構件之間的依賴關係在你的設計,而不是依賴於抽象(接口)。當你打破這樣的依賴關係時,你應該立即開始使用單元測試來覆蓋你的遺留代碼庫,並通過更好的保證來改進設計。

我發現這本書Working Effectively with Legacy Code是在這些情況下非常寶貴的。另外,不要在沒有首先查看面向對象設計原則的情況下跳入模式,如SOLID原則。他們經常指導您選擇有關係統演變的模式和決策。

+0

我習慣於在.NET3.5 +環境中工作,其中Moq作爲單元測試資源提供。這個代碼庫是基於C#2.0/.NET3.0的,然而,Moq並不存在那麼久。我以前曾嘗試過犀牛,但它的功能強大得可能......我真的很討厭它。還有其他的選擇嗎? – bwerks 2010-08-13 21:22:28

+0

此外,還可獲得+1優秀書籍/閱讀推薦。謝謝! – bwerks 2010-08-13 21:31:44

+1

@bwerks:對不起,在這個時候,我沒有任何建議來建立一個好的模擬框架。看起來像一個SO的問題。 – 2010-08-23 16:13:34

3

我謙恭地建議Model–View–Controller - MVC有很高的概率作爲一個成功的解決您的問題。它按照您的描述分離各種邏輯。

alt text

HTH

+0

不幸的是,這個特殊的組件起源於MVC;不幸的是,最終的結果是,視圖中出現了一噸的biz邏輯,並且該模型充滿了在處理過程中用於正確/不使用MessageBox的過程。如果你得到我的語法漂移,而不是M,V,C,那麼它就是M/V/C。 – bwerks 2010-08-13 21:35:45

1

我會被明確確定的實體,他們可以做或者可以做他們的行動接近它。然後逐一嘗試開始創建獨立的業務邏輯對象,以便將這些邏輯重構爲UI以外的UI,從而調用BL對象。

在這一點上,如果我理解您的方案正確,你將有一個滿手BL的對象,有些部分是使其贏得形成電話,贏形成接聽的話需要被提升出到UI層。

然後,正如JustBoo所說,我認爲您將有足夠明確的情況開始從您的BL和UI中抽象出控制器,並使其在MVC設計中全部發揮作用。

+0

Jimmy Hoffa呵呵?吉米,你在哪裏?這不是在體育場下,這是肯定的。 :-D – JustBoo 2010-08-13 20:16:12

0

好的,考慮到您的各種意見,我會接受霍法先生的建議並予以延伸。我相信你們聽到的難題應該被分解成更小的工作單位,直到他們能夠被「征服」。

使用該技術,加上方法Refactoring可以解決您的問題。網上有一本書和大量的信息。你現在有一個鏈接。該頁面包含大量的信息鏈接。

該書的author還有一個鏈接。

所以,你一步一步緩慢但肯定地重構MVC的奶油善良。

HTH

相關問題