Ok, quindi l'obiettivo qui è implementare un modello di strategia che può essere testato utilizzando qualsiasi tipo di strumento di test automatizzato.
Sono stato alle prese con questo problema concettualmente da alcune settimane e voglio chiarirlo.
Quindi la configurazione corrente è simile a questa:
<?php
// CreateReportUseCase.php
class CreateReportUseCase
{
protected $factory;
public function __construct(Factory $factory)
{
$this->factory = $factory;
}
public function create($params)
{
// based on something in the params
// ask the factory to give us one of the strategy classes
// for this example, let's assume I'm going to execute
// a different strategy based on the user role.
// e.g. Admin
$strategy = $this->factory->make($params['user_role']);
// execute the strategy using the data out of the params
$strategy->execute($params);
}
}
// Factory.php
class Factory
{
protected $admin_strategy;
protected $user_strategy;
public function __construct(AdminStrategy $admin_strategy, UserStrategy $user_strategy)
{
$this->admin_strategy = $admin_strategy;
$this->user_strategy = $user_strategy;
}
public function make($role)
{
switch($role)
{
case 'Admin':
return $this->admin_strategy;
break;
case 'User':
return $this->user_strategy;
break;
}
}
}
AdminStrategy implements RoleStrategy
{
public function execute($params)
{
// it's not important what we do here.
return json_encode($params);
}
}
Questo ti sembra sano di mente? Come potrei migliorarlo? Per me, la fabbrica sembra un po 'imbarazzante dal momento che sta solo restituendo alcune dipendenze iniettate invece di istanziare una strategia.