Data Object & Table Class

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Data Object & Table Class - Presentation Transcript

    1. DataObject & Table Class 2009.05.26
    2. 摘要
      • 更新 DataObject ,增加更多種資料型態。
      • 更新 DataObjectHandler ,使開發者建立資料表的基本 Handler 時,減少部署時間。
      • 增加 Table 類別,配合 DataObjectHandler 的更新,使資料表與資料物件間的關係更緊密。
      • 增加 DataObjectCompose 類別,能將數個 DataObject 合併,與 DataObjectHandler 進行關聯查詢並傳回資料時,將資料放入 DataObject(Composed) 以方便後續的處理。
      • 增加 TableRelation 類別與 DataObjectRelationHandler 類別,提供基本的關聯查詢。
    3. DataObject 類別增加多種資料型態
      • 在這次的版本中, DataObject 加入了多種資料型態,除了基本的資料變數型態的設置,還包含資料傳遞時的過濾與檢查,新增的型態如下:
        • XHTML – XHTML 文件內容
        • UNIXTIME – UNIX 的時間戳記
        • DATETIME – 日期 + 時間的格式,格式可自訂
        • DATE – 日期格式
        • TIME – 時間格式
        • OPTIONS – 自訂選項
    4. DataObjectHandler 類別 ( 一 )
      • 原本為抽象類別,須繼承後覆寫 get , insert , update , delete 等抽象函數,現在改為一般類別,結合 Table 類別後,提供基本的資料表存取函數:
        • Get($id) – 依 Primary key 取得一筆資料
        • Create($is_new) – 建立對應的 DataObject ,存放及管理對應的資料
        • GetObjects($criteria) – 取得數筆資料,可自行指定條件
        • GetCount($criteria) – 依照指定條件,計算符合條件的資料筆數
        • Insert($object) – 新增或修改資料
        • Update($codition, $criteria) – 自行指定欄位及資料並依照自訂條件進行資料更新
        • Delete($mixed) – 主要用於刪除資料,可依據傳入的參數進行各種條件的刪除動作,接受 $int_id, $object, $criteria 三種參數型態
    5. DataObjectHandler 類別 ( 二 ) Class Diagram Old Class New Class Class Diagram
    6. Table 類別
      • 針對各個資料表進行相關資料的定義,如資料表名稱、主鍵、索引鍵、唯一鍵等。用於 DataObjectHandler 正確產生對應的 SQL 子句,以提供基本的 Handler 函數 [ Get() , Insert() ...] 。
      Class Diagram
    7. 繼承 Table 類別
      • 以 User 資料表為例,進行設定資料表名稱 (user) 、主鍵欄位名稱 (user_id) 、唯一鍵欄位名稱 (user_name) 以及可排序的欄位名稱 (user_unick) ,可排序的欄位不限定數量,且自動包含主鍵、索引鍵、唯一鍵。
      Source Code Class Diagram
    8. 取得 DataObjectHandler 物件
      • 透過 getHandler 函數,傳入 Handler 名稱可取得對應的 DataObjectHandler ,以 User 資料為例,將會自動引入 UserTable 物件,產生專用於 User 資料的 DataObjectHandler 。若需擴充 DataObjectHandler 的函數時,可自訂 UserHandler 類別並繼承 DataObjectHandler ,於 getHandler 函數將會自動判斷 UserHandler 是否存在來實體化 UserHandler 或 DataObjectHandler 。
      Source Code
    9. DataObjectCompose 類別 ( 一 )
      • 使用合成方法的 DataObjectCompose ,將一個以上的 DataObject 物件合成為一個 DataObject 物件。主要用於關聯查詢時,需涉及多個資料表欄位,因此將數個 DataObject 合併後,可存放對應的資料,並且仍然提供 DataObject 原本具有的函數,以利後續的資料處理,例如 getValues() 時,會依據資料型態的不同進行資料轉換,或是 cleanVars() 進行資料檢查過濾。
      Source Code
    10. DataObjectCompose 類別 ( 二 ) Class Diagram 1 2..*
    11. 實作自動產生關聯查詢
      • 建立 TableRelation 與 DataObjectRelationHandler 類別來實作自動產生關聯查詢的函數,由於關聯查詢屬於較複雜的 SQL 子句,因此會大幅增加程式的複雜度,因此在這次的版本中,尚未加入成為正式的類別。
      • 以下將對幾個類別與方法進行介紹:
        • TableRelation 類別
        • TableRelationColumn 類別
        • TableRelationColumnCompose 類別
        • DataObjectRelationHandler 類別
        • getRelationHandler 函數
    12. TableRelation 與 DataObjectRelationHandler 類別 Class Diagram 1 2..* getRelationHandler($handler_name)
    13. 實際使用 TableRelation 類別
      • 使用 TableRelation 類別需建立新的類別並且繼承後才能進行被保護 (protected) 函數的調用。
      • 以下以範例進行說明:建立 UserRelationTable 繼承 RelationTable 後,使用 setTableObject 函數新增關聯的資料表物件,如 UserTable , GroupTable ; 接著使用 createTable(s)Relation 函數建立一組以上的關聯條件及設定關聯名稱以便後續調用, createTable(s)Relation 將會回傳 TableRelationColumn 物件或 TableRelationColumnCompose 物件,並使用該物件函數 setRelation 進行關聯欄位的條件設定即可自動產生對應的關聯查詢物件 (DataObjectRelationHandler) ; 呼叫 getRelationHandler 函數取得對應的 Handler 並開始使用它進行資料表查詢 ( 僅限查詢 ) 。
    14. 文獻探討 - 自動產生關聯查詢 ( 一 )
      • 雖然自動產生關聯查詢可以帶來許多開發時的便利,節省許多時間,但由於是自動產生的 SQL 子句,在靈活度上勢必比不上親自撰寫 SQL 語法。以此依據作為考量的情況下,參考其他 Framework 的實作方法與使用者情況:
        • CakePHP : 提供完整的查詢方法,包含 JOIN 子句或一般關聯方法等,對於中小型專案開發上,能提供便捷的幫助,但在其相關的社群網站中,可常見使用者分享「資料庫結構較為複雜」或「資料筆數較多」時,自動產生的 SQL 子句對於查詢效能上明顯不足,仍建議開發人員自行撰寫 SQL 語法。
        • Zend Framework : 僅提供基礎的查詢類別,可自動產生簡易的查詢語法,保留較高的彈性由開發人員自行擴充,應用範圍較廣,使開發應用上,較不易與 Framework 本身脫離。
    15. 文獻探討 - 自動產生關聯查詢 ( 二 )
      • 由上述兩個案例中可得知自動產生關聯查詢雖然方便,但也有可能造成使用者的不適用,因此在這次的版本當中,尚未加入關聯查詢的相關類別,而由開發人員自行定義關聯查詢函數 ( 繼承 DataObjectHandler) ,並運用 DataObjectCompose 類別來對應關聯查詢的結果以進行後續處理。目前關聯查詢的相關類別已接近可運作階段,但仍將暫停自動關聯查詢的分支版本開發,待未來整體進度較為成熟後再回來再繼續發展。
    SlideShare Zeitgeist 2009

    + Alex TsaiAlex Tsai Nominate

    custom

    82 views, 0 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 82
      • 82 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories