2013-10-07 85 views
1

我的User類中有一個靜態getUser($ userID)方法,它查詢數據庫併爲給定的用戶ID返回一個User對象。PHP類設計 - 獲取多個對象

有時,我有多個用戶需要同時獲得。我已經提出了兩種選擇:

  1. 創建一個getUsers()方法,它可以接受多個ID並執行一個查詢。
  2. 創建一個getUsers()方法,該方法可以接受多個ID,但使用getUser方法(多個DB查詢)。

在這兩種情況下,我都會返回一個User對象數組。但是,如果用戶ID有效或不存在,會發生什麼?只需從數組中排除該用戶?看起來很奇怪。

因此,這將是巨大的,得到答案:

  • 我應該使用選項1或2?
  • 發生無效用戶ID時會發生什麼情況,請忽略它?或拋出異常?

隨意批評靜態方法getUser()的用法,我不知道該放哪個方法,謝謝。

+1

使用最上面的一個。減少dbms的開銷,減少查詢。底層會殺死性能,當它需要處理很多用戶時。 – BlitZ

+0

因此,在沒有找到該用戶身份的情況下會發生什麼情況。返回一個空的用戶對象?或者只是從數組中排除? – paul

+0

例如,使用MySQL'IN()'語句來過濾查詢。您可以構建只返回現有查詢的查詢。然後在php中檢查結果。如果有一些'id's,沒有關聯的記錄,那麼你可能會拋出異常,如果需要的話。 – BlitZ

回答

0

這是我不認爲你應該優化,直到它成爲一個瓶頸。

如果你把它分開,它會更乾淨。實際上,我甚至會建議您創建另一個文件夾並將其稱爲集合。在那裏你有例如一個UserCollection,允許你遍歷不同的用戶集合。用current()方法返回一個用戶對象。

對於getUser()部分,我會將諸如用戶對象之類的東西放到名爲entities的文件夾中。這些對象處理單個用戶的CRUD操作,而集合用於返回用戶組(或單個用戶)。

在實體部分,如果找不到東西,可以拋出異常。該集合應該只返回有效的ID。

作爲旁註,在使用迭代器時,還可以在集合中混合不同的對象,在某些情況下,這可能非常有用。

0
use the first one like 
1)Create a getUsers() method which can take multiple ID's and does one query. 
because it make efficient to your application rather than use the second one , 

if you use the second one it create a instance each time, it affect your application performance so only here i suggest the first one