業務邏輯層的設計(四) 表模組模式簡介

2021-06-17 15:13:43 字數 2068 閱讀 3047

其實我覺得寫博文也可以跟寫**一樣,有**,只要讀得順暢就好,我並不想通過幾篇博文讀下來,就讓讀者成為某個方面的專家。

在每寫一篇短短的博文,都曾參考過很多有價值的書籍和其他人的博文,所以不可能把所有的東西都寫進來的。

我最近在思考的時候,經常茶不思飯不想,不知道的人看來,以為我會是得了相思病的少年。

上集回顧

在上幾篇業務層的設計都描述的是領域模型的模式,為了解釋領域模型的使用,我居然提前寫了一點資料訪問層。

領域模型適合業務邏輯比較複雜,業務規則繁多,因為這些複雜的元素都會被內聚在領域模型之中,而領域模型又可以被重用。

這樣一來就能避免許多業務邏輯的重複分布在各個地方,對維護帶來說,這是非常有愛的。

但是在需求和設計階段,需要花費很多時間,但是你會發現領域模型重用了幾次之後,就會體會到它的好處。

初學者不要輕易嘗試,尤其是半路出家的程式設計師。

所以接下來打算介紹一些比較簡單的模式,表模組模式和事務指令碼模式。

我會對錶模組做乙個比較簡單的描述,就是比較簡單,因為我不是很喜歡它。

相對而言,實踐中事務指令碼我用的還算比較有心得,打算在後續的博文中慢慢介紹。

表模組(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)

public ppdataset.pp_virtualsendcontrolrow getrow(int

index)

return _table.rows[index] as

ppdataset.pp_virtualsendcontrolrow;

}

小結:vs生成的強型別的datatable給我們帶來很多便利,它可以是某個表,也可以是檢視。

只不過使用中它還是會有一些問題的,比如之前提到的null的問題,不知道是不是乙個bug。

如果不使用vs生成的強型別資料集,那麼表模組就失去了自己的優勢,尤其是業務物件和資料庫表結構差異較大的情況下。

如果要實現自定義的強型別資料集,可以參考微軟的原始碼,然後自行設計,不過工作量受不了啊。

表模組模式是乙個搞畢業設計的利器(**的想法)。

J2EE DAO層和業務邏輯層的設計

舉個例子,比如要做乙個學生選課管理系統,資料庫中有三張表,分別是students,teacher,course dao層介面設計 inte ce studentdao inte ce teacherdao inte ce coursedao 業務層介面設計 inte ce studentservic...

大話設計模式(四 業務的封裝)

小菜 你的意思是分乙個類出來?哦,對的,讓計算和顯示分開。大鳥 準確的說,就是讓業務邏輯與介面邏輯分開,讓它們之間的耦合度下降。只有分離開,才容易達到容易維護或擴充套件。小菜 讓我來試試看。class program catch exception ex public class operation...

簡單設計模式實現業務邏輯與流程邏輯的分離

在企業應用系統開發中,特別是涉及到多部門協同作業的情況,業務流程是最難確定下來的,應用系統開發過程中和應用系統上線後流程經常會發生變化。如何採用有效,合理成本的方式來處理這種現象呢?如果做到在應用系統開發中業務邏輯與流程邏輯分離,即可達到業務流程不確定的情況下的不影響開發進度,同時有可以提公升應用系...