Прочитал несколько статей про SOLID, но примеры были слишком простые и я никак не могу понять момент с независимыми компонентами приложения.
К примеру я работаю с Yii2 и многие разработчики говорят, что там слишком большая зависимость между компонентами системы. Я никак не могу понять, что под этим подразумевают.
Объясните пожалуйста на момем примере, как правильно с точки зрения принципов SOLID организовать следующую вещь:
Предположим у меня есть модуль отвечающий за перевод средств между пользователями на сайте. И есть модуль уведомлений, в базу которого попадают всякие предупреждения, уведомления и новости для пользователей.
Я хочу сделать такую штуку, когда пользователь1 переводит средства пользователю2, у пользователя2 появлялось уведомление. Тоесть я так себе прикинул, что мне нужно подружить 2 модуля.
Момент в том, что тут начинается мое непонимание всех этих моментов. Кто от кого зависит и тп.? Тоесть если я отключу модуль уведомлений, то в моем случае весь перевод средств работать не будет.
Организовывал я это дело вот так:
// открыл транзакцию, проверил данные
// осуществляю транзакцию
public function beforeSave($insert)
{
if(parent::beforeSave($insert)) {
// обновил историю, у одного деньги снял, другому добавил
...
// и вот теперь я хочу сделать уведомление о переводе
// Уведомление о переводе
Notification::note(Notification::TYPE_TRANSFERS, $this->user_recipient, $this->noteTitle, $this->noteText);
}
}
return true;
}
return false;
}
В данном случае у меня есть сторонняя модель стороннего модуля
Notification, к которой я обращаюсь, что бы сделать запись. Мало того, мне еще потребовалось создать в текущей модели метод
noteTitle, в котором храниться текст уведомления.
Тоесть вышло так:
у модуля transfers есть спец. метод для модуля Notification
модуль transfers вызывает модуль Notification
а в свою очередь у модуля Notification есть тип TYPE_TRANSFERS, который указывает на то, что это перевод средств.
Как я понял это и есть зависимость. Но подскажите пожалуйста как это реализовать абстрактно, в общем нуждаю в хороших советах, так как я еще это дело не осилил.