Ik heb weer even een OOP vraag.
Ik heb een container die services bevat. Heel simplistisch gesteld vraag ik aan de container een ID op, en dan krijg ik een (geconfigureerd) object terug. De verdere werking is voor mijn vraag niet echt relevant. Voorbeeldje:
<?php
$mailer = $container->get('mailer');
?>
Wat ik op dit moment doe is (zeer vereenvoudigd!) dit:
Ik heb een configuratie-bestand waar ik de ID's en de (geconfigureerde) objecten in zet:
Foo
class: Foo
Bar
class: Bar
parameters:
foobar: true
Nogmaals, het is allemaal wat versimpeld, maar het gaat om het globale idee.
Ik laad het configuratie-bestand in als een array en sla de gegevens rechtstreeks op in een class property (array) van de container class. En dit is waar mijn vraag vooral over gaat. Ik sla de gegevens dus op in een class property, en als ik een service (object) nodig heb dan wordt deze aan de hand van de gegevens uit de array geconstrueerd.
Schematisch:
$container->addConfig($config); // $config zijn de gegevens uit het config-bestand
$foo = $container->get('foo');
De vraag is of ik de gegevens uit het config-bestand direct in een class property (array) moet zetten, of dat het beter is om van ieder configuratie "item" een apart object te maken en deze aparte objecten op te slaan in een class property?
Ik kan me voorstellen dat het best lastig is om te volgen wat ik bedoel, maar ik hoop dat iemand het begrijpt.
Als ik de vraag heel plat stel, dan is eigenlijk de vraag: kan ik de array met configuratiegegevens in 1 keer in z'n totaliteit in een class property stoppen? Of is het de bedoeling dat ik van ieder element in de array een object maak, en dat ik al die afzonderlijke objecten toevoeg aan de class property in de container?
Nu doe ik zeg maar (weer even heel erg versimpeld) dit:
<?php
class Container {
private $config;
public function addConfig(array $config) {
$this->config = array_merge($this->config, $config);
}
public function get($id) {
$class = $this->config[$id]['class'];
return new $class;
}
}
?>
Is dit een goede manier? Of is eerder dit de bedoeling:
<?php
class Container {
private $config;
public function addConfig(array $config) {
foreach ($config as $id => $service_config) {
$this->config[$id] = new Service($service_config);
}
}
public function get($id) {
$class = $this->config[$id]->getClass();
return new $class;
}
}
?>
Het verschil zit 'm er dus in dat ik in de eerste situatie geen gebruik maak van afzonderlijke objecten (de informatie komt rechtstreeks uit de array), en in de 2e situatie wel.
Welke van deze 2 opties is de juiste OOP gedachtengang? Optie 1 of optie 2?