前面的大量的篇幅已經講述了,關於系統的配置及如何使用平臺提供的相關開發工具來進行應用功能模塊的開發,本篇將會開始講述數據訪問層中的相關設計與如何使用數據庫
AgileEAS.NET代碼生成器生成的DAL層基礎之上,進行相關的開發及開發過程當中的一些限制。下面咱們將會開始詳細的闡述AgileEAS.NET平臺中的關於DAL層的相關設計的工具
原理和思路,及相關的實現方案。開發工具
上面是給出ORM的一個模型圖,AgileEAS.NET的ORM實現機制是經過數據模型來完成實體與數據庫表的映射,固然可能你們能夠理解爲經過XML的模型來生成數據庫測試
表與實體之間的映射關係。網站
可是其實AgileEAS.NET平臺的真正的映射是經過特性+反射的形式來定義的:spa
經過特性+反射來定義數據庫數據列與實體屬性之間的關係映射,具體的特性定義以下:.net
一、表特性映射定義:設計
二、列映射定義:3d
三、咱們看完了ORM之間映射是經過特性來完成的,下面咱們來分析下每一個實體的基類「DataEntity<T>」的相關定義和說明:orm
這樣咱們就分析完畢該基礎實體類提供的相關持久化方法,那麼咱們在業務邏輯層或者UI層開發或者使用實體時咱們就能夠直接使用其中提供的方法,而不用咱們本身去
書寫,這極大的提升了咱們的開發效率和速度,而且提升了可維護性等。
一、主要是講述DAL層中的屬性列的使用和定義說明
二、基於現有代碼如何添加其餘功能。
三、如何使用該DAL層,供其餘層來使用。
上面咱們講述了關於本平臺中ORM的實現方案和思路,本節將會開始講述其中屬性的定義方式和內部的實現原理分析:
一、咱們先來看看每一個屬性列的定義:
二、查看基類「DataEntity<T>」中的相關GetValue方法的定義:
三、查看基類「BaseDataEntity」中的相關方法定義:
四、經過上面的相關定義咱們能夠知道內部的使用,不是字典就是Hashtable,通常來講推薦HashTable 的實現方式,你們實際的測試過程會發現hashtable的效率是最
高的,可是可能使用起來會有點麻煩。
下面咱們就來基於現有的實體的相關定義之上,好比我如今向定義一個獲取最大ID的方法,咱們設計數據庫主鍵列的時候,咱們推薦使
用一個與業務無關的ID而且非自增的列來定義主鍵,這樣能夠防止刪除一個數據以後,依賴性也同步刪除或未同步刪除的狀況。
五、咱們看看Generat文件夾外的分部類的形式吧,咱們這裏已藥品字典「Dm_dict」爲例:
六、下面咱們來爲該類添加一個獲取最大流水號的方法GetMaxID():
這樣咱們就知道了,如何在實體的內部定義一些實體內部自己的方法,下面咱們來看看如何在業務層BLL來使用DAL層以及UI層如何直接使用DAL層等。
通常來講使用DAL層的方式無非有以下幾種:
一、經過工廠來建立。
二、IOC容器動態反射建立。
三、new對象實例。
系統自己並無提供這樣的工廠類或者是泛型方法等,咱們能夠在這裏提供一個抽象的泛型方法來動態的建立對象,固然其實也是比較簡單和容易的。
這樣就能夠完成一個通用的比較簡單的工廠類。
或者經過以下工廠:
還有其餘形式的工廠的變種,我這裏就不同列出了。咱們這裏採用的方式之間是經過new對象實例的形式來建立一個對象實例,固然可能耦合性過高,我這裏並無使
用工廠模式,可是我會考慮後續經過重構來完成工廠模式的使用。
1、BLL層使用DAL層:
(1)、添加引用:
(2)、分析Bll層中的相關寫法
(3)、具體的BLL類中如何使用DAL層中的類而且使用類中提供的相關方法:
四、非LINQ形式的查詢形式:
五、其餘的關於實體自己的內部方法的使用,也是如此,我相信你們一使用就能觸類旁通。
2、UI層的調用。
通常來講都不推薦UI層之間調用DAL層中的方法,通常把這些方法放在Bll層,UI層只是調用Bll層中的方法,可是也有一些比較特殊的內容,例如,咱們須要斷定指定條
件的對象是否存在或者一些界面相關的驗證等,咱們可能就須要新建一個對象實例,這時候推薦使用工廠方法。
通常的調用形式就是如此。固然若是咱們把一些持久化的操做放在業務層來作,那麼界面層的就不會出現DAL層中的關於實體的直接調用了,固然我這裏仍是演示下如何
在界面層調用DAL層中一些特殊的方法。
基本上其餘的方法使用的形式也是相同的,我想你們對這個應該都是比較容易理解的吧。
本篇也是講述了AgileEAS.NET平臺的DAL層的相關設計與分析,說明了ORM的實現方式和原理的簡單分析,固然有些內容分析的還不全面,或者還有盲點,還請你們指
出,後續我會更詳細的說明和闡述。因爲本人水平有限,可能寫出來的東西還條例不是特別的清楚,還請你們批評指出。
若是您在使用AgileEAS.NET開發平臺中有什麼問題,請使用以下幾種聯繫方式或者溝通方式。
一、郵箱方式:
魏瓊東: mail.james@qq.com 手機:18629261335 博客:http://eastjade.cnblogs.com/
殷長波:549558408@qq.com 博客: http://www.cnblogs.com/onmyway/
何戈洲:hegezhou_hot@163.com 博客:http://www.cnblogs.com/hegezhou_hot/
二、QQ交流羣:
AgileEAS.NET平臺交流羣:120661978(超級羣)[新建] AgileEAS.NET平臺交流羣:125643764(高級羣)[新建] AgileEAS.NET平臺交流羣:147168308(高級羣)[新建]