2012-01-22 50 views
3

我正在開發PHP Web應用程序很長時間,但現在正在學習OOP方法。爲了學習和練習,我正在開發一個簡單的「多項選擇問題」網絡應用程序。當註冊用戶登錄時,他會看到一個測驗列表。他選擇一個並用多個答案獲得問題,其中任何一個都是正確的。學習OOP PHP:識別類,測驗系統的關聯

我的問題是:

  1. 什麼是確定類的規則?我認爲「測驗」,「問題」 和「答案」可以聲明類。我對嗎?
  2. 這些類別中的關聯類型是什麼(或者您建議使用 )。什麼是識別關聯的規則?
  3. 如何分離或呈現系統類(例如數據庫,驗證 類)和業務域類?

如果答案可以在測驗系統中提供,我會很感激,因爲我已經閱讀了很多關於「動物狗」類的例子......感謝您的支持。

+0

一本很好的書,雖然它不是PHP的具體內容,但是是Eric Evans的Domain Driven Design。在這本書中,他涵蓋了許多您所要問的問題,例如如何識別域類和單獨的關注層。 – eli

回答

0

那麼,就我所知,OOP試圖讓我們的程序員變得更簡單,更容易理解和更具可讀性。

沒有規則來識別類。每個程序員都可以爲類似的項目實現不同的類。當我決定實施哪些課程時,我會問自己的問題 like:

  • 我需要實現哪些功能?
  • 我的功能是否支持我項目中的類似元素?

下面是我當前項目的一個示例:我正在製作一個分析系統,爲用戶呈現圖形。我做了2個班,一個叫analytic,第二個叫analyticQueries。第一個負責所有分析數據庫更新,第二個負責從數據庫獲取數據併爲圖形引擎做好準備。

爲什麼我沒有製作一個database類?好吧,我認爲這樣會太沉重,而且正如我所看到的,有兩個主題需要分離以更好地理解該程序的工作方式:一個是編寫數據庫,另一個是從中讀取數據。

類(和規劃你的數據庫的一個好辦法)思維的另一種方法是問自己這些問題:

    是誰,用項目
  • 那些使用它的人的行爲是什麼?
  • 誰在使用誰? (它可以幫助你建立關聯,在我的項目中,兩個分析類都連接到數據庫,我可以創建第三個類幷包含在兩個類中,但我認爲它不會那麼大而且這不是項目中需要自己班級的核心)。

在您的網站中,用戶是登錄的用戶,因此您肯定需要在數據庫中使用user表。你肯定需要一個questions表,也許answers表。

你可以根據你的數據庫決定你想要的類,例如userManager可以是一個負責所有用戶動作(登錄,更新細節等等)的函數,並且有一個questionManager來處理問題提出並驗證答案。

3

OOP的一個特別的風格,你會發現有用的是Model View Controller範例。

PHP中的類通常是'對象'的表示,或理想地完成特定任務的事物。它們的集合可以一起工作來提供更全面的功能,而孤立地使用很少。

在MVC中,這些類是一般分成(簡單的說):

  • 模式:類,幫助你與你的數據庫。每個表格都有一個模型,每個模型都會爲您提供保存和檢索數據的能力,以及事實前後的操作。在你的情況下,一個問題將是一個模型,它可能包含問題本身和答案。

  • 觀看次數:這些不是類,而是您的原始HTML模板,它們通過控制器注入模型中的數據。就你而言,一個觀點可能是一個問題觀點。另一個可能代表索引頁面。另一個可能會提供問卷的結果。

  • 控制器:作爲視圖和模型之間的中間人的類。他們將從相關模型中獲取數據並將其傳遞給視圖。在你的情況下,這可能是一個測驗控制器。它會從數據庫中提取請求的問題並將其提供給視圖,並在提交答案時,控制器會將其傳遞給模型以查看它是否正確,然後採取相應措施。

這背後MCV駐留在一個框架(預製的,或者一個你滾你自己),它提供了一批圖書館和抽象層來幫助你專注於你的應用程序邏輯。所以會有像ActiveRecord這樣的數據庫抽象,將會有常用程序函數的包裝,在OOP環境中呈現,將有模板系統幫助將數據傳遞到視圖並對其進行格式化等等。

如果您想要朝這個方向前進,可以考慮使用現有的框架,如CakePHPCodeIgniter來給您一個開頭。他們會熟悉OOP(在某種程度上)以及如何使用類對大型項目有益。