久久久久国产精品熟女影院_天天躁日日躁狠狠躁欧美老妇 理论片中文字幕-91亚洲国产成人久久精品网站-视频国

目錄
目錄X

動易SiteFactory新特性體驗之旅——支持多數(shù)據(jù)庫

  動易CMS 2007的新特性中有這樣一個非常重要的特性:

以下是引用片段:
支持多數(shù)據(jù)庫
動易CMS 2007采用了抽象工廠模式將各個不同數(shù)據(jù)庫的實現(xiàn)方式分離,理論上可以支持任意的數(shù)據(jù)庫,目前測試的版本只支持MS SQL 2000/2005。
不同數(shù)據(jù)庫的實現(xiàn)分離,就不用象原動易CMS 2006版那樣為了兼容AC和SQL兩種數(shù)據(jù)庫,必須使用標準SQL語句,并要注意兩種數(shù)據(jù)庫語句中的細小差異。分離后,各數(shù)據(jù)庫實現(xiàn)獨立出來,就可以靈活的利用各數(shù)據(jù)庫的優(yōu)點(如:AC中可以使用SQL語句,而SQL中就可以靈活使用存儲過程、自定義函數(shù)、觸發(fā)器等特性),并且互相之間沒有干擾,可通過配置文件來實現(xiàn)快速切換。

  這個新特性,我在上篇講N層架構設計的文章中已經(jīng)附帶了講了一下。今天我們再來詳細的講一講,動易是如何實現(xiàn)這個特性的。

  實現(xiàn)這個特性的前提是系統(tǒng)采用分層架構設計,然后在數(shù)據(jù)訪問層采用數(shù)據(jù)庫抽象工廠模式,將不同數(shù)據(jù)庫的實現(xiàn)抽象出來,然后通過修改配置文件,即可在不同數(shù)據(jù)庫類型間切換。

  可能有些人迷糊了:動易CMS2006不也支持ACCESS和SQL兩種數(shù)據(jù)庫嗎?還有其他的系統(tǒng)不也是這樣嗎?這怎么能稱得上是動易CMS 2007的新特性呢?呵呵,大家別急,且聽我慢慢講來。

  動易CMS2006是支持ACCESS和SQL兩種數(shù)據(jù)庫,并且也是簡單的修改Conn.asp中的數(shù)據(jù)庫類型即可在ACCESS和SQL中切換。但是動易CMS2006的多數(shù)據(jù)庫實現(xiàn)方式與動易CMS2007是完全不同的。

  我們先來看看動易CMS2006的多數(shù)據(jù)庫實現(xiàn)方式。我們來看一段動易CMS2006的源代碼:

If SystemDatabaseType = "SQL" Then
Conn.Execute ("alter table PE_Admin add AdminPurview_" & rsChannel("ChannelDir") & " Int null")
Else
Conn.Execute ("alter table PE_Admin add COLUMN AdminPurview_" & rsChannel("ChannelDir") & " INTEGER")
End If

  因為ACCESS和SQL在語法上稍微有些區(qū)別,并不能完全通用,所以在寫程序時就要特別注意兩者的區(qū)別,一不小心,就會出現(xiàn)錯誤。而且這種方式,在寫代碼時,要考慮到每一種數(shù)據(jù)庫的不同語法之處。每增加一種數(shù)據(jù)庫,就要重新修改幾千處查詢語句,工作量可想而知,而且在修改時極易出錯。

  動易CMS2007則采用了全新的模式——數(shù)據(jù)庫抽象工廠模式。在數(shù)據(jù)訪問層(DAL)中,采用DAL Interface抽象出數(shù)據(jù)訪問邏輯,并以DAL Factory作為數(shù)據(jù)訪問層對象的工廠模塊。對于DAL Interface而言,分別有支持MS-SQL的SQL Server DAL和支持Oracle的Oracle DAL具體實現(xiàn)。而Model模塊則包含了數(shù)據(jù)實體對象。其詳細的模塊結構圖如下所示:

圖片點擊可在新窗口打開查看
數(shù)據(jù)訪問層的模塊結構圖

  在數(shù)據(jù)訪問層中,完全采用了“面向接口編程”思想。抽象出來的IDAL模塊,脫離了與具體數(shù)據(jù)庫的依賴,從而使得整個數(shù)據(jù)訪問層利于數(shù)據(jù)庫遷移。DALFactory模塊專門管理DAL對象的創(chuàng)建,便于業(yè)務邏輯層訪問。SQLServerDAL和OracleDAL模塊均實現(xiàn)IDAL模塊的接口,其中包含的邏輯就是對數(shù)據(jù)庫的Select,Insert,Update和Delete操作。因為數(shù)據(jù)庫類型的不同,對數(shù)據(jù)庫的操作也有所不同,代碼也會因此有所區(qū)別。

  此外,抽象出來的IDAL模塊,除了解除了向下的依賴之外,對于其上的業(yè)務邏輯層,同樣僅存在弱依賴關系,如下圖所示:

圖片點擊可在新窗口打開查看
業(yè)務邏輯層的模塊結構圖

  上圖中BLL是業(yè)務邏輯層的核心模塊,它包含了整個系統(tǒng)的核心業(yè)務。在業(yè)務邏輯層中,不能直接訪問數(shù)據(jù)庫,而必須通過數(shù)據(jù)訪問層。注意圖中對數(shù)據(jù)訪問業(yè)務的調(diào)用,是通過接口模塊IDAL來完成的。既然與具體的數(shù)據(jù)訪問邏輯無關,則層與層之間的關系就是松散耦合的。如果此時需要修改數(shù)據(jù)訪問層的具體實現(xiàn),只要不涉及到IDAL的接口定義,那么業(yè)務邏輯層就不會受到任何影響。畢竟,具體實現(xiàn)的SQLServerDAL和OracalDAL根本就與業(yè)務邏輯層沒有半點關系。

  上述的三個模塊分別使用了三個獨立的項目來進行管理,編譯后就生成了三個相應的DLL,如下圖所示:


圖片點擊可在新窗口打開查看

  注意,在測試版中,因為還沒有提供對ACCESS和Oracle的數(shù)據(jù)庫支持,所以在上圖中我們沒有看到對應的Powereasy.AccessDal.dll和PowerEasy.OracleDal.dll。

【打印正文】 發(fā)布時間:2007-08-20 09:45:04 瀏覽次數(shù): 作者:webboy 來源:本站原創(chuàng)
×

用戶登錄