Сначала я сделал следующее, чтобы выполнить все проверки в AttachMembersToRoom :
Код: Выделить всё
class AttachMembersToRoom
{
public function __invoke(MyData $data)
{
some logic here...
foreach ($this->validators() as $validator) {
$validator()($data);
}
}
/**
* @return callable[]
**/
private function validators(): array
{
return [
fn () => app(CompareMembersValues::class),
fn () => app(IdentifyOverlaps::class),
...
...
];
}
}
поэтому я решил привязать его к контейнеру сервиса, вот так:
Код: Выделить всё
$this->app->tag([
CompareMembersValues::class,
IdentifyOverlaps::class,
], 'memberValidators');
Код: Выделить всё
class AttachMembersToRoom
{
public function __construct(#[Tag('memberValidators')] protected iterable $memberValidators) {}
public function __invoke(MyData $data)
{
some logic here...
foreach ($this->memberValidators as $validator) {
$validator($data);
}
}
}
Но моя цель всего этого — тестируемость... в какой-то момент я хочу поиздеваться над каждым из этих валидаторов.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... ight-thing
Мобильная версия