http://www.ithome.com.tw/plog/index.php?op=ViewArticle&articleId=10643&blogId=257


xoops2定義了XoopsObject這個核心類別,用陣列來儲存一系列的值,並用XoopsObjectHandler類別來與資料表做映 射。XoopsObject定義好了初始化、存取值的方法,讓我們很方便地使用。更方便的是,由於在XoopsObject類別內,只使用了 TextSanitizer物件來做字串檢查,而XoopsObjectHandler類別只是一個抽象類別,並沒有定義好實作,所以只要把 XoopsObject(放在/kernel/opject.php檔案內)以及TextSanitizer(放在 /class/module.textsanitizer.php檔案內)從Xoops2中取出,就可以當作自己開發的核心。

使用XoopsObject如何達到快速開發呢?因為XoopsObject裡面定義好了資料型別與處理方法,利用他定義好的型別,可以 設計好一些類別,輸入XoopsObject即可產生相對應的網頁。舉例來說,製作表單是一件相當煩瑣的工作,可以設計一個表單類別,輸入 XoopsObject後,可以針對相對應的xoops資料型別產生表單。

另外使用XoopsObject搭配Smarty(或其他樣板引擎)來做MVC模式開發,就可以看到快速開發的效果。由 XoopsObject以及XoopsObjectHandler負責Model,Smarty負責View,程式開發只要專注在Controller上 就可以。

由於XoopsObjectHandler其實並沒有實作他定義的方法,所以在應用的時候還需要自己撰寫他的create、get、 insert、delete方法,如果要偷懶,更好的方法是寫一個類別產生器,類似PDO。這樣在開發上,只要設計出data schemas,就可以自動產生箱對應的物件。(也許有一天可以跟phpMyAdmin結合)目前Xoops有設計好的database類別可用,但是只 有支援mysql。如果要抽換資料庫,或是改成用pear的db套件等,類別產生器都需要修改,這是比較麻煩的地方。

另外一個問題是,XoopsObject並沒有比較好的處理關聯性的方法,如果資料關係複雜,處理起來會花費比較大的功夫。如何讓 XoopsObject能自動處理類別之間的關係(1:n、n:m等等),而不用花費controller的功夫,是類別產生器需要下的另一個功夫。

如果XoopsObjectHandler的方法是一致的(例如,僅限於create、get、insert、delete),還有另一個好處,就是容易做權限控管。可以利用類似Static Proxy的方式,控制這些方法的使用。

會有這些想法,其實是自己懶的緣故(已經熟悉xoops2,但是懶得學cake),另外一個原因是希望不會因為使用一個framework讓程式大幅增加,並留給自己一些Mashup的空間。
創作者介紹

創造心理的感動

gisanfu 發表在 痞客邦 PIXNET 留言(0) 人氣()