... И после выполнения действия мы так же возвращаемся в компонент. У вас есть н-ное количество плагинов, которые реализуют функционал. Их можно включать/отключать. Причем плагины могут быть разного типа. Мне кажется в рамках J! это самый правильный путь
Если у нас плагин отвечает только за одношаговую реакцию на какое-либо событие, произошедшее в компоненте, то всё верно. Мы можем вести цепочку событий в компоненте и по мере необходимости подгружать плагины.
Другой случай, когда в компоненте возникает событие, которое должно запустить цепочку событий, о которой компонент не знает. Та же он-лайн оплата подразумевает вызов платёжной системы, получение от неё ответа и реакцию в зависимости от полученного ответа, т.е. три события, о которых компонент ничего не знает. Указанные события должны обрабатываться внутри плагина, соответственно нужен как минимум свой контроллер, виды, а в случаях и модели.
Я пока нигде не нашёл способ организации MVC в плагинах.
Как запасной вариан можно, конечно, в компоненте предусмотреть всю цепочку событий, но тогда расширение становится сильно связанным и будет невозможно в плагине разработать по-настоящему новый функционал - только вариации предусмотренного.