Сервисный контейнер 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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