vitaly_74
@vitaly_74

Как не строить фасад, а писать код, который не повторяется?

Добрый день, имеется фасад, в котором есть 2 публичных метода, которые на 70% похожи
например:
class facade
{
    
    public function __construct()
    {
        
    }

    public function run(){
        if ($this->card) {
            $transaction =
                new Transaction(
                    new Request( //generate Request (not send)
                        new Curl( //generate sign and curl params for request
                            new HeadersWithoutSign(), //generate headers for curl
                            new FieldsAsString( // generate fields for curl as string
                                new Fields( //generate fields for curl
                                    $this->card,
                                    'usd'
                                )
                            )
                        )
                    )
                ); //don't validate this transaction;
            new Logger($transaction);
            $this->billing($transaction);
            $this->redirect($transaction);
        } else {
            $this->redirect(new EmptyClass());
        }
    }
    
    public function notification(){
        $transaction =
            new ValidTransaction( //need Validate this transaction
                new Transaction(
                    new InputRequest()
                )
            );
        new Logger($transaction);
        $this->confirmOperation($transaction);
        $this->sendToCrm($transaction);
        new Answer($transaction);
    }
}


Как можно решить задачу не используя фасад, имеется некоторое ограничение, методы фасада могут использоваться в нескольких местах проекта.
код не должен повторяться.
На ум приходит такое решение:
1.писать везде эту "горку"
2. написать какой то контроллер - но тогда он от фасада то не слишком отличается.
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
@grinat
Да это и не фасад, это контролер судя по редиректам и проч, да и уровень di какой-то запредельный. Я бы понял, если бы это было фп. Посмотри как пацаны делают http клиенты - https://github.com/guzzle/guzzle твоим подделием пользоваться же невозможно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы