Исходя из solid'а каждый компонент должен заниматься только своим делом. Допустим у нас есть какой-то процесс обработки заказов, в процессе которого могут возникать разные ситуации требующие уведомления. Исходя из того, что видел, должно быть написано два класса – один для собственно самой обработки, второй декоратор для уведомлений.
Код: Выделить всё
class OrderProcess {
public function handle(){
// something here
return $res;
}
}
class OrderProcessLogDecorator extends OrderProcess {
private function log($info){}
public function handle(){
$res = parent::handle();
$this->log($res);
return $res;
}
}
1. Как быть когда требуется уведомления в середине процесса?
Код: Выделить всё
class OrderProcess {
public function handle(){
// do first thing
// do second thing
// and something here
return $res;
}
}
но, ведь, согласно букве S родительский класс в принципе не должен знать о том, что такое уведомления, но как тогда декоратор получит информацию?
2. Кто отвечает за то, что создается именно декоратор, а не только основной класс?
То есть тот, кто будет запускать процесс будет ведь знать только об родительском классе и будет написано что-то вроде
Код: Выделить всё
$service = new OrderProcess();
$service->handle()