Ho un compito, un proprietario e un piano. I valori di carica sono mantenuti in un piano, il proprietario è su un piano particolare e l'attività conosce il suo proprietario.
Un'attività deve impostare i suoi addebiti in base alle conoscenze del proprietario. Il proprietario ha comunque bisogno di consultare un piano per farlo. Secondo la Legge di Demetra non mi è permesso fare:
class Task {
/**
* @var Owner
*/
private $owner;
public function prepareCharges() {
$plan = $this->owner->getPlan();
$plan->chargeFor(...);
}
Quindi mi chiedo se questo tipo di trucco di routing sia una soluzione praticabile.
class Task {
/**
* @var Owner
*/
private $owner;
public function prepareCharges() {
$this->owner->helpMeDoTheCharges($this);
}
public function doPlanCharges(Plan $plan) {
$distanceCharge = new Money();
$plan->chargeFor('distance', $distanceCharge);
$fixedCharge = new Money();
$plan->chargeFor('fixed', $fixedCharge);
}
}
L'attività in pratica dice al suo proprietario di inviare il piano in modo che possa inviarlo messaggi.
class Plan {
public function chargeFor($type, Money $money) {
}
}
class Owner {
private $plan;
public function helpTaskDoTheCharges(Task $task) {
$task->doPlanCharges($this->plan);
}
}