2013-10-07 58 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