3 回答

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è)重載。
- 3 回答
- 0 關(guān)注
- 991 瀏覽
添加回答
舉報(bào)