你使用什麼PHP應用程序設計/設計模式?




oop software-design (8)

使用Zend FrameworkDoctrine ,我的文件夾結構通常如下所示:

root
  app
    config         (db config, routing config, misc config)
    doctrine       (fixtures, migrations, generated stuff, etc)
    lib
    logs
    models         (doctrine models)
    modules        (zend mvc modules)
    bootstrap.php
  docs             (db diagrams, specs, coding standards, various docs)
  pub              (web root)
  tests
  tools            (console tools, i.e. doctrine-cli)
  vendor           (zend and doctrine libraries, preferably as svn-externals)

請和我一起分享您最喜愛的應用程序設計/設計模式以供在PHP中使用。 有些事情我想知道:

  • 你的文件夾是如何設計的
  • 如何在PHP應用程序中使用對象oritentation
  • 你有處理CRUD,分頁或其他常見任務的標準方式嗎?
  • 你如何避免使用重複的代碼? 你有什麼方法來圖書館/共享通用代碼等?
  • 什麼方法可以讓你的代碼更優雅?

你不必回答所有這些,回答這些或其中一些將是有益的。

我這樣問的原因是因為我厭倦了在PHP中編寫重複的醜陋的代碼,我想為自由職業者的項目製作一個小框架,這將使編程更容易,讓我專注於具有挑戰性的任務而不是形成驗證,分頁和其他世界性的活動,這些活動佔了PHP編程工作的80%

所有意見表示讚賞


Answer #1

當我第一次厭倦了混合代碼和html時,我開始使用smarty模板引擎。 經過一段時間的黑客攻擊,我意識到編寫自己的框架只是重複工作。

我已經做了一些Joomla項目,這是一個真正的CMS,但它給客戶很多的內容控制。

最終,我已經決定使用一個真正的框架為我的項目。 我使用的是symfony ,它受Rails的啟發,並且有很好的文檔記錄,但是我聽說cakePHPZendFramework也非常好。


Answer #2

我使用Zend Framework,它幾乎定義了文件夾佈局和OOP(MVC範例)。 對於常見的任務,例如分頁我使用Zend_Paginator (我的模型類實現Zend_Paginator_Adapter_Interface ),驗證我使用Zend_Validate類等。由於這一點,我可以完全專注於業務邏輯,而不是重新發明輪子。


Answer #3

我幾乎感覺像是一個破碎的記錄,但我建議你看看一些常見的框架,有兩個原因:

  1. 即使你選擇不使用,其中一些寫得很好,設計也很好。 我特別喜歡Zend Framework,但我會在一秒鐘之內回來。
  2. 問自己為什麼要重新發明輪子。 你真的覺得你理解其他人面臨的相同的設計問題比背後的社區要好得多嗎(在這裡插入選擇的框架)來證明從頭開始寫點東西是正確的嗎? 作為一個最初研究幾個框架的人,他們認為他們太大了,提出了太多的學習曲線或者太多的開銷,所以我自己開發了,我可以告訴你,從頭開始寫你自己是一個很大的痛苦,如果你可以簡單地使用現有的,可以很容易地擴展。

說到使用一個可以輕鬆擴展的框架,我對Zend Framework有非常積極的經驗。 它是內聚的,而鬆耦合的結構使得可以快速和容易地擴展任何現有的組件,並且整個框架圍繞這個想法設計,即您將需要編寫自己的幫助器和插件類來添加其整體功能。

我發現Zend Framework是非常靈活的,我運行一個單獨的網站作為Zend Framework MVC的一部分,並成為我舊的糟糕的框架,甚至更老的代碼,我還沒有重寫。 事實上,因為在我們的重寫過程中,我們發現使用舊框架的頁面運行速度慢得讓人難以接受,所以我已經將單頁切換到了Zend Framework架構下運行。

要回答您的一些問題,我建議您查看Martin Fowler的企業應用程序體系結構模式。 他提供了許多有關如何解決這些常見問題的寶貴見解,例如如何在應用程序中創建數據庫交互層。 福勒還涵蓋了MVC和Front Page Controller等主題。


Answer #4

我在這裡解釋了我的大多數PHP方法。

但現在,我只是在任何地方使用Django。


Answer #5

我不得不同意上面的海報。 如果您在使用PHP進行編程時不使用框架,那麼確實是用雙手綁在背後編程的。 我個人推薦CodeIgniter 。 這是最快的框架,很容易學習,並且有一個非常活躍的社區。 您的所有問題都將由框架回答:

* How your folders are designed

CodeIgniter(或者任何相關的框架)把你的邏輯分成視圖,模型和控制器,每個視圖都有自己的文件夾。

* Do you have a standard way of dealing with CRUD, pagination, or any other common tasks?

CI有一個分頁庫,它有像DataMapper這樣的第三方庫,用於以面向對象的方式(ORM)封裝你的CRUD調用。

* What are ways in which you can make your code more elegant?

模型,視圖和控制器的分離使代碼非常優雅。

(使用框架時,我沒有回答的兩個問題幾乎是隱含的)


Answer #6

我一直在搞我自己的東西一段時間,現在每次我都無法完全完成它,因為我被卡住了。

然後,我來實現我是否做對了一部分。

因此,我已經放棄了寫我自己的一個人群最喜歡的:Zend。

我看著別人,但似乎Zend已經有一段時間了,他們知道他們的事情。

MVC也是我現在寫的東西。


Answer #7

我想很多PHP開發人員都遵循類似的路線:小腳本 - >程序/內聯代碼 - >可能看看模板 - > OOP - >然後框架。 我認為PHP開發人員可能已經習慣於使用PHP“成長”,學習設計模式以匹配當前版本的可用功能。

MVC是當今流行框架中最常用的設計模式。 CakePHP是我的首選框架,儘管SymphonyZend也很受歡迎 - 值得嘗試一下,很快就會變得很明顯,你會感覺最舒服的。

對於大多數項目(快速開發和可移植代碼是優先考慮的),我使用Cake,但是對於輕量級應用程序(我最近開發的一個是Good Baad ),您希望快速運行(在低規格硬件上),並且不需要由大型框架之一的功能所增加的體積/重量我推薦閱讀Rasmus Lerdorf關於他的No Framework PHP MVC框架的文章。

基本上,如果你是在一個真正的面向對象的語言,鼓勵美麗的代碼和最好的設計實踐之後,PHP總是會失去像Ruby Python和C#的。 但是,PHP有其優勢,例如不需要模板語言(它是一種),PHP可以非常快速且便宜地運行,並且不需要所有應用程序的大型框架。

我鼓勵採用一種設計模式,將設計模式的可管理性(如MVC)與PHP的優勢結合起來。





software-design