[oop] waar hoort het ID?
Een vraagje. Als ik een service-object toevoeg aan een service-container, wat is dan logischer:
1) Ik geef het ID mee aan het service-object zelf, en de container haalt het ID uit het service-object:
Code (php)
1
2
3
4
2
3
4
<?php
$service = new service($definition, 'foo'); // foo is het ID
$container->add($service);
?>
$service = new service($definition, 'foo'); // foo is het ID
$container->add($service);
?>
2) Ik geef het ID mee aan de container (het service-object kent z'n eigen ID niet):
Wat is logischer, en waarom?
1) is logischer omdat het id gewoon data is van het object zelf en niet van de container. wat ga je doen als je meerdere objecten van hetzelfde type hebt in je container? ga je daar een aparte array voor aanmaken dan? not done lijkt me.
>> wat ga je doen als je meerdere objecten van hetzelfde type hebt in je container
Wat bedoel je met "meerdere objecten van hetzelfde type"?
Toevoeging op 28/08/2014 17:51:41:
die container houdt meerdere services in beheer right?
dat doe je neem ik aan met behulp van een array
Is een moeilijke vraag. In principe is het een identifier voor de service in een container, dus het is onderdeel van de container en niet van de service. Aan de andere kant gebruik je de identifier van een service in de service definitie om hem bijv. te injecteren. Wanneer het ID onderdeel is van de container kan het zo zijn dat dezelfde service definitie in 2 containers een compleet ander ID heeft, wat leid tot het aanpassen van de service definities die hem gebruiken.
maar in de container kun je kiezen voor:
$services[] = new Service($id);
of
$services[$id] = new Service(); // nadeel is je kunt geen twee services opslaan met hetzelfde id
// voordeel is je hebt geen foreach nodig om een object met id x te vinden
of zit ik nu over iets anders te dubben dan jullie?
Gewijzigd op 28/08/2014 18:01:36 door Frank Nietbelangrijk
Hmm, Frank heeft daar een goed punt. Als je het ID loskoppelt van de service definitie kun je meerdere services maken vanuit dezelfde definitie. Zo kun je bijv. een event dispatcher voor flow events, maar ook een event dispatcher voor domain events maken vanuit dezelfde definitie.
>> $services[$id] = new Service(); // nadeel is je kunt geen twee services opslaan met hetzelfde id
Dit is de manier waarop ik het wil opslaan in de array binnen de container. Ik wil dus niet dat er meerdere services zijn met dezelfde ID, want aan de hand van de ID moet ik een unieke service kunnen ophalen, bijv. $container->get('foo') waarbij 'foo' een unieke identifier is. De vraag is nu alleen, waar komt die $id vandaan? Vanuit de service $service = new service($definition, 'foo') of geef je 'm mee aan de container $container->add($service, 'foo')? Wat is de beste optie? Hoort het ID bij de service, of hoort het bij de container?