1

我正在为我的开源项目开发一个“胖模型” ,并且我正在研究位于 ORM (RedBeanPHP) 和控制器之间的层。

我将有一个User类,可能还有一个UserFactory/UserMapper类,它可以构造User对象,以及执行诸如usernameExists等元操作。

许多其他 SO 问题/博客文章指出,如果我需要检索对象集合User那么让我的UserMapper类遍历结果集并构建n 个 User对象将是低效的。

我的想法是创建一个UserCollection实现 PHP 类的ArrayObject类。 UserMapper将能够创建一个UserCollection在内部存储原始结果集的多维数组。然后我可以实现ArrayObject的迭代器函数[]等来User按需构造相应的对象。

这是一个聪明的方法吗?在采用这种方法之前,我需要考虑什么?

4

2 回答 2

0

要呈现大数据列表,实际上每行使用一个实例会更慢。这就是享元模式派上用场的地方...... http://sourcemaking.com/design_patterns/Flyweight/php

于 2015-03-11T21:50:15.857 回答
0

看起来这正是 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 框架是这样做的,我会说这是一个很好的认可。

于 2015-03-12T00:36:28.137 回答