Пользуясь плагином для выделения ошибок в octoberCms, я понял что мне не хватает функционала извещения меня о найденных опечатках в месенджер или почту. Написать такой код дело десяти минут, но поискав я нашел плагин, который делает именно то, что мне нужно. Так как на дворе 2016 год, то очень плохо в десяти местах писать один и тот же код, а лучше переиспользовать код другого плагина. Я никуда не спешу и когда у меня появилось время, я начал подробнее разбираться с системой плагинов в octoberCms.
Существует, как минимум, две возможности построения системы зависимости между плагинами
- Система с обязательным разрешением зависимостей
- Система с деградацией
Система с обязательным разрешением зависимостей: яркий пример такой системы - разрешение зависимостей в composer. Менеджер зависимостей устанавливает требуемый пакет => все пакеты от которых зависит требуемый => все пакеты от которых зависят пакеты от которых зависит требуемый пакет и тд.
Гигантским плюсом такого подхода является то, что в любой системе требуемый пакет будет действовать в знакомом окружении, что очень сильно упрощает разработку и отладку пакета. Минусом такого подхода является большая сложность эффективной реализации менеджера зависимостей и необходимость поддерживать более сложную архитектуру на серверах пакетов.
Система с деградацией. Менеджер пакетов устанавливает только требуемый пакет. В самом же пакете стоят проверки существующего окружения, в зависимости от него у пакетов появляется или отключается дополнительный функционал. По такому принципу работает большое число сложных и высоконагруженных сайтов (например gmail или главная страница mail.ru).
Плюсом такого подхода является заметная простота в архитектуре менеджера пакетов и системе хранения и размещения пакетов. Минусом значительно более сложное программирование самого пакета.
Тут нужно оговорить, что сейчас система пакетов в octoberCms не является законченой. Так что, то что я описываю может очень скоро измениться.
В octoberCms при установке плагина с зависимостями, будет установлен только сам плагин. Если у плагина есть зависимости от других плагинов, которые не установлены, то плагин не будет установлен вообще, с ошибкой что такой плагин не найден. Поэтому я бы сказал, что в octoberCms в качестве системы управления зависимостиями принята система с деградацией. Мотивацией такой системы была ее простота. По моему мнению, такой подход существенно усложняет возможности для переиспользования плагинов друг в друге.
Говоря про зависимости нельзя не упомянуть про использование composer в плагинах. В каждом плагине можно создать свой composer файл с необходимыми зависимостями, которые при обновлении будут установлены (проверялось при установке через консоль). Этот функционал прекрасно работает и позволяет в плагинах использовать наработки из известных бандлов и пакетов, что очень-очень круто.
На мой взгляд текущая система зависимостей между плагинами является крайне неудобной и едва ли не бесполезной. Мне очень хотелось бы, чтобы в скором времени система плагинов вышла на уровень composer