其實我覺得寫博文也可以跟寫小說一樣,有連載,只要讀得順暢就好,我並不想通過幾篇博文讀下來,就讓讀者成為某個方面的專家。
在每寫一篇短短的博文,都曾參考過很多有價值的書籍和其他人的博文,所以不可能把所有的東西都寫進來的。
我最近在思考的時候,經常茶不思飯不想,不知道的人看來,以為我會是得了相思病的少年。
上集回顧
在上幾篇業務層的設計都描述的是領域模型的模式,為了解釋領域模型的使用,我居然提前寫了一點數據訪問層。
領域模型適合業務邏輯比較復雜,業務規則繁多,因為這些復雜的元素都會被內聚在領域模型之中,而領域模型又可以被重用。
這樣一來就能避免許多業務邏輯的重復分布在各個地方,對維護帶來說,這是非常有愛的。
但是在需求和設計階段,需要花費很多時間,但是你會發現領域模型重用了幾次之后,就會體會到它的好處。
初學者不要輕易嘗試,尤其是半路出家的程序員。
所以接下來打算介紹一些比較簡單的模式,表模塊模式和事務腳本模式。
我會對表模塊做一個比較簡單的描述,就是比較簡單,因為我不是很喜歡它。
相對而言,實踐中事務腳本我用的還算比較有心得,打算在后續的博文中慢慢介紹。
表模塊(Table Module)
先來宏觀地看一下操作流程:
通過創建一個DataSet數據集,添加一個表,輕松構建一個強類型的DataSet

可以為它添加一個查詢


非常輕松,VS將自動生成查詢SQL,但是SQL語句無法太復雜,不能超出VS的識別范圍。
調用方法:

可以看到它返回的是一個強類型的DataTable,使用起來非常方便,但是當你實戰中用的時候,會發現問題的,比如你有一個備注字段是Null,試試看吧,至少在.NET2.0中就悲劇了。
表數據網關模式:

用代碼直觀地表示:

在數據網關中執行SQL命令返回想要的數據集,然后在業務類中處理,得到想要的結果。
業務類
PPDataSet.PP_VIRTUALSENDCONTROLDataTable _table=null; public VirtualSendControlManager() { } public VirtualSendControlManager(PPDataSet.PP_VIRTUALSENDCONTROLDataTable table) { _table = table; } public PPDataSet.PP_VIRTUALSENDCONTROLRow GetRow(int index) { if (_table.Rows.Count == 0) { return null; } return _table.Rows[index] as PPDataSet.PP_VIRTUALSENDCONTROLRow; }
小結:
VS生成的強類型的DataTable給我們帶來很多便利,它可以是某個表,也可以是視圖。
只不過使用中它還是會有一些問題的,比如之前提到的null的問題,不知道是不是一個bug。
如果不使用VS生成的強類型數據集,那么表模塊就失去了自己的優勢,尤其是業務對象和數據庫表結構差異較大的情況下。
如果要實現自定義的強類型數據集,可以參考微軟的源碼,然后自行設計,不過工作量受不了啊。
表模塊模式是一個搞畢業設計的利器(邪惡的想法)。
