摘要:
上一篇對Lambda表達式公共操作類進行了一些增強,本篇使用擴展方法對Lambda表達式進行擴展。 修改Util項目的Extensions.Expression.cs文件,代碼如下。using System;using System.Linq;using System.Linq.Express...
閱讀全文
posted @ 2015-01-06 18:32
何鎮汐
閱讀(1883)
推薦(7)
摘要:
前面介紹了查詢的基礎擴展,下面準備給大家介紹一些有用的查詢封裝手法,比如對日期范圍查詢,數值范圍查詢的封裝等,為了支持這些功能,需要增強公共操作類。 Lambda表達式公共操作類,我在前面已經簡單介紹過,要么從Lambda表達式中獲取信息,要么動態創建Lambda表達式,本篇直接貼代碼,如果發...
閱讀全文
posted @ 2015-01-06 18:09
何鎮汐
閱讀(2202)
推薦(4)
摘要:
上一篇介紹了IQueryable的Where方法存在的問題,并擴展了一個名為Filter的過濾方法,它是Where方法的增強版。本篇將介紹查詢的另一個重要主題——分頁與排序。 對于任何一個信息系統,查詢都需要分頁,因為不可能直接返回表中的所有數據。 如果直接使用原始的Ado.Net,我們可以...
閱讀全文
posted @ 2015-01-03 21:08
何鎮汐
閱讀(3784)
推薦(5)
摘要:
上面兩篇已經作好準備,本文將進行基礎查詢擴展。當使用了Entity Framework這樣的ORM框架以后,我們查詢的核心被集中在IQueryable的Where方法上。 如果UI需要通過姓名查詢一個客戶,會在UI上放置一個輸入框作為客戶姓名的查詢條件。服務端接收以后通過Where方法進行過濾...
閱讀全文
posted @ 2014-12-25 13:25
何鎮汐
閱讀(4327)
推薦(12)
摘要:
前一篇擴展了兩個常用驗證方法,本文將封裝兩個Lambda表達式操作,用來為下一篇的查詢擴展服務。 Lambda表達式是一種簡潔的匿名函數語法,可以用它將方法作為委托參數傳遞。在Linq中,大量使用Lambda表達式進行查詢,不過這種Lambda表達式被Expression包裝成表達式樹。表達式...
閱讀全文
posted @ 2014-12-24 13:54
何鎮汐
閱讀(3176)
推薦(9)
摘要:
前面介紹了倉儲的基本操作,下面準備開始擴展查詢,在擴展查詢之前,首先要增加兩個公共操作類,一個是經常要用到的驗證方法,另一個是Lambda表達式的操作類。 很多時候,我們會判斷一個對象是否為null,由于null是一個不能接受的值,它會導致“未將對象引用設置到對象的實例”的嚴重錯誤,所以當檢測...
閱讀全文
posted @ 2014-12-22 23:57
何鎮汐
閱讀(3573)
推薦(7)
摘要:
前一篇介紹了倉儲的基本概念,并談了我對倉儲的一些認識,本文將實現倉儲的基本功能。 倉儲代表聚合在內存中的集合,所以倉儲的接口需要模擬得像一個集合。倉儲中有很多操作都是可以通用的,可以把這部分操作抽取到基類中。 在Util.Domains項目中創建一個文件夾Repositories,這個文件夾...
閱讀全文
posted @ 2014-12-17 17:00
何鎮汐
閱讀(6061)
推薦(13)
摘要:
前面已經介紹過Entity Framework的工作單元和映射層超類型的封裝,從本文開始,將逐步介紹倉儲以及對查詢的擴展支持。 什么是倉儲 倉儲表示聚合的集合。 倉儲所表現出來的集合外觀,僅僅是一種模擬,除了測試以外,沒有理由使用內存中真正的...
閱讀全文
posted @ 2014-12-12 11:59
何鎮汐
閱讀(5857)
推薦(18)
摘要:
上一篇介紹了工作單元層超類型的封裝演化過程,本文將介紹對Entity Framework映射層超類型的封裝。 使用Entity Framework一般需要映射三種類型的對象,即實體、聚合、值對象。 聚合與實體映射的主要區別是:聚合映射單屬性標識Id,并需要映射樂觀離線鎖Version,而實體...
閱讀全文
posted @ 2014-12-08 18:55
何鎮汐
閱讀(3805)
推薦(7)
摘要:
上一篇介紹了DDD聚合以及與并發相關的各種鎖機制,本文將介紹另一個核心元素——工作單元,它是實現倉儲的基礎。 什么是工作單元 維護受業務事務影響的對象列表,并協調變化的寫入和并發問題的解決。 這是《企業應用架構模式》中給出的定義,不過看上去有...
閱讀全文
posted @ 2014-12-06 21:10
何鎮汐
閱讀(4942)
推薦(11)
摘要:
前面已經介紹了DDD分層架構的實體和值對象,本文將介紹聚合以及與其高度相關的并發主題。 我在之前已經說過,初學者第一步需要將業務邏輯盡量放到實體或值對象中,給實體“充血”,這樣可以讓業務邏輯高度內聚,并為你提供業務邏輯的唯一訪問點。而聚合則是第二步,它將多個相關業務概念包裝到單一的概念中,從而...
閱讀全文
posted @ 2014-12-04 04:10
何鎮汐
閱讀(9138)
推薦(30)
摘要:
上一篇介紹了值對象的基本概念,得到了一些朋友的支持,另外也有一些朋友提出了不同意見。這其實是很自然的事情,設計本來就充滿了各種可能性,沒有絕對正確的做法,只有更好的實踐。但是設計與實踐的好與壞,對于不同的人,以及處于不同的環境都有不同的詮釋,這是一個仁者見仁,智者見智的問題。DDD非常抽象,以至...
閱讀全文
posted @ 2014-11-27 19:33
何鎮汐
閱讀(5346)
推薦(9)
摘要:
前面介紹了DDD分層架構的實體,并完成了實體層超類型的開發,同時提供了驗證方面的支持。本篇將介紹另一個重要的構造塊——值對象,它是聚合中的主要成分。 如果說你已經在使用DDD分層架構,但你卻從來沒有使用過值對象,這毫不奇怪,因為多年來養成的數據建模思維已經牢牢把你禁錮,以致于你在使用面向對象方...
閱讀全文
posted @ 2014-11-25 20:26
何鎮汐
閱讀(7962)
推薦(17)
摘要:
在應用程序框架實戰十四:DDD分層架構之領域實體(基礎篇)一文中,我介紹了領域實體的基礎,包括標識、相等性比較、輸出實體狀態等。本文將介紹領域實體的一個核心內容——驗證,它是應用程序健壯性的基石。為了完成領域實體的驗證,我們在前面已經準備好了驗證公共操作類和異常公共操作類。 .Net提供的Da...
閱讀全文
posted @ 2014-11-20 23:43
何鎮汐
閱讀(8978)
推薦(29)
摘要:
任何系統都需要處理錯誤,本文介紹的異常公共操作類,用于對業務上的錯誤進行簡單支持。 對于剛剛接觸.Net的新手,碰到錯誤的時候,一般喜歡通過返回bool值的方式指示是否執行成功。public bool 方法名() { //執行代碼,成功返回true,否則返回false} 不過上面的方法...
閱讀全文
posted @ 2014-11-19 11:52
何鎮汐
閱讀(5756)
推薦(12)
摘要:
為了能夠驗證領域實體,需要一個驗證公共操作類來提供支持。由于我將使用企業庫(Enterprise Library)的驗證組件來完成這項任務,所以本文也將演示對第三方框架的封裝要點。 .Net提供了一個稱為DataAnnotations的驗證技術,即在對象的屬性上添加一些Attribute,比如...
閱讀全文
posted @ 2014-11-18 23:22
何鎮汐
閱讀(6124)
推薦(15)
摘要:
上一篇,我介紹了自己在DDD分層架構方面的一些感想,本文開始介紹領域層的實體,代碼主要參考自《領域驅動設計C#2008實現》,另外參考了網上找到的一些示例代碼。什么是實體 由標識來區分的對象稱為實體。 實體的定義隱藏了幾個信息:兩個實體對象,只要它們的標識屬性值相等,哪怕標識屬性以外的所有屬...
閱讀全文
posted @ 2014-11-17 18:54
何鎮汐
閱讀(9570)
推薦(19)
摘要:
前面介紹了應用程序框架的一個重要組成部分——公共操作類,并提供了一個數據類型轉換公共操作類作為示例進行演示。下面準備介紹應用程序框架的另一個重要組成部分,即體系架構支持。你不一定要使用DDD這樣的架構,使用單層架構和普通三層架構一樣可以,不過你如果希望獲得更進一步的復用性和封裝度,使用更加面向對...
閱讀全文
posted @ 2014-11-14 20:25
何鎮汐
閱讀(13958)
推薦(29)
摘要:
上一篇以TDD方式介紹了數據類型轉換公共操作類的開發,并提供了單元測試和實現代碼,本文將演示通過擴展方法來增強公共操作類,以便調用時更加簡化。 下面以字符串轉換為List為例進行討論。string input = "83B0233C-A24F-49FD-8083-1337209EBC9A,EA...
閱讀全文
posted @ 2014-11-13 14:01
何鎮汐
閱讀(5479)
推薦(11)
摘要:
上一篇介紹了數據類型轉換的一些情況,可以看出,如果不進行封裝,有可能導致比較混亂的代碼。本文通過TDD方式把數據類型轉換公共操作類開發出來,并提供源碼下載。 我們在 應用程序框架實戰十一:創建VS解決方案與程序集 一文已經創建了解決方案,包含一個類庫項目和一個單元測試項目。單元測試將使用.Ne...
閱讀全文
posted @ 2014-11-12 17:28
何鎮汐
閱讀(6872)
推薦(15)
摘要:
本系列文章將介紹一些對初學者有幫助的輔助類,這些輔助類本身并沒有什么稀奇之處,如何能發現需要封裝它們可能更加重要,所謂授之以魚不如授之以漁,掌握封裝公共操作類的技巧才是關鍵,我會詳細說明創建這些類的動機和思考過程,以幫助初學者發現和封裝自己需要的東西。創建公共操作類的技巧,大家可以參考我的這篇文...
閱讀全文
posted @ 2014-11-11 18:28
何鎮汐
閱讀(7332)
推薦(15)
摘要:
本文專門為初學者而寫,因為很多初學者可能還不了解公共操作類的作用和封裝技巧,大部分有經驗的程序員都會把自己所碰到的技術問題整理封裝成類,這就是公共操作類。公共操作類往往具有一些通用性,也可能專門解決某些棘手問題。公共操作類是應用程序框架的核心,主要目標是解決大部分技術問題。我將在本文介紹封裝公共...
閱讀全文
posted @ 2014-11-10 05:11
何鎮汐
閱讀(8171)
推薦(27)
摘要:
上一篇,介紹了開發環境需要的工具和版本,本篇將動手創建VS解決方案。 對于本系列文章提供的示例,我想通過兩種途徑來演示,一種是單元測試,另外為了能更直觀的看到效果,還會提供一個用戶界面來展示。為了不分散注意力,前期只提供非常簡陋的原始界面,后期如果有時間的話,我想使用MVC +某個RIA框架+...
閱讀全文
posted @ 2014-11-09 04:30
何鎮汐
閱讀(6556)
推薦(11)
摘要:
前面幾篇已經把廢話基本說完了,現在準備進入實戰階段。 第一步是把開發環境準備好,下面是本系列所使用的開發工具及其版本。為了避免你無法順利打開本系列提供的下載示例,建議你最好跟我使用的版本相同。 Visual Studio2013 ReSharpe最新版本,目前版本是8.2.2 ReSha...
閱讀全文
posted @ 2014-11-08 13:56
何鎮汐
閱讀(8043)
推薦(34)
摘要:
使用應用程序框架來開發項目,從軟件項目的角度來看,可以獲得更快的開發進度,更好的代碼質量、復用性、擴展性、可維護性等好處。但如果換個角度思考,也會發現其它一些問題。 首先,軟件開發是以人為本的,應用程序框架是某個人或某幾個人大腦中知識結構的具體表現,所以應用程序框架高度依賴它的創建人,框架越強...
閱讀全文
posted @ 2014-11-07 15:42
何鎮汐
閱讀(5201)
推薦(7)
摘要:
分層架構根據相關職責將應用程序模塊切割為多個層次,那么應用程序框架本身還要不要進行層次劃分?隨著對應用程序框架的理解加深,以及項目復雜度的提升,為應用程序框架分層就顯得很有必要,它將影響你如何創建VS解決方案。 在剛開始建立應用程序框架時,你首先會想到的是把技術方面的東西抽取出來,放到專門的文...
閱讀全文
posted @ 2014-11-06 22:52
何鎮汐
閱讀(6603)
推薦(24)
摘要:
建立應用程序框架,首先要考慮的問題是,你準備采用哪種分層架構,然后根據應用程序框架的邏輯層次來確定需要創建的VS解決方案和程序集。 如果項目很小,需求很簡單,時間異常緊迫,且你手上沒有任何積累,那么,單層架構將是首選,最簡單的單層架構如下圖所示(為了集中你的注意力,我把不相關的文件都刪除了)。...
閱讀全文
posted @ 2014-11-05 22:03
何鎮汐
閱讀(9589)
推薦(30)
摘要:
之前說過,.Net Framework為所有.Net程序員提供底層支持,第三方開源框架建立在.Net Framework的基礎上,專門解決某些特定問題,而應用程序框架則建立在.Net Framework和第三方框架的基礎上,為項目開發的方方面面保駕護航。它們的作用雖然都是幫助程序員更好的建立應用...
閱讀全文
posted @ 2014-11-04 01:30
何鎮汐
閱讀(6762)
推薦(16)
摘要:
應用程序框架是用來支持應用程序開發的,它就好像一個保姆,在開發的每一個細節對程序員呵護倍至。那么,應用程序框架應該包含哪些內容呢?原則上來說,只要期望能夠復用的所有東西,都可以進入你的框架。 開發新手與經驗豐富的老手,其中一個重要的區別在于復用代碼的方式不同。開發新手喜歡復制粘貼,而老手則更傾...
閱讀全文
posted @ 2014-11-03 13:08
何鎮汐
閱讀(7623)
推薦(15)
摘要:
如果沒有什么好處,不會有人愿意去做,那么,你真的需要應用程序框架嗎,它能為你帶來什么好處?應用程序框架為你提供現成的開發環境 現在來了一個項目,你可以直接打開VS,然后就開工敲代碼嗎?不行,你得先創建項目,當使用了分層架構,還需要創建更多的項目,這些項目根據依賴關系進行配置。然后依次引用各種依賴組...
閱讀全文
posted @ 2014-10-30 14:06
何鎮汐
閱讀(6891)
推薦(8)
摘要:
什么是應用程序框架?正如框架是架構的具體實現一樣,應用程序框架是應用程序架構的具體實現。不過這樣說了等于沒說,因為框架和架構都是如此抽象。為了獲得直觀的感受,下面先看看更具體的.Net Framework和第三方框架。 .Net Framework為.Net程序員提供了一個龐大的類庫,幾乎任何...
閱讀全文
posted @ 2014-10-30 09:07
何鎮汐
閱讀(10454)
推薦(14)
摘要:
大約10年前,我剛剛步入.Net開發,那時候還很流行單層架構,直接在界面上拖控件,然后綁定數據。數據庫操作使用原生的Ado.Net,每次都要創建數據庫連接,打開連接,發送Sql,獲取結果、關閉連接。每當我需要進行數據庫操作的時候,就把這一段復制粘貼過去,就這樣干了幾個月。 一日,一位師兄給我介...
閱讀全文
posted @ 2014-10-29 17:16
何鎮汐
閱讀(6899)
推薦(9)
摘要:
敏捷時代的來臨,迫使微軟.Net技術也在向敏捷方向發展。近幾年,.Net在數據訪問、Web、測試等多個領域大刀闊斧的進行改革,新技術不斷涌現。一方面這是值得慶幸的,讓.Net程序員在開發復雜項目有了更多的選擇,一改往日只能拖控件綁定數據的局面。另一方面,程序員需要大量的學習,并且需要依賴更多的第...
閱讀全文
posted @ 2014-10-29 15:02
何鎮汐
閱讀(7551)
推薦(15)