2009-09-30 80 views
0

我有一個基於簡單的MVC原則的PHP網站。我目前有一個模型文件,其中包含許多用於從數據庫獲取數據的函數。不過,現在它變得有點龐然大物,所以我想將它分成不同的模型。問題是 - 做這件事的最好方法是什麼?我應該如何在我的PHP應用程序中分割MVC模型?

爲每個表創建一個類是一個好主意,所以我可以返回一個對象或對象數組(比如說,一列文章)?或者在飛行中創建對象/數組更簡單嗎?

回答

2

我會爲每個表格創建一個模型。就像你現在所知道的那樣,一個單體桌子是一個噩夢,可以在路上保持6個月。

至於valya的例子: 我會創建一個用戶模型和婚姻模型,其所有通常的插入/編輯/刪除/獲取功能,如isMarried(),它稱爲婚姻模型。即

class UserModel { 
    public function isMarried($user_id) { 
     return $marriages->findById($user_id); 
    } 
} 

無論你決定去哪裏儘量保持簡單。長遠來看,簡單比聰明更好。

+0

表示實際用戶的對象呢?你的意思是我應該有一堂課嗎?換句話說,像'$ UserModel-> getUsersByName($ name)'這樣的函數會返回一個'User'對象,以便我可以訪問'$ User-> surname'等。 – DisgruntledGoat 2009-10-01 00:02:39

+0

所有這些都可以在一個UserModel類中處理。調用$ UserModel-> getUsersByName($ name)的函數可以返回一個用戶信息數組,這將允許您訪問數組中的姓氏。即。 $用戶[ '姓'] – cp3 2009-10-01 17:23:44

1

這取決於:)

我認爲這是一個好主意,爲每個對象(不是每個表)創建一個類。例如,如果你有表:

Users(uid, name, ...) 
Marriages(h_uid, w_uid) 

這將是冷靜地只創建用戶類像一些方法 - > isMarried()

0

對於PHP,我會根據數據使用情況和訪問模式創建類。有一個類包含一組「核心」功能,這些功能可能用於每次擊中。然後爲您的應用程序的每個「部分」分配一個類,這將在需要時加載。

這不是「正確的」或最好的面向對象的方法,但它會降低開銷。爲每個對象分配一個類將會非常棒,但PHP必須在每次點擊時從頭開始加載和創建所有內容。需要加載的文件和創建的對象越多,PHP得到的速度越慢。

你不應該需要訪問十幾個不同的文件,只是爲了響應Ajax調用來確定是否有人結婚。

0

我會退後一步,看看你的應用程序,除了數據庫一秒鐘。如果數據庫從未涉及,您的應用程序將是什麼樣子?你的班級將被稱爲什麼?你會有什麼樣的物體?他們會做什麼?設計您的應用程序,然後決定如何保持其數據。

我想要的是,我認爲,更像是上面提到的每桌類設計,儘管我會把它轉過來說它是每班一桌。設計您的系統,然後找出在數據庫中表示數據的最佳方式。 Doctrine是一個很好的系統,但您可以通過更多的手動數據庫步驟來做到這一點。

至於涉及的開銷,它實際上取決於你將在每個請求中實例化多少個不同的類。是的,你可以通過使用通用的「fetcher」類來節省開銷,這些類根本不會真正返回對象(或者返回對象是一堆應該是分離對象的大雜燴),但是然後參數可以被貫徹到根本不使用任何類別的類別。無論何時使用任何類型的面向對象編程,函數庫或其他任何必須包含的東西,都會有額外的開銷。但是我們沒有製作單一文件PHP站點的原因是因爲發生的開銷是可承受的,並且比通過其他方式產生的開發人員開銷要容易得多。

相關問題