2009-12-28 39 views
3

我的asp.net控制器操作將FormCollection作爲參數。想將所有的業務邏輯移動到BLL層,但需要通過formcollection,是乾淨的嗎?

我然後依次通過我自己的收藏,做一個查找的形式集合中的值等

我提出我的所有代碼到我的商業邏輯層,並調用我的商業邏輯層在我的動作像:

SomeManager.Update(formCollection); 

但我感覺有點疲憊,將表單收集傳遞給我的業務邏輯層。

我真的有一個選擇嗎?任何其他想法?

還是很好?

回答

8

您的業務邏輯層實際上是您的域模型,並且域模型應該以與技術無關的方式表示;即不依賴任何特定的技術,例如ASP.NET MVC,WPF,WCF,EF,NHibernate或其他。

這是最好的,如果你可以表達你的域模型爲波蘇斯(普通老式CLR對象),但是,因爲你已經懷疑,這排除FormCollections等ASP.NET MVC的具體類型。

如果您能夠將Update方法表示爲將域對象列表作爲輸入的方法,那將會更好。

這意味着您需要將FormCollection轉換爲強類型的域對象,然後再將它傳遞給更新方法。你需要一個Mapper來做到這一點。您可以編寫自己的自定義映射器或使用AutoMapper

+0

我已經有我使用的形式更新強類型集合,我只是通過形式收集和循環更新對象,然後傳遞給BLL來更新數據庫。 – mrblah 2009-12-28 21:39:17

+0

而不是使用表單集合,爲什麼不使用自定義視圖模型?這樣內置的模型綁定器將爲您執行映射。 – 2009-12-29 11:30:43

3

經驗法則是,您不應在業務層或更低層中引用System.Web.XXX中的任何內容。在這種情況下,您可以使用自定義模型綁定器來避免使用FormCollection。

有關創建模型活頁夾的更多信息,請參閱this post

0

爲什麼不創建某種dto(數據傳輸對象),然後填充,然後通過它。它會更清潔一些。

0

我會創建一個映射器類,它接受一個FormCollection並返回一個實例或一個類的更新實例。

ManagerMapper.Create(的FormCollection) 或 ManagerMapper.Update(SomeManager,的FormCollection)