Sto scrivendo una classe Gateway che estrae le informazioni da un documento HTML. Una delle responsabilità della classe è quella di attraversare una tabella nel documento ed estrarre i dati dalle sue righe. Sto cercando di decidere come rappresentare al meglio una riga, e ho trovato due soluzioni (in semi-pseudo codice).
Potrei rappresentare ciascuna riga come un array associativo:
class Gateway
{
private $crawler;
public function __construct($crawler)
{
$this->crawler = $crawler;
}
public function getRows()
{
$this->crawler->xpath('...')->each(function($node, $i)
{
return [
'someInfo' => $node->xpath('...'),
'someOtherInfo' => $node->xpath('...')
];
});
}
}
Potrei alternativamente avvolgere ogni riga nel suo stesso Gateway (tuttavia, non so se è una buona pratica essere un'istanziazione hard-coding come questa):
class Gateway
{
private $crawler;
public function __construct($crawler)
{
$this->crawler = $crawler;
}
public function getRows()
{
$this->crawler->xpath('...')->each(function($node, $i)
{
return new RowGateway($node);
});
}
}
class RowGateway
{
private $crawler;
public function __construct($crawler)
{
$this->crawler = $crawler;
}
public function getSomeInfo()
{
return $node->xpath('...');
}
public function getSomeOtherInfo()
{
return $node->xpath('...');
}
}
Qual è l'approccio preferibile qui? Sono aperto anche ad altri progetti.