我正在为我的开源项目开发一个"胖模型",我正在研究位于ORM(RedBeanPHP)和控制器之间的层。
我将有一个User
类,可能还有一个UserFactory
/UserMapper
类,可以构造User
对象,以及执行usernameExists
等元操作。
许多其他 SO 问题/博客文章指出,如果我需要检索User
对象的集合,让我的 UserMapper
类遍历结果集并构建 n 个User
对象将是低效的。
我的想法是创建一个实现PHP ArrayObject
类的UserCollection
类。 UserMapper
将能够创建一个UserCollection
,将原始结果集作为多维数组在内部存储。 然后,我可以实现ArrayObject
的迭代器函数,[]
等,以按需构造相应的User
对象。
这是一种聪明的方法吗? 在采用这种方法之前,我需要考虑什么?
要呈现大型数据列表,使用每行一个实例实际上会更慢。这就是蝇量级模式派上用场的地方......http://sourcemaking.com/design_patterns/Flyweight/php
看起来这正是Laravel的ORM,Eloquent的做法:
class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable {
...
public function fetch($key)
{
return new static(array_fetch($this->items, $key));
}
}
如果最流行的PHP框架是这样做的,我会说这是一个很好的认可。