Как улучшить структуру метода, чтобы уменьшить параметры?

Во многих методах классов обслуживания я повторяю код, подобный следующему:

$model->addEvent($provider->id, 'installing', 'username', 'add', 'Description of event');

$this->worker->uploadFile($provider->id, 'root', $file);

Много разных $model буду иметь addEvent() что делается через черту.

Как я могу преобразовать эти две строки в метод с удобочитаемыми / запоминающимися параметрами?

Я пробовал следующее:

public function deploy($model, $providerId, $status, $user, $action, $file, $description = null)
{
$model->addEvent($providerId, $status, $user, $action, $description);

$this->serverWorker->uploadFile($providerId, $user, $file);
}

Что мне не нравится в этом методе, так это слишком много параметров.

Использование:

Например, 1 deploy($site, 1, 'In Queue', 'root', 'create', $file, 'Installing Site domain.com')

Например, 2 deploy($rule, 1, 'In Queue', 'root', 'update', $file, 'Updating Rule')

Например, 2 deploy($something, 1, 'In Queue', 'root', 'delete', $file)

1

Решение

Вы можете попробовать обернуть общие конфигурации в небольшие повторно используемые классы, например, так:

public function deploy($model, FileDeployTarget $target, $description = null)
{
$model->addEvent($target->providerId, $target->status, $target->user, $target->action, $description);

$this->serverWorker->uploadFile($target->providerId, $target->user, $target->file);
}

И еще где-то:

class UpdateInQueue extends FileDeployTarget {
public $status = 'In Queue';
public $action = 'update';
}

FileDeployTarget и его потомки будут обрабатывать все дополнительные параметры в своих конструкторах.

1

Другие решения

Других решений пока нет …