DTO與Entity的區(qū)別
數(shù)據(jù)傳輸對象DTO是面向?qū)ο蟮?,實體Entity 是面向關(guān)系數(shù)據(jù)庫的。
如果你認(rèn)為dto沒有必要,難道你做數(shù)據(jù)庫的時候,表與頁面的展示是一摸一樣的嗎?不太現(xiàn)實吧。
DTO一般是個“扁平類”,也就是沒有關(guān)聯(lián)屬性,都是普通類型屬性,再說的直白一些,DTO的類內(nèi)沒有其他的類的作為DTO類的成員變量或?qū)傩浴?/span>
EO:?Entity Object?就是EF中的實體類, 對EO的操作會對數(shù)據(jù)庫產(chǎn)生影響。
DTO:?Data Transfer Object?數(shù)據(jù)傳輸對象。用于在各層之間傳遞數(shù)據(jù)的普通類,DTO有哪些屬性取決于其他層要什么數(shù)據(jù)。DTO一般是個“扁平類”,也就是沒有關(guān)聯(lián)屬性,都是普通類型屬性,再說的直白一些,DTO的類內(nèi)沒有其他的類的作為DTO類的成員變量或?qū)傩?/span>。
在一些復(fù)雜的項目中,數(shù)據(jù)庫訪問層和業(yè)務(wù)邏輯層直接傳遞用一個DTO類,UI層和BLL層之間用一個新的DTO類。簡單的項目公用同一個DTO。DTO類似于三層架構(gòu)中的Model。
ViewModel:視圖模型,用來組合來自其他層的數(shù)據(jù)顯示到UI層。簡單的數(shù)據(jù)可能可以直接把DTO交給界面顯示,一些看負(fù)載的數(shù)據(jù)可以要從新轉(zhuǎn)換為ViewModel對象
在一個多層架構(gòu)的項目中,例如一個ASP.NET三層架構(gòu)項目:DAL,BLL,DTO,UI。UI,DAL,BLL都要引用DTO,BLL引用DAL,EF中所有的代碼都定義到DAL中,BLL中之訪問DTO、BLL中不要引用DAL中EF相關(guān)的類,不要在BLL中執(zhí)行Include等操作,所有數(shù)據(jù)的準(zhǔn)備工作都在DAL中完成。

騰訊課堂

