Есть сервис мероприятий, у которого следующие задачи:
1. Отображать информацию (дата начала, город, положение...) о мероприятиях разного типа: конкурсы, мастер-классы, фестивали, чемпионаты и так далее.
2. Уведомлять подписчиков о новостях.
3. Собирать отзывы.
4. Регистрировать участников на мероприятие
Так как все пункты могут переиспользоваться в других проектах, то хотел бы их разделить на отдельные пакеты (библиотеки). Но пока не очень представляется как это сделать. Пока что вижу это так:
- vmc-event //библиотека, которая собирает в себе все библиотеки и выводит общую информацию
- vmc-event-notify //библиотека уведомлений
- vmc-event-news // библиотека новостей
- vmc-registration //библиотека регистрации
Библиотека регистрации вообще может сильно меняться в зависимости от типа мероприятия. Поэтому полагаю, что этот покет надо разбить сильнее:
- vmc-event-registration //ядро, где собирается общая функциональность (участники, калькуляторы цен...). В дальнейшем, поможет на базе ядра быстро создавать новый тип регистрации, которого ещё нет.
- vmc-event-registration-competition //регистрация соревнований
- vmc-event-registration-masterclass //регистрация мастер-классов
- vmc-event-registration-battle //регистрация на батлы
Основная проблема по архитектуре кода и базы именно регистрации. Правильно ли я мыслю по поводу разделения регистрации на пакеты. Функциональность регистрации иногда отличается сильно между типами, а иногда нет. При регистрации на мероприятие типа соревнования нужно проверять членство, расчет цены участия сложны. В то время как на батл нужно просто ник и номинация.
Подскажите как реализовать подобную задачу?
Либо вообще не париться и разделять всё по папкам сервиса Мероприятий?
Полагаю, что в базе данных регистрации будет храниться только id мероприятия пакета vmc-event и все операции связывать с id этого мероприятия. Правильно ли я мыслю?
Буду очень благодарен за помощь! Если требуется пояснение или подробное описание какой-то части - напишите вопросы. Опишу подробно. Задача глобальная, поэтому описать все детали сложно и не нужно. Такой вопрос никто не прочитает)