-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
microservices added #45
Conversation
type GrpcAttractionsHandler struct { | ||
gen.UnimplementedAttractionsServer | ||
placeUsecase attractions.PlaceUsecase | ||
citiesUsecase citiesPkg.CitiesUsecase | ||
reviewUsecase reviewsPkg.ReviewsUsecase | ||
categoriesUsecase categoriespkg.CategoriesUsecase |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Так агрегировать не обязательно, всю агрегацию лучше оставить на main.go. Иначе у вас начинается сильная мешанина между пакетами, это сложно будет поддерживать (*при текущей архитектуре). У вас архитектура проекта устроена так что есть пакеты которые описывают логику работы с определенными сущностями, те places - это пакет в котором содержатся хэндлеры,юзкейсы и все что связано с тем как работать с местами, trips - хэндлеры,юзкейсы и все что связано с тем как работать с поездками итд. Изменять это и мешать между собой не надо, иначе потом вы нахватаетесь проблем с изменениями.
Поэтому изначальная идея распила на сервисы следующая: например вы хотите вынести places в отедльный микросервис. Ваша задача - написать grpc хэндлер и клиент для работы с places, те лежать он должен в том же пакете, в подпакете delivery. После того как это сделали, вы создаете cmd/places/main.go файл в котором поднимаете сервер и регистрируете grpc сервис в нем. В старом main.go файле вы в хттп хэндлер places прокидываете вместо юзкейса клиент и на этом все - у вас запросы на places проксируются в сервис, остальное работает как раньше локально.
Если у вас есть потребность добавить в сервис places ручки для работы с городами и категориями и вы понимаете что сервис не совсем уже places а скорее attractions, тогда вы следующее:
вы повторяете действия с хэндлерами в соответствующих пакетах (categories,cities итд), те эти хэндлеры живут в своих пакетах. Далее вы также обновляете соответствующее хттпшные хэндлеры так чтобы они работали с клиентом вместо юзкейса. После этого все что вы делаете - это переименовываете cmd/places/main.go -> cmd/attractions/main.go, в main.go вы создаете хттп сервер в него регистрируете ваши grpc "сервисы" (типа places.RegisterPlaceServer, cities.RegisterCityServer итд) и поднимаете уже собственно сам сервер.
Преимущество такого подхода в том что у вас агрегация хэндлеров очень гибкая, это позволяет легко распиливать сервисы и даже перекидывать хэндлеры между сервисами, в целом
No description provided.