2012-11-01 80 views
2

我一直在使用笨了一段時間,我想有一個處理邏輯,像這樣的業務對象:如何使用業務對象在Codeigniter中封裝邏輯?

$comment = new Comment($this->input->post()); 
$blog = new Blog(); 
$current_post = $blog->get_current_post(); 
$current_post->add_comment($comment); 

$data['current_post'] = $current_post; 
$this->load->view('post_view',$data); 

代替此做法:

$this->load->model('comment_model'); 
$this->load->model('blog_model'); 
$this->load->model('post_model'); 

$comment = $this->comment_model->create_from_array($this->input->post()); 
$blog = $this->blog_model->get_blog(); 
$current_post = $this->post_model->get_current_post($blog); 
$this->post_model->add_comment($current_post,$comment); 

$data['current_post'] = $current_post; 
$this->load->view('post_view',$data); 
+0

對我沒有意義。面向對象是服務器的錯誤範例。我仍然記得Java Enterprise Beans的恐怖。 CI appraoch實際上是一個Singleton(設計模式)(每個負載都擴展了Singleton層次結構)。這更有意義。仍然奇怪,但可行奇怪。服務器的一個很好的比喻是電子電路,轉換邏輯(電路板)硬連線,請求(輸入)被轉換爲響應(輸出)。 除此之外:)你的問題是模糊的。你需要什麼樣的答案? –

+0

我發現最接近的解決方案是[這裏] [1] [1]:http://stackoverflow.com/a/10803244/385402 –

+0

@PatrickSavalle它是一個真正的問題,對使用對象(我們自己的對象)做一些行動,它的問題有完全的邏輯,我留在這兒也遇到同樣的問題。 – 2016-03-31 17:59:14

回答

0

你想要什麼正在改變codeigniter的工作方式,而不會加載模型它將如何知道從哪裏獲取數據?如果你想這樣做,你建議你將不得不擴展核心控制器類,並對你的代碼做很多假設。例如,當您創建一個新的實例Comment()時,它應該加載一個模型,並且傳遞給它的參數應該訪問該模型中的某個方法。

你會簡單地爲已經存在的功能做一個很好的包裝,這很好,但最終你的代碼可能看起來更好,但它仍然可以工作。