前面已經做了一些准備工作,本篇將介紹查詢條件的封裝,它是規約模式的一個應用。 規約使用一個對象來封裝謂詞,我之前已經介紹過它在驗證方面的應用,本篇是規約模式在查詢方面的應用。 規約的強大之處在於,能夠將一堆雜亂無章的條件判斷或查詢條件封裝起來,以一個清晰的概念來表達,並使得這些謂詞 ...
信息系統的查詢需求千變萬化,在倉儲中為每個查詢需求創建一個特殊方法,將導致大量乏味而臃腫的接口。 一種更加可行的辦法是,在應用層服務中描述查詢需求,並通過倉儲執行查詢。 為了能夠更好的描述查詢需求,可以將查詢功能從倉儲中抽取出來,專門創建一個查詢對象。 查詢最復雜的部分是條件過濾,這也是查詢對象的主要職責。查詢對象可以認為是規約模式的一個變種,允許查詢對象動態創建查詢條件。 在Util.Doma ...
2015-01-20 22:24 4 3038 推薦指數:
前面已經做了一些准備工作,本篇將介紹查詢條件的封裝,它是規約模式的一個應用。 規約使用一個對象來封裝謂詞,我之前已經介紹過它在驗證方面的應用,本篇是規約模式在查詢方面的應用。 規約的強大之處在於,能夠將一堆雜亂無章的條件判斷或查詢條件封裝起來,以一個清晰的概念來表達,並使得這些謂詞 ...
前面介紹了DDD分層架構的實體,並完成了實體層超類型的開發,同時提供了驗證方面的支持。本篇將介紹另一個重要的構造塊——值對象,它是聚合中的主要成分。 如果說你已經在使用DDD分層架構,但你卻從來沒有使用過值對象,這毫不奇怪,因為多年來養成的數據建模思維已經牢牢把你禁錮,以致於你在使用 ...
上一篇介紹了IQueryable的Where方法存在的問題,並擴展了一個名為Filter的過濾方法,它是Where方法的增強版。本篇將介紹查詢的另一個重要主題——分頁與排序。 對於任何一個信息系統,查詢都需要分頁,因為不可能直接返回表中的所有數據。 如果直接使用原始的Ado.Net ...
上面兩篇已經作好准備,本文將進行基礎查詢擴展。當使用了Entity Framework這樣的ORM框架以后,我們查詢的核心被集中在IQueryable的Where方法上。 如果UI需要通過姓名查詢一個客戶,會在UI上放置一個輸入框作為客戶姓名的查詢條件。服務端接收以后通過Where方法 ...
敏捷時代的來臨,迫使微軟.Net技術也在向敏捷方向發展。近幾年,.Net在數據訪問、Web、測試等多個領域大刀闊斧的進行改革,新技術不斷涌現。一方面這是值得慶幸的,讓.Net程序員在開發復雜項目有了更多的選擇,一改往日只能拖控件綁定數據的局面。另一方面,程序員需要大量的學習,並且需要依賴更多 ...
從本篇開始,本系列將進入實戰演練階段。 前面主要介紹了一些應用程序框架的概念和基類,本來想把所有概念介紹完,再把框架內部實現都講完了,再進入實戰,這樣可以讓初學者基礎牢靠。不過我的精力很有限,文章進度越來越慢,所以准備切換一下介紹順序,把實戰演練提前,以方便你閱讀代碼。 實戰演練介紹 ...
對於BS管理系統,我很長一段時間都工作在Asp.Net Web Form上,Web Form的主要優勢是可以使用服務器端控件,以類似CS的開發模式進行工作,通過拖拽控件和定義事件處理函數,極大的簡 ...
上一篇介紹了工作單元層超類型的封裝演化過程,本文將介紹對Entity Framework映射層超類型的封裝。 使用Entity Framework一般需要映射三種類型的對象,即實體、聚合、值對象。 聚合與實體映射的主要區別是:聚合映射單屬性標識Id,並需要映射樂觀離線鎖 ...