IT просвет #2
Суть - "как проверить свои силы, если хочешь стать бэкэнд-разработчиком?"
В прошлом посте я написал немного про базовую теорию, сейчас давайте попробую описать базовую практику.
Это будет ровно 1 большая задача, она не абсолютная проверка на "готовы ли вы стать джуном", это скорее маркер, что если с ней возникают проблемы - наверно стоит еще немного подтянуть теорию и практику.
Библиотека
Необходимо написать бэкэнд системы, которая позволит автоматизировать часть задач, возникающих в библиотеке.
1 инстанс системы будет управлять ровно 1 библиотекой.
Что должна уметь система:
1 - Добавить новую книгу в библиотеку
2 - Удалить книгу из библиотеки (например сценарий физического износа и списания)
3 - Получить список книг, название которых содержит заданную строку
4 - Получить список книг указанного автора (также должен быть доступен поиск по произвольной строке)
5 - Зарегистрировать читателя в библиотеке
6 - Выдать читателю книги
7 - Получить от читателя книги
8 - Проверить есть ли книги на руках у читателя
9 - Открепить читателя от библиотеки
Для каждого из пунктов должен быть свой метод api
Желательно сделать и http-методы и аналогичные grpc-методы, но для простоты можно ограничиться только http.
Все методы должны быть доступны для вызова например через Swagger.
Подробнее про техническое решение:
У системы должна быть база данных. Лучше использовать postgres или ms sql, они по моему опыту наиболее популярны в российский компаниях. Уделите достаточно внимания проектированию таблиц, это крайне важно.
Всю работу с базой крайне желательно осуществлять используя sql-синтаксис, это означает что не стоит использовать графический интерфейс субд для создания таблиц и не стоит использовать тяжеловесные библиотеки для выбранного языка программирования, которые будут генерировать sql-запросы за вас.
Приведу минимальный стек для c# (делать данную задачу можно практически на любом языке, это не столь важно)
.Net core (сам сервис) + Dapper (библиотека для осуществления запросов к БД) + Swagger (в данном случае для возможности удобно вызывать ваши методы апи из браузера) + Postgres
Рекомендации:
Уровень у всех разный, кому-то задача покажется слишком легкой, кому-то невообразимо сложной, это нормально.
Если вам изначально страшновато - можно разбить задачу на этапы.
1 - Выносим пункты 1-4 из "что должна уметь система" в первый этап, пункты 5-9 во второй
2 - Проектируем бд для этапа 1
3 - Пишем все необходимые запросы к таблицам для этапа 1 не выходя из субд
4 - Пробуем написать как-то работающий сервис с методами апи
5 - Смотрим на получившийся сервис, читаем немного про архитектуру приложений, стараемся выделить уровень данных, уровень бизнес логики и пр.
6 - Снова смотрим на получившийся на сервис, понимаем что не писали тесты, читаем про юнит-тесты, добавляем их
7 - Можно переходить к этапу 2 (проектирование таблиц, добавление новых методов апи и пр.)
Некоторые бизнес-кейсы:
При проектировании системы не забудьте пожалуйста, что
1 - Есть книги с более чем 1 автором
2 - Есть книги без конкретного автора (а-ля русские народные сказки)
3 - У книг есть версии/редакции, мб вы захотите это учесть
4 - Каждой книги может быть более 1 штуки (== в библиотеке может быть 10 экземпляров книги "Незнайка на Луне", это нормально)
5 - Нельзя выдать больше экземпляров книги чем в целом есть в библиотеке (если все 10 экземпляров Незнайки уже кто-то взял, вы не можете выдать 11ый желающему)
ну и т.д., это больше подсветить что "над любой задачей надо думать не только с технической стороны"
"Я крутой, как сделать задачу сложнее?":
Есть практически бесконечное пространство для усложнения данной задачи (добавьте причину удаления книги ("износ" "не вернули" и пр.), добавьте срок, на который книга выдается, и метод "получить просроченные книги", ..), но это тренировочная задача и наверно в сильных усложнениях нет смысла, лучше очень хорошо выполнить базовую постановку
Под "очень хорошо" понимаю наличие тестов, обработку ошибок, пагинацию в методах получения книг и т.д.
Послесловие:
Если вы не смогли выполнить даже первый этап данной задачи это не означает что вы точно не сможете устроиться, возможно вам повезет и все получится)
Если вы смогли выполнить задачу полностью и гордитесь результатом это не означает что вас оторвут с руками прямо сегодня (хотя может и оторвут, вы правда большой молодец)
Если вам кажется что задача плохая и бэкэндеру нужно что-то другое - окей, автор лишь высказал свое мнение)
Выполнение только этапа 1 (пункты 1-4 из постановки) это уже неплохо.
Готов ответить на вопросы в комментариях, если таковые будут)