第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

要返回IQueryable <T>還是不返回IQueryable <T>

要返回IQueryable <T>還是不返回IQueryable <T>

HUH函數(shù) 2019-12-10 10:37:22
我有一個存儲庫類,將我的LINQ包裝到SQL數(shù)據(jù)上下文中。存儲庫類是業(yè)務線類,其中包含所有數(shù)據(jù)層邏輯(以及緩存等)。這是我的repo界面的v1。public interface ILocationRepository{    IList<Location> FindAll();    IList<Location> FindForState(State state);    IList<Location> FindForPostCode(string postCode);}但是為了處理FindAll的分頁,我正在辯論是否公開IQueryable <ILocation>而不是IList來簡化諸如分頁之類的接口。從數(shù)據(jù)存儲庫中暴露IQueryable的利弊是什么?很感謝任何形式的幫助。
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

優(yōu)點;可組合性:

  • 來電者可以添加過濾器

  • 呼叫者可以添加分頁

  • 來電者可以添加排序

  • 等等

缺點 不可測試性:

  • 您的存儲庫不再可以進行單元測試。您不能依靠:a:它起作用,b:它做什么

    • 調用者可以添加一個不可翻譯的函數(shù)(即沒有TSQL映射;在運行時中斷)

    • 呼叫者可以添加一個過濾器/排序,使其像狗一樣執(zhí)行

  • 由于調用者期望IQueryable<T>是可組合的,因此它排除了不可組合的實現(xiàn)-或迫使您為其編寫自己的查詢提供程序

  • 這意味著您無法優(yōu)化/分析DAL

為了穩(wěn)定起見,我考慮公開資料庫IQueryable<T>公開Expression<...>資料庫。這意味著我知道存儲庫的行為方式,并且我的上層可以使用模擬,而不必擔心“實際的存儲庫是否支持此操作?” (強制進行集成測試)。

我仍然使用IQueryable<T>內部信息庫-但不下來的邊界。我在這里對這個主題發(fā)表了更多想法。將分頁參數(shù)放在存儲庫接口上同樣容易。您甚至可以使用擴展方法(在接口上)添加可選的分頁參數(shù),以便具體類僅可以實現(xiàn)1種方法,但調用者可以使用2或3個重載。


查看完整回答
反對 回復 2019-12-10
  • 3 回答
  • 0 關注
  • 999 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號