物件導向 VS. 關聯式資料庫
關聯式資料庫風行已久,之前許多 Client/Srever 程式皆是建構於此種以 SQL
為標準溝通語言的資料庫的基礎上。因為 E-R Model 等理論的發展,其提供一較為
完整之組織資料的方式,所以造成關聯式資料庫的流行。
但是關聯式資料庫現在也遇到了一些問題,尤其是在與物件導向系統之結合上。
由於慣於使用關聯式資料庫的結果,我們在開發系統時很自然就會以關聯式資料庫的
概念來思考,結果往往會太過以資料庫為中心,而非以問題領域為中心。這和另一種
以程式碼為中心的哲學,恰為及兩個極端的對比。而這二種哲學與物件導向哲學一向
是格格不入的,因為物件導向是以問題中的概念(或物件)為中心,所有的檔案與資料
庫只是一個儲存體(Storage)而已。任何以程式碼或資料庫為中心的架構,皆會將我
們導向一種極不自然或機器式的思考,也因而無法建構出物件導向系統那樣有彈性、
富可理解性、可再使用性、易維護性、以及易於擴充性等的系統。
關聯式資料庫是以記錄(Record)及欄位(Field)為單位,雖然一個資料庫中的表
格(Table)很像物件導向中的類別(Class),但是我們終究不能直接把表格中的記錄當
作是物件來使用,所有對關聯式資料庫的操作皆必須轉化成SQL中的欄位等格式。
SilverStream 中嚐試用 AgpData 及 AgcData 等資料快取物件來解決此問題,但是
它反而造成另一個問題 -- 使用者介面與處理規則的耦合度太高。例如,大家常把處
理規則寫在 Page 或 Form 中的事件處理,然而因為 SilverStream 事件處理機制是
以 Page 或 Form 為代理者,JavaBean 的事件處理程式碼被指定為 Page 或 Form
的方法,如此方式雖較簡便易寫,但也必定會造成使用者介面與處理規則的高度耦合
,也就是說這個系統的維護性與擴充性會降低至極低,簡言之,就是一個近乎寫死的
系統設計。
關聯式資料庫與物件導向的問題仍然持續在研究之中,一些關於此方面問題的
Design Patterns 亦有人已發表。不過現在看來,物件式資料庫好像是大家比較注意
的焦點,因為它乾脆放棄對關聯式資料庫的修改,直接提供一個物件式的解決方案。
這或許是一個值得注意的方向!
沒有留言:
張貼留言