2012-01-26 155 views
0

我幾個月來一直在研究一個大的ASP.NET MVC 3應用程序。直到項目後期,我才意識到我的控制器很大!這些控制器巨大的部分問題是我無法對它們進行單元測試。組織ASP.NET MVC解決方案

我,因爲分裂已經控制器的責任分爲四個任務(在我心中):

  • 導航
  • 轉換ID的數據對象
  • 顯示
  • 一般建築視圖模型專用業務邏輯

由於某些業務邏輯是跨客戶端和服務器端代碼共享的,將它與視圖模型構建器邏輯混合是沒有意義的。所以,我立即看到至少需要兩個項目:查看模型構建器和通用業務邏輯。

我意識到導航應該是控制器的責任,以便邏輯保留在MVC項目中。

我有點遺憾應該由哪個項目將ID轉換爲數據對象。最初,我將這作爲業務類/視圖模型構建器類的職責。不過,我想我希望這些類能夠完全構建對象。所以,我不確定應該在代碼中進行這種轉換。這似乎並不關乎我在哪裏做轉換,代碼變得重複。我一直在考慮在執行這些轉換的相應項目中創建適配器,然後調用實際的業務類/視圖模型構建器類。

  • 有沒有人在超越單個項目的ASP.NET MVC項目中工作?
  • 邏輯如何分解以保持控制器的大小並保持代碼可測試?

回答

1
  • 有沒有人在這已經超越單個項目的ASP.NET MVC項目的工作?

是。

  • 如何邏輯爆發,以保持控制器下來的大小,並保持代碼的可測試?

通過putting controllers on a diet

+0

我喜歡使用ModelBinders將鍵轉換爲對象的討論。我認爲當邏輯變得更復雜時,使用AutoMapper會開始崩潰。爲此,我正在考慮創建視圖模型構建器。當POST處理程序的邏輯開始變得更復雜時,此演示中使用的IHandler類開始變得與原始控制器一樣討厭。令人討厭的業務驗證邏輯還涉及更新ModelState。 –

+0

這個演示的一個好處是它確認了我的最新方法正朝着正確的方向發展。我的控制器大部分操作都只有幾行。我使用了很多ActionFilters,Ninject和業務邏輯層來減少我的動作大小。似乎我觀察到了同樣的重複主題。耶,我並不孤單! –

+0

鏈接的視頻不再存在。 –