solid и декораторы
Добавлено: 2019.10.08, 03:40
Здравствуйте, очередные попытки двигаться в правильную сторону наткнулись на непонятный момент, помогите разобраться, пожалуйста
Исходя из solid'а каждый компонент должен заниматься только своим делом. Допустим у нас есть какой-то процесс обработки заказов, в процессе которого могут возникать разные ситуации требующие уведомления. Исходя из того, что видел, должно быть написано два класса – один для собственно самой обработки, второй декоратор для уведомлений.
Здесь возникают следующие вопросы:
1. Как быть когда требуется уведомления в середине процесса?
по идее, можно было бы сделать метод log у родительского класса, и уже переопределять в дочерних,
но, ведь, согласно букве S родительский класс в принципе не должен знать о том, что такое уведомления, но как тогда декоратор получит информацию?
2. Кто отвечает за то, что создается именно декоратор, а не только основной класс?
То есть тот, кто будет запускать процесс будет ведь знать только об родительском классе и будет написано что-то вроде
А если там еще десяток декораторов сверху от разных модулей? Как это правильно реализуется?
Исходя из 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()