Добрый день, имеется фасад, в котором есть 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. написать какой то контроллер - но тогда он от фасада то не слишком отличается.