Как создать структуру приложения так, чтобы она была эффективной и удобной для разработки и поддержки?

Здравствуйте! У меня возникла идея создать приложение, где пользователи могут регистрироваться, вести личный кабинет (подобно YouTube), и выкладывать видео. Пока я создал обычное приложение на Spring, добавил конфигурацию для безопасности и ролевые фильтры, и всё работает (я проверил через Postman). Моя база данных находится в Docker и использует PostgreSQL. Я также хочу создать сайт для этого приложения на React, чтобы сразу тестировать и видеть его с точки зрения клиента. Пожалуйста, посоветуйте, через какие дополнительные фреймворки и API можно реализовать такое приложение, и если возможно, поделитесь руководством.

Кроме того, я хочу максимально обеспечить безопасность приложения. Может быть, Spring Security достаточно, но буду благодарен, если вы порекомендуете другие шаги для улучшения безопасности.

Если у вас есть какие-то идеи или ресурсы, пожалуйста, поделитесь ими. Было бы отлично, если у вас есть проект на GitHub, чтобы я мог ознакомиться с вашим кодом.
  • 15 декабря 2023 г. 14:57
Ответы на вопрос 2
Разработка эффективной и удобной структуры приложения — это очень индивидуальный процесс, и многое зависит от ваших предпочтений и требований проекта. Тем не менее, вот несколько советов, которые могут вам помочь:

1. Используйте модульную архитектуру: Разделите ваше приложение на небольшие и легко поддерживаемые модули. Каждый модуль должен быть ответственным только за определенную функцию или задачу.

2. Используйте MVC-архитектуру: Использование разделения на модели, представления и контроллеры поможет разделить логику вашего приложения и сделает его более структурированным и поддерживаемым.

3. Используйте паттерн Dependency Injection: Использование инверсии управления и внедрения зависимостей поможет сделать ваш код более гибким и полезным в тестировании.

4. Обеспечьте хорошую документацию: Документация по коду и архитектуре приложения поможет вам и вашей команде понимать приложение и его структуру, ускорит процесс разработки и облегчит поддержку.

5. Используйте контроль версий: Использование системы контроля версий, такой как Git, поможет отслеживать изменения кода и упростит совместную работу в команде.

6. Автоматизируйте тестирование и сборку: Используйте инструменты, такие как JUnit и CI / CD-серверы, чтобы автоматизировать процесс тестирования и сборки вашего приложения. Это поможет обеспечить его надежность и быстроту развертывания.

7. Используйте фреймворк React для вашего фронтенда: React является одним из самых популярных фреймворков JavaScript для разработки пользовательских интерфейсов. Он имеет большую поддержку сообщества, богатую экосистему плагинов и ресурсов для обучения.

8. Рассмотрите использование GraphQL или REST API: GraphQL и REST являются популярными способами взаимодействия клиента и сервера. Они позволяют эффективно передавать данные между вашим фронтендом и бэкендом.

9. Включите JWT-авторизацию для безопасности: JSON Web Tokens (JWT) позволяют безопасно аутентифицировать и авторизовывать пользователей в вашем приложении. Spring Security включает поддержку JWT.

10. Подумайте об использовании HTTPS: Включение HTTPS для вашего приложения может значительно повысить безопасность и защиту данных пользователей.

Насчет Github: у меня, к сожалению, в настоящее время нет проектов на Github, которые я мог бы с вами поделиться. Однако, существуют множество открытых проектов на Github, связанных с разработкой приложений на Spring и React. Вы можете найти эти проекты, исходный код и примеры использования, изучить их и адаптировать под свои нужды.

Удачи в разработке вашего приложения!
Надо подумать о том как раздавать видео. Статику, коим является видео, через Java слать не сильно целесообразно, для статики больше подходит NGINX. Если будет большая нагрузка можно быстро упереться в ширину Интернет канала и скорость диска, придется добавлять больше серверов. Видео лучше распространять через CDN (когда статика в S3, например, если говорить про Амазон, у других облачных провайдеров наверняка есть аналоги). 

Надо еще подумать про контроль доступа к видео, будут ли они публичные или не всегда.

Если будут не публичные ссылки на видео надо генерировать в Java так чтоб у них была ограничение время жизни, CloudFront позволяет генерировать подписанные ссылки в которых можно указать время жизни и много сего еще.

Еще про видео, нужен формат в котором можно начинать смотреть видео полностью не скачивая, что-то типа HLS, там же можно настроить различные качества для различных клиентов
Похожие вопросы