【发布时间】:2010-01-09 10:17:48
【问题描述】:
假设您要构造一个输出 File 对象的迭代器。你通常会向这样的 Iterator 的构造函数提供什么类型的数据?
- 一组预先构建的 File 对象,或
- 简单的原始数据(例如多维数组),并让迭代器在迭代时动态创建文件对象?
编辑:
尽管我的问题实际上是尽可能笼统的,但似乎我的示例对于一般性来说有点宽泛,所以我会详细说明一下。我所说的 File 对象实际上是来自数据库的文件引用。请参阅这两个表:
folder
| id | folderId | name |
------------------------------------
| 1 | null | downloads |
file
| id | folderId | name |
------------------------------------
| 1 | 1 | instructions.pdf |
它们引用文件系统上的实际文件夹和文件。
现在,我创建了一个 FileManager 对象。这将能够返回文件夹和文件的列表。例如:
FileManager::listFiles( Folder $folder );
...将从数据库中返回一个 File 对象的迭代器(或者,想想看,它是 FileReference 对象)。
所以我的问题归结为: 如果 FileManager 对象在 listFiles() 中构造迭代器,你会做这样的事情吗(伪代码):
listFiles( Folder $folder )
{
// let's assume the following returns an multidimensional array of rows
$filesData = $db->fetch( $sqlForFetchingFilesFromFolder );
// let the Iterator take care of constructing the FileReference objects with each iteration
return FileIterator( $filesData );
}
或(伪代码):
listFiles( Folder $folder )
{
// let's assume the following returns an multidimensional array of rows
$filesData = $db->fetch( $sqlForFetchingFilesFromFolder );
$files = array();
for each( $filesData as $fileData )
{
$files.push ( new FileReference( $fileData ) );
}
// provide the Iterator with precomposed FileReference objects
return FileIterator( $files );
}
希望这能澄清一点。
【问题讨论】:
标签: language-agnostic oop iterator