原來,物件導向和資料庫是「冤家」

2021-04-17 22:03:22 字數 2775 閱讀 5044

沒經證實的傳說

話說當年物件導向和資料庫剛出道的時候,曾經引發過驚天動地的大討論(當然,這裡說的是關係型資料庫,以下簡稱資料庫)。兩個陣營的人都試圖說服對方,加入到自己的陣營裡來(傳說是都說了,你別做了那個了,沒發展)。經過車輪式討論,也沒得到共識,只好分道揚鑣了。

雖然,無法考證這個傳說是不是真的,但確實,物件導向和資料庫之間存在著矛盾。這正是我們學習了物件導向理論之後,信心百倍地要去做專案時,突然發現有很多問題的原因。

要是世界上只有物件導向,或則只有資料庫,那該多好啊?但這只是奢望罷了。既然矛盾並共存著,那就只能取長補短了。

讓物件導向和資料庫,好好合作

大家有沒有覺得,類圖和er圖畫出來之後,是不是很像?矛盾就在這裡,資料庫陣營的人認為,物件導向做得是在記憶體中建立乙個新的資料庫,浪費了資源。而物件導向陣營的人認為物件導向更符合人的思維模式、可以開發出更健壯的系統。

先看一下物件導向和資料庫的優點吧。物件導向的優點在於模組化和處理複雜的業務邏輯,而資料庫的優點在於資料儲存、查詢、統計。

解決乙個問題,不是只有一種方法,不能說哪乙個方法是萬能藥。每乙個方法都有它存在的意義。

物件導向和資料庫各有其特長,何不讓它們發揮各自的特長呢?

物件導向,你就處理複雜的業務邏輯~

資料庫,你就處理資料的查詢、統計、簡單的業務邏輯~

好,首先大的方向已經明確了,但開始做專案之前還要明確以下幾點,

當需要時,才載入,類有屬性和方法,下面定義了乙個客戶類,

// 客戶類

class customer

我現在要查詢客戶的銷售額,那麼id和name對我來說是沒有意義的。如果不是資料庫程式設計,這都是無關緊要的,但資料庫程式設計中,屬性的資料儲存在資料庫裡,所以每生成乙個物件,都要去查詢資料庫的話,系統的效能肯定大打折扣。看一下修改後的類

// 客戶類

class customer

類中把id和name屬性去掉,然後加了乙個getinfo方法。現在好了,生成客戶物件,不會進行資料庫查詢,當需要客戶資訊時,可以呼叫getinfo方法來獲得。這種方法看起來,不像是物件導向的,因為它沒有屬性,物件導向是思想、理論,理論要聯絡實際,根據實際情況取捨一些東西是無可厚非的,況且,這樣做也不會丟掉物件導向的優點(還可以用,繼承、多型等等)。

用什麼來傳遞資料,程式設計工具都有資料庫控制項,比如.net有dataset,delphi有ttable、tquery等等。那,是使用資料庫控制項還是使用物件?應該是從它們的優點去出發來決定用哪乙個。物件結構簡單,操作起來非常方便,而且直觀。資料庫控制項雖然結構複雜,操作不方便,但處理大量資料是它的優勢。所以傳遞單條記錄時使用物件,傳遞一組記錄的時候使用資料庫控制項是乙個不錯的方法。

當然傳遞一組記錄時也可以用物件,把物件裝在容器裡,然後傳遞。但要考慮一下幾點,只是為了顯示嗎?那就大可不必,因為它的功能只是顯示,資料庫控制項可以做得很好,而且不需要額外的工作。要用這些物件做統計操作嗎?那就需要考慮效率問題了,資料傳輸和物件生成,需要消耗更多的資源。而且統計是資料庫的強項,為什麼放著能幹的人,不用呢?

一般常用的業務邏輯類編寫方式

用類把你的函式封裝起來

方法:宣告乙個static類,然後把函式放到類裡。不要說這個太不像物件導向了,類是乙個模組,能準確定義乙個類是物件導向中最困難的事情。

資料處理:手寫sql

資料容器:程式設計工具提供的資料庫控制項。

// 客戶類

static class customer

// 更新客戶資訊

static public bool update(int id,int name)

//刪除客戶資訊     

static public bool delete(int id)

//獲得客戶資訊

static public dataset getinfo(int id)

//獲得客戶列表

public dataset getlist()}優點

-    對物件導向理論方面要求不高,通過短時間學習,就可以掌握

-    **簡單易懂

-    **效率高

缺點-    不能充分發揮物件導向的特點

-    update和insert把資料庫字段作為引數,當新增欄位或刪除欄位時,需要修改函式。

發揮物件導向和資料庫的特點

方法:宣告乙個entity類和乙個業務邏輯類

資料處理:手寫sql

資料容器:插入、更新、傳遞單條記錄使用entity物件,一組記錄使用資料庫控制項

// 客戶entity

class customerentity

// 客戶類

class customer

// 輸入客戶資訊

public bool insert(customerentity custentity)

// 更新客戶資訊

public bool update(customerentity custentity)

//獲得客戶資訊

public customerentity getinfo()

//獲得客戶列表

public dataset getlist()

}// 客戶類

class customer

// 更新客戶資訊

public bool update(customerentity custentity)

//刪除客戶資訊     

public bool delete()

//獲得客戶資訊

public customerentity getinfo()

//獲得客戶列表

public ilist getlist()

}

資料庫和資料庫物件

系統資料庫是指安裝完mysql伺服器後,會附帶的一些資料庫,系統資料庫會記錄一些必需的資訊,使用者不能直接修改這些系統資料庫。各個系統資料庫的作用如下 information schema 主要儲存系統中的一些資料庫物件資訊,如使用者表資訊 列資訊 許可權資訊 字符集資訊和分割槽資訊等。perfor...

物件導向資料庫

定義封裝的類 公共的資料庫類 class mysql function get n 建構函式賦值 function construct host,name,pass,db,cs 得到鏈結 function getconn function myupdate sql else return res f...

物件導向資料庫

物件導向資料庫系統 object oriented data base system,簡稱oodbs 是資料庫技術與物件導向程式設計方法相結合的產物。對於oo資料模型和物件導向資料庫系統的研究主要體現在 研究以關聯式資料庫和sql為基礎的擴充套件關係模型 以物件導向的程式語言為基礎,研究持久的程式語...