請指點--關于數據訪問層(2)
從上一篇的《請指點――關于數據訪問層》的評論中,我收到了許多好建議,也在大家的建議下,花了點時間查看了下Petshop4.0 的數據訪問層,于是模仿它改造了我的數據訪問層,但是我還是有些地方很迷糊,于是再次斗膽將其放到首頁。
以下是數據實體層,它是數據庫中表在程序中的一個體現,每個類都對應一張表:

對于這些實體的映射方法,我的第一個問題產生了:
在Petshop中,有ProductInfo類,對應它的數據庫中的Product表,它的ProductInfo中有一個屬性是CategoryID,這根數據庫中是一樣的,而我的問題就在這,為什么不在ProductInfo中組合一個CategroyInfo對象,從面向對象的觀點看,應該在ProductInfo中組合一個CategoryInfo對象會更好點,而不是在ProductInfo中放一個CategoryInfo的字段(CategoryInfo的id字段),但是如果組合的是CategoryInfo對象,那在創建ProductInfo對象時,要查詢數據庫中Category表中得到數據,我的想法是,只有在要引用ProductInfo類的Category屬性時,再判斷一下Category屬性是否為空,如果為空就查詢數據庫中Category表得到數據賦給Category屬性,但是Petshop沒有這么做,那估計就是我的這個想法有問題,但我的這個想法問題在哪兒呢?在我的這個例子中就是:VideoInfo中是要組合VideoSortInfo的實例,還是用圖中所示的VideoSortID作為它的屬性?
我也請教了博客園群里的一位朋友,他的意思是要不一定要死摳著要組合VideoSortInfo實例不放,而是要看具體情況靈活應用。一開始我還聽著好像理解了,但到后面還是越想越糊涂,我真的得了模式病了么?
下面是實體行為類,IDAL中定義了抽象的接口,SQLServerDAL和OracleDAL實現它,SQLServerDAL和OracleDAL分別利用SQLHelper和OracleHelper實現數據庫操作:

下面的是DAL工廠,是抽象工廠模式的一個變體,在DALFactory中有相應的Create*()方法,它們通過讀取配置文件,利用反射來實例化具體行為類(比如實例化OracleDAL.Admin或SQLServerDAL.Admin):

在這次的改造中,感覺就是仿造了Petshop(不知道有沒有仿錯了),于是我的第二個問題產生了:
如果這次仿造成功的話,那可能下一次我還是采用這樣的仿造方法,再下一次還是,那這樣的開發不就一成不變、都一個模式了么?
還請大家指點迷津,謝謝!
以下是數據實體層,它是數據庫中表在程序中的一個體現,每個類都對應一張表:

對于這些實體的映射方法,我的第一個問題產生了:
在Petshop中,有ProductInfo類,對應它的數據庫中的Product表,它的ProductInfo中有一個屬性是CategoryID,這根數據庫中是一樣的,而我的問題就在這,為什么不在ProductInfo中組合一個CategroyInfo對象,從面向對象的觀點看,應該在ProductInfo中組合一個CategoryInfo對象會更好點,而不是在ProductInfo中放一個CategoryInfo的字段(CategoryInfo的id字段),但是如果組合的是CategoryInfo對象,那在創建ProductInfo對象時,要查詢數據庫中Category表中得到數據,我的想法是,只有在要引用ProductInfo類的Category屬性時,再判斷一下Category屬性是否為空,如果為空就查詢數據庫中Category表得到數據賦給Category屬性,但是Petshop沒有這么做,那估計就是我的這個想法有問題,但我的這個想法問題在哪兒呢?在我的這個例子中就是:VideoInfo中是要組合VideoSortInfo的實例,還是用圖中所示的VideoSortID作為它的屬性?
我也請教了博客園群里的一位朋友,他的意思是要不一定要死摳著要組合VideoSortInfo實例不放,而是要看具體情況靈活應用。一開始我還聽著好像理解了,但到后面還是越想越糊涂,我真的得了模式病了么?
下面是實體行為類,IDAL中定義了抽象的接口,SQLServerDAL和OracleDAL實現它,SQLServerDAL和OracleDAL分別利用SQLHelper和OracleHelper實現數據庫操作:

下面的是DAL工廠,是抽象工廠模式的一個變體,在DALFactory中有相應的Create*()方法,它們通過讀取配置文件,利用反射來實例化具體行為類(比如實例化OracleDAL.Admin或SQLServerDAL.Admin):

在這次的改造中,感覺就是仿造了Petshop(不知道有沒有仿錯了),于是我的第二個問題產生了:
如果這次仿造成功的話,那可能下一次我還是采用這樣的仿造方法,再下一次還是,那這樣的開發不就一成不變、都一個模式了么?
還請大家指點迷津,謝謝!
浙公網安備 33010602011771號