我對這個整體設計概念很陌生,在過去幾周的閱讀中,我收集了很多信息,但看起來很分散,並且很矛盾。條款是混合的,我只是很難包圍我的頭腦。MVC3應用程序/服務層/存儲庫層/ POCO類/ EF4 - 問題!
我使用的圖案是這樣的,並假定流量如下:
MVC應用
控制器(S)處理對於給定的視圖的請求/從客戶端的響應。在控制器操作方法內部,他們聯繫服務(服務層)並請求對象構建視圖模型,並將視圖模型中的對象發回。
查看模型
我正在使用強類型視圖模型來往和從意見。
是查看模型DTO的?它們是否應該包含像Name,AddressLine1,Address City等簡單屬性,或者它們是否應該包含複雜屬性,多個對象等。
是視圖模型中的驗證。如果是這樣的話,它會驗證像是必需的字段,字段長度等。然後驗證像用戶名已經存在,或者你需要與服務層中的其他對象交互的地方?
視圖模型只能包含從EF返回的POCO類,還是應該使用AutoMapper?
如果使用AutoMapper和DTO,是DTO的POCO類的克隆嗎?
你會映射控制器,視圖模型還是映射到下面的服務層?
服務
對我來說,服務(S)是存放庫聯繫(一個或多個),以獲得POCO對象從EF後面的對象。這是我所有的商業邏輯。一旦服務將一個對象交給一個存儲庫並保存到EF中,它們就被認爲是有效的對象。它是否正確?
庫
有一個在他們沒有業務邏輯,它們只是用來服務(S)和EF之間傳輸對象。它是否正確?我正在使用通用存儲庫實現Interfaces。那麼你可以擴展通用存儲庫以滿足特殊需求?
關於術語的問題
1)業務對象是否等於域對象?一個域對象包含多少邏輯?
2)域模型是EF模型嗎?我正在使用Model-First方法。
3)依賴注入 - 我應該使用它嗎?我明白它是如何工作的,只是沒有得到真正的好處。我在和Ninject玩。
我認爲社區會從包含代碼示例的所有最佳實踐的某種wiki中受益。那裏有那種東西嗎?很多樣本都非常簡單,許多微軟樣本即使在聲稱時也不會使用這種樣式。
在此先感謝大家誰已經並將幫助我與此。
順便說一句 - 我認爲StackOverflow上需要一點點,「我買啤酒」按鈕旁邊的「接受答案」複選框:)
arin - 如果使用AutoMapper和DTO,是DTO的POCO類的克隆嗎?我的意思是,如果說我有一個觀點,即要顯示一個客戶的基本信息與地址和訂單的集合,我會假設查看模型將具有客戶的基本屬性,然後是一組地址和命令。那些集合是POCO對象的屬性,還是我需要在MVC應用程序中構建一個類,以模仿POCO中的順序和地址類並將其用於視圖模型中的類? – Sam
@Darin - 使用模型優先方法使用POCO生成的EF類生成的類,或者先關閉代碼優先的方法? POCO課程非常簡單。看看這裏:http://www.striano.net/Customer.vb.txt,這是污染了嗎? – Sam
@Sam,如果您需要一個視圖來顯示客戶的基本信息和地址和訂單的集合,那麼您將構建一個CustomerViewModel,該CustomerViewModel將包含基本屬性和一個AddressViewModel和一個OrderViewModel,屬性,你想顯示給定的客戶有關他的地址和訂單,然後'CustomerViewModel'可以有'AddressViewModel'和'OrderViewModel'兩個集合屬性。 –