Skip to content
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

Merged
merged 41 commits into from
Nov 25, 2024
Merged

microservices added #45

merged 41 commits into from
Nov 25, 2024

Conversation

timurIsaevIY
Copy link
Collaborator

No description provided.

@timurIsaevIY timurIsaevIY requested a review from vr009 November 21, 2024 07:31
Comment on lines 15 to 20
type GrpcAttractionsHandler struct {
gen.UnimplementedAttractionsServer
placeUsecase attractions.PlaceUsecase
citiesUsecase citiesPkg.CitiesUsecase
reviewUsecase reviewsPkg.ReviewsUsecase
categoriesUsecase categoriespkg.CategoriesUsecase
Copy link
Collaborator

@vr009 vr009 Nov 22, 2024

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 итд) и поднимаете уже собственно сам сервер.

Преимущество такого подхода в том что у вас агрегация хэндлеров очень гибкая, это позволяет легко распиливать сервисы и даже перекидывать хэндлеры между сервисами, в целом

@timurIsaevIY timurIsaevIY requested a review from vr009 November 22, 2024 16:33
@timurIsaevIY timurIsaevIY merged commit a07f96e into dev Nov 25, 2024
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants