Сервисный контейнер Laravel: правильно ли я делаю?Php

Кемеровские программисты php общаются здесь
Anonymous
Сервисный контейнер Laravel: правильно ли я делаю?

Сообщение Anonymous »

У меня есть вызываемый класс действий под названием AttachMembersToRoom . Теперь, помимо основных проверок запроса формы, у меня также есть сложная проверка, такая как сравнение значений между членами, выявление перекрывающихся комнат участников и многое другое... поэтому я решил превратить каждую проверку в собственные вызываемые классы, такие как CompareMembersValues, идентификацииOverlaps и другие....
Сначала я сделал следующее, чтобы выполнить все проверки в 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),
...
...
];
}
}
но, глядя на это, я думаю, что немного излишне использовать app() для каждого имеющегося у меня валидатора.
поэтому я решил привязать его к контейнеру сервиса, вот так:

Код: Выделить всё

$this->app->tag([
CompareMembersValues::class,
IdentifyOverlaps::class,
], 'memberValidators');
и в AttachMembersToRoom я внес следующие изменения:

Код: Выделить всё

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

Вернуться в «Php»