2012-06-10 82 views
0

我遇到了一個問題,我一直無法得到我的頭。我正在使用php開發自己的web應用程序框架。我知道這裏有很多好東西,但我喜歡玩這個,我沒有用它來做任何敏感的生產。如何設置抽象層和模塊

所以,這裏是問題:我有一個抽象的基類,其中包含一些功能,我希望所有的模型繼承。還有一個抽象的基本控制器,它擴展了基本模型和基本操作的功能。 目前,所有創建的模型都擴展了基礎模型,所有控制器擴展了基礎控制器。所以,所有的控制器也通過Base控制器繼承Base模型。 但是現在我無法從模型控制器訪問模型屬性,因爲模型擴展了基本控制器,對於擴展基本控制器的模型來說似乎很奇怪。

我應該如何設置,以便我可以從各自的控制器訪問模型屬性?

謝謝!

+1

究竟爲什麼你需要'BaseController'延長'BaseModel'?你以這種方式解決什麼問題? –

+0

BaseModel定義了__set和__get等函數。 BaseController具有獲取數據發送到視圖等操作。 我想所有的函數都可以進入一個BaseClass,但由於BaseController中的內容是對數據的操作,而BaseClass中的內容涉及到這些屬性,因此將它們分開似乎是合乎邏輯的。 – Abel

+0

我不明白爲什麼控制器需要魔法獲取器和設置器。另外,你應該避免它們。魔術獲得者/制定者帶有表現懲罰。其他問題將是 - 你會如何執行'$ something-> email' **不能**包含無效的電子郵件地址? –

回答

2
  • 首先,對我來說,你認爲什麼是Model .. well ..是不好的。也許this comment會有所幫助。

  • 其他的事情,這似乎是錯誤的,其整個畫面是這樣的:

    所以,所有的控制器也通過基礎控制器基礎模型中繼承。

    您應該避免深度繼承。並且由於控制器什麼你呼叫模型有完全不同的責任,應該沒有什麼都繼承。您必須瞭解extendsis-a的同義詞。

    如果您編寫class Admin extends User,則表示每個管理員都是用戶。這也意味着,當你寫class User extends Table,這是錯誤的(..有點侮辱)。

  • 控制器不應該讀屬性什麼,你叫模型(假設你是不是implementing MVP模式代替)。這部分應該由查看,因爲這將是負責表示邏輯的部分。

    併爲此你什麼叫你模型應該有特定的獲得者。你不應該直接暴露屬性(如在設置它們public),因爲那樣你就會破壞封裝。

..我3美分

+0

嗯,我想我對MVC的解釋並不完全正確。正如我從你發佈的鏈接瞭解到的,MVC實際上並不存在於web開發中。 我的模型保存了數據庫表的映射並保存從數據庫加載的數據,控制器保存數據的所有操作以及視圖處理模板。 – Abel

+0

@Abel,你是如何得到MVC不被使用的印象的?我剛剛寫到[古典MVC](http://www.itu.dk/courses/VOP/E2005/VOP2005E/8_mvc_krasner_and_pope.pdf)(定義在80年代)不友好。這就是爲什麼存在**被使用的4種不同的類MVC模式。 –

+0

嗯,我只是指這個聲明:「祕訣是:在PHP中編寫MVC是不可能的。」我想,在我的例子中,我試圖實現Model2 MVC。 – Abel