1

我正在尋找關於從Asp.Net WebForms遷移到MVC的策略的一些建議。我公司目前擁有約60個項目中的格式如下解決方案:重構業務/數據邏輯準備將WebForms遷移到MVC的建議

解決方案

  • ProjectA.DataModel
  • ProjectA.Business
  • ProjectA.Web
  • ProjectB.DataModel
  • 項目B .Business
  • ProjectB.Web
  • Fra mework.Core
  • Framework.Common ...等

所有的數據模型是使用數據庫第一(的.edmx)和T4模板實體框架6。數據訪問代碼混合在業務和Web(WebForms)項目之間。代碼庫的有機增長最初是從一個獨立的開發者發展到一個小團隊,這個團隊解釋了SOC方面的一些不好的做法,但是我們想借此機會糾正這個問題。

我想開始轉向一個完整的MVC解決方案,並且首先要做的是確保當前駐留在Web項目中的任何數據訪問邏輯被推送到業務層以獲得關注點分離。研究一個最佳實踐已經使我走向了工作單元和知識庫模式,但是進一步的閱讀似乎認爲這是過度的。

什麼是最好的方法來重構我的業務和數據層與當前的Web窗體模型準備MVC。其次,是向MVC遷移的一種可接受的方法,將視圖引入現有的WebForms解決方案中,以創建一個混合或創建一個新的MVC項目,引用我現有的BAL和DAL,並從頭開始構建應用程序UI?

關於實體框架,一切似乎都朝着CodeFirst的方向發展。如果我們想要採用最佳實踐方法,這是我們需要制定的計劃嗎?

我們目前是一個非常小的團隊,希望嘗試儘可能地重複使用我們現有的項目並儘可能重構以進入開始邁向MVC的位置。

任何想法,我如何開始接近這個讚賞。

謝謝

+1

您可能會感興趣:http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html – Mik378

+0

謝謝Mik378我會帶着通讀該鏈接 – stevenknox

+0

>一切似乎正在走向CodeFirst方法....是的,時間很長。在過去的幾年裏。 Code First是前進的方向。 – trailmax

回答

1

討厭的應用程序,你在那裏。 Anywas,首先要注意的是MVC是一種UI模式。因此,在一個設計正確的應用程序中,從WebForms到Mvc的swtich意味着只需更改UI層。

我要開始向完全的MVC解決方案移動和感覺做的就是確保目前居住在Web項目被推到業務層得到關注點分離的任何數據訪問邏輯的第一件事

不!數據訪問邏輯應該在DAL中(提示:它是一個首字母縮寫),而不是BL,而不是UI。只有持久性。BL和UI會要求DAL通過存儲庫保存/檢索它們的對象。順便說一下,EF只處理db。不要錯誤地在Ef實體之上構建業務對象。一個模型的業務概念和行爲,另一個模型數據庫訪問。它們通常不兼容。在處理除持久性以外的任何事情時,請忽略您擁有數據庫或ORM。

對此的最佳實踐進行研究使我走向了工作單元和存儲庫模式,但進一步閱讀似乎認爲這是過度的。

只有你有一個非常簡單的應用程序,你不關心維護它,它是過度的。我知道很難相信,但可能超過80%(或多或少的隨機數)的開發人員仍然不明白如何正確實施Repository模式,這就是爲什麼它對它們變得無用。簡而言之,回購使用 EF,但它不是建立在它的頂部。回購將業務/用戶對象「轉換」爲EF實體,反之亦然。

回購界面應該從來沒有暴露IQueryable或事實,你在使用數據庫的第一位。所以,沒有通用的存儲庫,也沒有公開EF實體。另外,Bl/UI不應該創建查詢(這意味着他們知道數據如何存儲 - DAL實現細節),這是存儲庫的工作。更高的層只是告訴知識庫他們想要什麼,從來沒有如何來做到這一點。

其次是遷移到MVC帶來的訪問量,以現有的WebForms解決方案來創建一個混合或創建一個新的MVC項目,參考我的現有BAL和DAL,並開始從頭開始構建應用用戶界面的接受的方法?

雖然您可以在同一個項目中混合使用WebForms和Mvc,但最好不要這樣做(減少頭痛)。從頭開始mvc應用程序,然後將Web表單頁面移植到它。

+0

感謝您的詳細回覆。我們將看看使用存儲庫和UOW,並遵循上面提到的一些最佳實踐。到達那裏可能需要更長的時間,但我們也可以藉此機會做對。我們也將通過創建一個新的MVC網站來遷移webforms,並且也是這樣。 – stevenknox

+1

@belfastdev我處於類似的情況。你是如何進步的?我可以閱讀的任何好的參考? – mark1234