使用PHP的ArrayObject实现模型对象集合
Using PHP's ArrayObject to implement a collection of model objects
我正在为我的 open-source project 开发一个 "fat model",我正在处理位于 ORM (RedBeanPHP) 和控制器之间的层。
我会有一个 User
class,可能还有一个 UserFactory
/UserMapper
class 可以构造 User
对象,因为以及执行 usernameExists
等元操作
许多其他 SO questions/blog 帖子指出,如果我需要检索 集合 的 User
对象,则效率低下让我的 UserMapper
class 遍历结果集并构建 n User
对象。
我的想法是创建一个 UserCollection
class 来实现 PHP 的 ArrayObject
class。 UserMapper
将能够创建一个 UserCollection
将原始结果集存储在内部,作为多维数组。然后我可以实现 ArrayObject
的迭代器函数、[]
等来按需构造相应的 User
对象。
这样做明智吗?在采用这种方法之前我需要考虑什么?
要呈现大数据列表,实际上每行使用一个实例会更慢。这就是享元模式派上用场的地方......
http://sourcemaking.com/design_patterns/Flyweight/php
看起来 this is exactly how Laravel's ORM, Eloquent, does it:
class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable {
...
public function fetch($key)
{
return new static(array_fetch($this->items, $key));
}
}
如果最流行的 PHP 框架是这样做的,我会说这是一个很好的认可。
我正在为我的 open-source project 开发一个 "fat model",我正在处理位于 ORM (RedBeanPHP) 和控制器之间的层。
我会有一个 User
class,可能还有一个 UserFactory
/UserMapper
class 可以构造 User
对象,因为以及执行 usernameExists
等元操作
许多其他 SO questions/blog 帖子指出,如果我需要检索 集合 的 User
对象,则效率低下让我的 UserMapper
class 遍历结果集并构建 n User
对象。
我的想法是创建一个 UserCollection
class 来实现 PHP 的 ArrayObject
class。 UserMapper
将能够创建一个 UserCollection
将原始结果集存储在内部,作为多维数组。然后我可以实现 ArrayObject
的迭代器函数、[]
等来按需构造相应的 User
对象。
这样做明智吗?在采用这种方法之前我需要考虑什么?
要呈现大数据列表,实际上每行使用一个实例会更慢。这就是享元模式派上用场的地方...... http://sourcemaking.com/design_patterns/Flyweight/php
看起来 this is exactly how Laravel's ORM, Eloquent, does it:
class Collection implements ArrayAccess, Arrayable, Countable, IteratorAggregate, Jsonable, JsonSerializable {
...
public function fetch($key)
{
return new static(array_fetch($this->items, $key));
}
}
如果最流行的 PHP 框架是这样做的,我会说这是一个很好的认可。