Segmentfault 用的架構裡的Data模式是什嗎?
在 http://www.infoq.com/cn/news/2012/09/... 中提到的。
回複內容:
Segmentfault 用的架構裡的Data模式是什嗎?
在 http://www.infoq.com/cn/news/2012/09/... 中提到的。
在SegmentFault架構中我們把Data定義為一個資料管理對象,主要方便在模板中展現。它可以展現單個資料,也可以展現多個資料,這主要是通過繼承Iterator介面來實現的迭代器功能。比如我們展示下從資料庫取出資料到頁面展示的效果
在Action中我們會這樣寫
// 從model中取出資料$questions = $this->questionModel->listQuestions();// 將數組放入迭代器$this->questions = new Data_Question($questions);// 展現模板$this->view->render('questions.php');
到View中我們就可以操作Data_Question對象了
url(); ?>">title(); ?>
summary(100, '...'); ?>
可以看出來它的用法大大簡化直觀,你不需要echo了,因為我們在Data基類中幫你用__call函數實現了通過欄位名作為方法名直接輸出的工作,當然你也可以echo $q->title,因為我們也對__get函數做了處理,你可以直接調用當前的欄位。
更重要的是配合緩衝技術的使用,我們可以達到非常夢幻的方法,比如問題作者$q->user,它可以直接返回一個Data_User的對象,那麼我們就可以做到使用的時候再查詢,想用什麼資料就寫什麼資料,比如我們輸出每個問題的作者相關資訊
user->url(); ?>">user->name(); ?> . user->rank(); ?>
這隻是些最基本的用法,還有更多複雜的用法就不一一介紹了,比如輸出欄位的時候可以帶參數等等