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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

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

3 回答

?
慕村225694

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

  • 來(lái)電者可以添加過(guò)濾器

  • 呼叫者可以添加分頁(yè)

  • 來(lái)電者可以添加排序

  • 等等

缺點(diǎn) 不可測(cè)試性:

  • 您的存儲(chǔ)庫(kù)不再可以進(jìn)行單元測(cè)試。您不能依靠:a:它起作用,b:它做什么;

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

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

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

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

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

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


查看完整回答
反對(duì) 回復(fù) 2019-12-10
  • 3 回答
  • 0 關(guān)注
  • 991 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)