請指點--關于數(shù)據訪問層(1)
在發(fā)表這篇隨筆之前,我猶豫了很久,到底要不要把這篇隨筆放在首頁,作為一篇菜鳥的隨筆,不是太合適放在首頁,但是如果不放首頁,可能這篇隨筆很快就沉了,所以,我鼓起勇氣把它放在首頁...
寫這篇隨筆主要是由于我在做數(shù)據訪問層時碰到了問題,我有在博客園群里請教別人,也得到了大家熱心的幫助,但QQ上的消息沉得比博客可快得多了,所以我就想把它放到博客園上.....不說了,切入正題吧。
現(xiàn)在要弄一個簡單的視頻網站,有管理員、用戶、視頻類別、視頻、管理員和用戶可以上傳視頻、對視頻進行評論。
我的意圖:在這篇隨筆中,先拋開業(yè)務邏輯層和表現(xiàn)層,只看這個網站的數(shù)據訪問層,我想要讓這個DAL層能夠實現(xiàn)數(shù)據庫無關,同時能更加符合面向對象的設計思想,做這個更多的是為了學習,所以我不想采用一些現(xiàn)成的東西,希望能對其慢慢改進,在改進中讓自己得到鍛煉。
下面是我的DAL類圖:

說明:IDatabase是一個接口,定義了一些執(zhí)行SQL語句或存儲過程的方法,上圖中只標出了三個,SQLServer和Oracle是兩個具體的數(shù)據庫,實現(xiàn)IDatabase接口,IDAL是一個表示對Video、User、Admin、Comment進行管理的接口,其中的CreateDb()方法從配置文件中讀取數(shù)據庫類型,然后利用反射創(chuàng)建該具體數(shù)據庫(SQLServer類或Oracle類)并返回,其它方法全部都利用CreateDb()返回的數(shù)據庫類來執(zhí)行相應的Sql語句或存儲過程,其中GetCount()是返回該對象的總數(shù)量(如Video的總數(shù)、User的總數(shù)),GetItem(int id)通過該對象的id(在數(shù)據庫中是主鍵)返回對象(比如VideoDAL中的GetItem(int id)就通過數(shù)據庫中video的ID返回Video對象),GetList就是返回對象列表(如VideoList,UserList),GetPagedListOrderByPK(int startRow, int maxRows, SortType sortType)也是返回一個列表,但它是分頁時當前頁應該顯示的那部分對象列表,startRow和maxRows是該頁的起始行號和取出的最大記錄數(shù)(可以認為是page size),方法體中是與數(shù)據庫交互,取出數(shù)據,SortType是一個枚舉,有ASC和DESC兩值,代表排序規(guī)則,結果是按主鍵排序的。
下面是業(yè)務對象(這個叫法不知道是不是有問題,因為它們僅僅只是對數(shù)據庫相應表字段的一個映射,只不過多了兩三個屬性)

上圖中的User類、Video類等中擁有數(shù)據庫中對應表的所有字段(數(shù)據庫中有Admin、User、Video、VideoSort、Comment表),我沒有畫出來,在User類中,有Videos和Comments屬性,表示某用戶上傳的視頻列表和發(fā)表的所有評論列表,其它類中也有類似的屬性。
我現(xiàn)在所能想到的就是這樣,但我知道,這里面存在著很多很多的問題,只是我的水平比較菜,不知道要如何改進,所以斗膽把它放到首頁,希望能得到大家的指點。大家可以放心的說,完全不用擔心會傷害我的自尊心,OK,來吧。。![]()
浙公網安備 33010602011771號