2013-08-21 76 views
0

我最近發現了優秀的用於PHP的redbean ORM庫,這使得在我的web應用程序中執行CRUD操作變得微不足道,但是我最近實現了一些我開始質疑的附加功能。爲了更方便地保存數據,我創建了一個名爲redbean.php的程序化表單處理腳本。每當這個腳本被指定爲形式的行動,它會根據提交給它的數據動態地創建一個新的bean:讓觀點直接與模型層談話是否是不好的做法?

<?php Template::startContent(); ?> 

<form action="forms/redbean.php" method="POST"> 
    <input type="hidden" name="bean" value="book"/> 
    <input type="text" name="author"/> 
    <input type="text" name="pubDate"/> 
    <input type="submit" value="Save Bean!"/> 
</form> 

<?php Template::endContent(); ?> 

的原因,我開始質疑這種方法在我的框架使用,因爲一切MVC模式,但這感覺就像是作弊,因爲數據直接從視圖到ORM庫。無論如何,我正在嘗試使用PHP和Web編程的最佳實踐來實現此應用程序,所以我的問題是這種方法是否代表我不知道的反模式,或者是否還有其他任何我應該考慮這個實現。

+0

你的視圖層甚至應該知道有一個數據庫。這違反了SoC(Separation of Concerns) – Orangepill

回答

2

如果你真的試圖堅持MVC模式,那麼是的,你不是通過隨意調用視圖中的腳本來向數據庫中添加數據而接受真正的模式。 MVC的目的之一是統一性。您的表單數據被傳遞給控制器​​,控制器調用模型來驗證並保存模型,然後將錯誤或成功回調返回給出的視圖。你的腳本,從你所描述的,只是忽略了所有這一切,並創建了豆。

現在,考慮到您的腳本中有驗證,當您對驗證進行任何更改時,您必須在此腳本中反映它。簡單是遊戲的名稱,在多個地方重複代碼只是浪費。

如果你想遵守MVC規則,只需將它複製到你的模型並在那裏處理。它會讓你使用你的腳本並繼續使用MVC。

儘管如此,它的腳本。如果它起作用,它就會起作用。如果你正在使用生產材料或團隊,我不會使用它。如果它是個人使用或只是爲您的個人網站,去爲它。

0

我認爲你的方法很好 - 只要注意安全性和驗證。 RedBeanPHP也便於使用電磁爐這種方法,它不正是你的描述,但也增加了對關係的支持:http://www.redbeanphp.com/cooker

這是一個有點嚇人,因爲它是真的,真的很強大,你可以輕鬆地創建安全漏洞,但如果處理正確的,你可以繞過crufty MVC模式,並做一些真正的高速開發。

不要過分關注OOP,MVC和模式,它們通常非常有用,但人們往往過度使用它們。而且,這些技術中的很多都是在不同的領域開發出來的,它們的功能更好,它們已經從這個領域複製到了網絡,在那裏他們......很好地分類工作,但沒有那麼理想。例如MVC來自於桌面GUI,來自Smalltalk的OOP等。雖然它們在PHP中仍然有用,但您不應該太擔心不使用它們right - 因爲它們已經導入到PHP域中,因此不再是右邊的方式。只要做任何工作。最重要的是你(和你的同事)可以輕鬆閱讀和維護代碼。就這樣。

相關問題