2011-02-01 74 views
13

我一直在試圖瞭解是否可以將MVC體系結構應用於過程,以及如何將其實現到我的代碼中。根據我的理解,MVC基本上代表了業務邏輯,表示層和其他邏輯的分離,儘管它似乎總是針對OO-PHP。我可以將MVC設計模式應用於程序性PHP

你能推薦在程序上下文中處理MVC的最佳方法嗎?

謝謝。

+1

+1 @Daniel好的問題,我在這方面看起來有很長的時間,直到現在我沒有很好的答案,我希望有人給你一個很好的答案。程序化編程風格基本上是很多指令幾乎在同一地方,我的意思是長代碼,難以維護等等,而在OO中是不同的。前段時間,我在三個不同的部分做了mysqlf searate。 Bussines Logic,模板(接口,可能有模板邏輯),最後是數據抽象。在一般情況下MVC做這樣的事情,取決於你使用的是什麼框架..它有點複雜.. – B4NZ41 2011-02-01 18:38:46

+0

我極力阻止人們使用Procedural PHP開始一個新項目。如果您想在舊項目中使用MVC:在OOP中重寫您的項目。相信我。 OOP將您的項目打開到一個嶄新的世界。 – Shoe 2011-02-01 18:46:05

+0

是的,我有一些麻煩讓面向對象爲我正確工作,並想嘗試和MVC架構實現我的代碼。我沒有使用任何框架,我從頭編碼。 – 2011-02-01 18:46:28

回答

10

MVC是面向對象的模式,你想用一個程序上下文接近它。

這顯然是錯誤的。 MVC與面向對象編碼無關。

MVC是一種軟件體系結構模式,旨在將用戶與信息的表示分離開來。

你是如何做到這一點取決於你的。你可以使用你想要的任何編碼形式,面向對象,程序,功能以及不是什麼。

關於手頭的問題:在編寫過程式PHP時,實現MVC模式的最簡單方法是使用許多小函數,其中每個特定函數都有自己獨特的任務。不要讓一個功能有很多任務。這樣分離事情就更容易了。也不要在同一個文件中保存很多功能。而是把相關的功能集中在一個小組中,每個小組放在它自己的文件中(實際上在OO中用類來完成)。

有人在這裏做它用一個簡單的例子,MVC沒有面向對象:http://www.fluffycat.com/PHP-Design-Patterns/Non-OO-MVC/

11

是的,這大概總結了MVC ...但它沒有被面向對象的...你只需要遵循一些黃金法則:

  1. 控制器接收和處理輸入,生成任何數據並將其放入模型中。
  2. 視圖從模型獲取數據並呈現它。
  3. 控制器不應該將數據格式化爲視圖 - 它不應該知道視圖需要如何/爲什麼/什麼(例如,由於輸出可能是JSON,不會將HTML插入到文本字符串中)
  4. 視圖應該不自己查找任何數據 - 如果它不在模型中,則控制器在作業中失敗(拋出/報告錯誤)。

除此之外,你可以做任何你想做的事情。你基本上需要一組程序來充當控制器 - 解析$_REQUEST變量(更可能是GET/POST/COOKIE)執行任何數據查找building +填充模型,然後解析另一組程序,在模型中併爲用戶呈現。該模型可以像關聯數組一樣簡單。

0

這有點奇怪。 MVC是面向對象的模式,你想用程序上下文來處理它。

我想到的第一件事是有一些模板引擎爲了從PHP代碼中分離PHP。這將是程序性MVC的一大步:)

接下來就是命名同一組的函數(也就是說,包含相關對象的邏輯的函數)並帶有前綴(就像您在類名下面分組的方法一樣) 。

例如 - 看看PHP程序功能使用MySQL:

mysql_connect() 
mysql_real_escape_string(); 
mysql_select_db(); 
mysql_query(); 

等 和組這些功能在不同的文件。這也有助於解耦一些邏輯。

如果什麼都來我的腦海裏,我如果要實現一個新的設計模式,你最有可能被重構或者從頭開始編寫一些編輯自己的帖子:)

0

。如果您打算使用MVC,我強烈建議轉移到OOP。它可以在程序上實現,但會非常黑客,並不是一個好的解決方案。

有幾個免費的MVC PHP解決方案,你可以輕鬆地拿起。這裏有幾個:

  • Zend框架
  • Kohana的
  • 代碼Ignighter
0

絕對。使用以下任意組合:

  1. 使用包含文件。
  2. 使用功能。
  3. 分隔你的源文件。
  4. 在源文件中劃分代碼段。
  5. 使用代碼塊(花括號)。
  6. 獨立的PHP和/或HTML和/或JS文件。

任何將模型,視圖和控制器的行更多地組織代碼的東西。在某些人的想法中,它可能不是「純粹的」或「正確的」MVC ......但如果它更有意義地組織你的程序代碼或者教你更多關於MVC的知識,那麼這是件好事。

相關問題