我的項(xiàng)目分層如下:DAL (Entity)- > BLL (DTO)- > ApplicationComponent (ViewModel)。將要ApplicationComponent訪問的application()的多個(gè)組件BLL。組件包括Windows服務(wù),Web服務(wù),Web API和MVC控制器。我改造NHibernate Entity的對(duì)象DTO對(duì)象,而從通過他們DAL來BLL。在將此狀態(tài)傳遞給時(shí)ApplicationComponent,BLL再次將其轉(zhuǎn)換為ViewModel。這可以幫助我區(qū)分關(guān)注點(diǎn)以及如何在每一層中處理數(shù)據(jù)。我不贊成NHibernate Entity出于以下原因返回對(duì)象:-數(shù)據(jù)暴露給UI我想要隱藏的(或僅在需要時(shí)暴露),例如密碼,用戶類型,權(quán)限等。在引用/聯(lián)接上,NHibernate在訪問屬性時(shí)執(zhí)行附加查詢,這將使延遲加載的使用無效。暴露給(of Entity)用戶的不必要數(shù)據(jù)會(huì)造成錯(cuò)誤的混淆和漏洞。持久性實(shí)現(xiàn)泄漏到BLL/中UI。Entity不適用于UI。它不能UI在所有情況下都可用。我們?cè)趯傩陨鲜褂脤傩訢TO進(jìn)行用戶輸入驗(yàn)證,看起來有點(diǎn)奇怪Entity。我使用這種方法面臨以下問題:-最大和明顯的問題是具有相似成員和功能的冗余對(duì)象。我必須在每一層中編寫映射器方法以轉(zhuǎn)換對(duì)象??梢酝ㄟ^使用AutoMapper或類似方法將其最小化;但是它不能完全解決問題。問題:-是否過度分離,應(yīng)該避免(至少將其最小化)?如果這種方法是正確的,那么我看不到任何簡(jiǎn)單的方法可以完全繞開我上面提到的兩個(gè)問題。請(qǐng)?zhí)岢鼋ㄗh。如果此方法不正確,請(qǐng)?zhí)岢龈ㄗh。參考文獻(xiàn):Link1建議將Entity對(duì)象轉(zhuǎn)移到視圖,在我看來這不是一個(gè)好主意。Link2建議Entity與DTO我已經(jīng)在做的映射。Link3沒有幫助。Link4建議使用類似自動(dòng)映射器工具的工具,這沒關(guān)系。但是它仍然不能完全解決問題。Link5是很棒的帖子。它解釋了為什么我應(yīng)該同意將它們分開。它沒有評(píng)論如何最大程度地減少由此引起的開銷。Link6不再有用。Link7是這表明使用一個(gè)很好的答案Entity為是UI ,如果可能的。它仍然不適用于我的大多數(shù)項(xiàng)目。Linl8是另一個(gè)極好的資源,建議像我現(xiàn)在所做的那樣以兩種方式進(jìn)行映射。它仍然沒有建議最小化開銷的方法。
2 回答

茅侃侃
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超21個(gè)贊
nhibernate是使您避免擁有DAL實(shí)體的orm之一,它的性能最好避免從BLL到DAL的額外映射,但是如果對(duì)您而言并不重要,則最好將其保持在是將應(yīng)用層松耦合
- 2 回答
- 0 關(guān)注
- 845 瀏覽
添加回答
舉報(bào)
0/150
提交
取消