Хочу построить приложение на независимых сервисах. Но немного теряюсь. Прошу помощи у вас!
Задача
Разработать систему, автоматизирующую календарь соревнований спортивной Федерации и позволяющую собирать заявки на эти соревнования централизованно.
Немного о будущих цифрах:
Организаций: ~ 2000
тренеров: ~ 15000
спортсменов: ~ 25000
Заявок: ~ 100000 в год
Основные характеристики: - каждая спортивная школа, входящая в состав Федерации, имеет свой личный кабинет в системе, позволяющий вести данные по своей школе, своим тренерам и учащимся (спортсменам)
- подать заявку может любой желающий имеющий аккаунт в системе
- уполномоченные сотрудники Федерации имеют свой личный кабинет, в котором они добавляют информацию о предстоящих соревнованиях (ведут календарь соревнований), а также контролируют данные, поступающие от спортивных школ
- непосредственные организаторы соревнований имеют возможность актуализировать информацию о соревнованиях в системе, в частности, добавлять положение, категории и другую информацию
- все предварительные заявки от представителей школ поступают организатору для утверждения
- у мероприятия имеются три типа регистрации: соревнования, батлы, мастер-классы. Через время могут добавиться другие типы регистраций
Разработка с использованием: Symfony+Vue+Mysql
Хочу понять как спроектировать это всё на независимых сервисах. Как я вижу это?
1. Сервис пользователей
Служит для авторизации на сайте, работе с правами доступа и API
2. Сервис ГЕО (города, регионы, страны)
Служит для хранения всех стран городов (Информационная система)
3. Сервис Мероприятий
Собирает в себе всю информацию касаемо мероприятий: организатор, отзывы, новости, партнёры, контакты и другая информация.
4. Сервис Регистраций
Сервис служит для управления регистрациями до мероприятия и разделяется на типы: соревнования, батлы, мастер-класс.
Нужно ли делить регистрацию на каждый отдельный сервис/библиотеку?
5. Сервис Счёт
Сервис служит для управлением мероприятием на самом событии и подсчёта результатов: соревнований, батлов
Нужно ли делить счёт на каждый отдельный сервис/библиотеку?
6. Сервис Персон
Сервис служит для сбора в одном всех персон: тренеров, спортсменов, организаторов, оргкомитет и др.
7. Сервис Организаций
Сервис служит для сбора в едином аккаунте всех типов организаций
У меня есть несколько вопросов:
1. Правильно ли я мыслю по построению сервисов? Возможно следует сделать один сервис Мероприятия, который будет объединять в себе всё это? Тогда как организовать лучше слабую связанность в сервисе, чтобы можно было менять одну регистрацию на другую? Например, сделали новую регистрацию v2.0 и теперь нужно заменить. Или дописали новую - нужно добавить. Интерфейсы?
2. Имеет ли смысл регистрацию и счёты разделить на свои отдельные сервисы.
3. Имеет ли смысл делать общий сервис Person? Или в каждом сервисе добавить Member, Teacher, Artist Organizator?
Буду рад услышать хорошие дельные советы. Очень важно понять сейчас как построить архитектуру, пока не залез далеко. От монолита точно стоит уходить. И если указал не правильные теги или есть дополнения в вопросе - предлагайте правки я одобрю!
Благодарю за помощь! Выслушаю все варианты!