Тёмный

Чистая архитектура проекта на Golang 

Oleg Kozyrev - life in IT
Подписаться 3,7 тыс.
Просмотров 35 тыс.
50% 1

Мой курс по разработке микросервисов: clck.ru/389FM7
Репозиторий с примером: github.com/olezhek28/clean-ar...
Мой Boosty: boosty.to/olezhek28
Linkedin: / olezhek28
Telegram-канал: t.me/olezhek28go
В этом видео мы разберемся в основах создания архитектуры микросервисов на golang, познакомимся со слоистой архитектурой и реализуем DI-контейнер. Мы на практике поймем, как реализовать архитектуру go проекта, как в BigTech-компаниях. А также в конце я расскажу про свой курс по разработке микросервисов на golang.

Опубликовано:

 

23 сен 2023

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 116   
@TrifunS
@TrifunS 3 месяца назад
Как же классно вас смотреть, все четко, по делу, без душноты)
@olezhek28go
@olezhek28go 3 месяца назад
Спасибо, приятно слышать:)
@kodikoff
@kodikoff 9 месяцев назад
Огонь, спасибо большое за полезную информацию!
@olezhek28go
@olezhek28go 9 месяцев назад
рад, что понравилось)
@turbo3d649
@turbo3d649 27 дней назад
😁 Олег, респект! Отличный контент.
@olezhek28go
@olezhek28go 26 дней назад
Спасибо большое)
@alexandrshatilov8227
@alexandrshatilov8227 2 месяца назад
такой материал в живой подаче очень приятно смотреть) спасибо! Сейчас прохожу отбор в Авито на стажировку, надеюсь там вас увидеть :)
@olezhek28go
@olezhek28go 2 месяца назад
спасибо за добрые слова) удачи в отборе!)
@iloveflovers781
@iloveflovers781 5 месяцев назад
Спасибо за труд!
@olezhek28go
@olezhek28go 5 месяцев назад
Рад стараться:)
@dsbasko
@dsbasko 9 месяцев назад
Олег молодец! Очень красноречив. Приятно слушать )
@olezhek28go
@olezhek28go 9 месяцев назад
Спасибо:)))
@Freeline95
@Freeline95 4 месяца назад
Отличный урок, спасибо. То, что искал.
@olezhek28go
@olezhek28go 4 месяца назад
Рад, что понравилось:)
@Freeline95
@Freeline95 4 месяца назад
@@olezhek28go У меня один вопрос только появился только что. Верно ли понимаю, что структуры одного уровня не должны использоваться друг другом? Иначе появляется риск зацикленности.
@rahug1927
@rahug1927 5 месяцев назад
Спасибо за видео! Будучи джуниором уже пишу такой код :D *довольно понятно объясняете*
@olezhek28go
@olezhek28go 5 месяцев назад
Отлично) Рад, что доступно изложил
@techbuterbrod
@techbuterbrod Месяц назад
Пишу на C#, все выглядит похоже и знакомо. Правда, реализация интерфейсов в C# нравится мне больше.
@olezhek28go
@olezhek28go Месяц назад
Я тоже было время на шарпе чутка писал:) а что именно в интерфейсах нравится больше?
@romanbush5164
@romanbush5164 2 месяца назад
какой веселый чел, и презентации забавные делает) Повезло сохранить оптимизм )
@olezhek28go
@olezhek28go 2 месяца назад
Спасибо за добрые слова:)
@5111
@5111 8 месяцев назад
Лайк за разбор данной темы
@olezhek28go
@olezhek28go 8 месяцев назад
Спасибо)
@trypophobia7497
@trypophobia7497 Месяц назад
Спасибо за видео. Блин, из-за того что в go нет возможности перечислять, какие интерфейсы должна имплементировать структура, как это сделано в других языках, приходятся делать такой костыль с переменной, то что структура удовлетворяет интерфейс -- это кек))))
@olezhek28go
@olezhek28go Месяц назад
Да это скорее удобство чтения добавляет) так-то можно и не писать такую конструкцию, просто ошибка на компиляции будет, а не сразу в ide
@unicoxr5tj417
@unicoxr5tj417 9 месяцев назад
лайк за разговорчики про архитектуру
@olezhek28go
@olezhek28go 9 месяцев назад
Спасибо:)
@user-jg9bm6ft3q
@user-jg9bm6ft3q 2 месяца назад
🎉
@qskyisover8153
@qskyisover8153 Месяц назад
Если у вас в микросервисе под 10 юзкейсов и реп и вам нужна DI-система, скорее всего у вас что-то не так пошло на этапе планирования микросервисной архитектуры)
@olezhek28go
@olezhek28go Месяц назад
Согласен:) скорее это бывает промежуточным состоянием, при котором принимаем решение распиливать:) а di лично мне на любых размерах кажется кайфовой штукой
@ivankuzmin4727
@ivankuzmin4727 9 месяцев назад
Привет, спасибо за контент, а стоит проходить курс, если в route256 обучался, в том числе у тебя)? И второй вопрос, на разборе будут показаны куски кода, как было бы правильнее реализовать или дана ссылка на реализацию от преподавателя текущего дз?)
@olezhek28go
@olezhek28go 9 месяцев назад
Привет) 1) Если в руте на потоке где я обучал был, то наверное нового будет процентов 40. В целом по программе на сайте можешь оценить) 2) Я буду рассказывать темы, иллюстрируя примерами кода, которые будут доступны обучающимся. Что касается дз, то у меня тоже есть моя реализация, да
@pvinnie3827
@pvinnie3827 6 месяцев назад
спасибо, вчера классно уснул в наушниках, придется пересматривать. Помню что повествование веселое, местами с шутечками, чувствуется что чел могёт ))
@olezhek28go
@olezhek28go 6 месяцев назад
Спасибо за добрые слова:)
@user-dx2yg4sw3w
@user-dx2yg4sw3w 6 месяцев назад
Ахахаха
@user-vo7lq1jt5v
@user-vo7lq1jt5v 7 месяцев назад
Спасибо, очень понравилось. У меня возник такой вопрос, в чём состоит основное отличие чистой архитектуры от Слоистой архитектуры "Layered architecture" (N-layer). Например, почему представленный пример является чистой архитектурой, а не слоистой (N-layer), так как у меня возникла мысль (возможно неверная, прошу поправить, если это не так), что представленный пример можно было бы отнести к Слоистой архитектуре (N-layer).
@Freeline95
@Freeline95 4 месяца назад
А верно ли, что сервисы на одном уровне/слое не должны использовать друг друга? Чтобы не происходило зацикливания.
@olezhek28go
@olezhek28go 4 месяца назад
А почему должно быть зацикливание? Это совершенно не обязательно)
@buginsystem8925
@buginsystem8925 7 месяцев назад
Ток интерфейсы лучше в месте использования объявлять. Т.е. используешь в сервисе интерфейс репо, там его и объявляешь, указываешь какие методы твоему сервису нужны. Иначе, если одному сервису нужны одни методы, а другому другие, и оба могут работать с одним и тем же репозиторием, то они будут эмбеддить интерфейс репозитория со ВСЕМИ его методами, а это избыточность и неудобство для программиста.
@olezhek28go
@olezhek28go 7 месяцев назад
Я как раз говорил о холиварности этого вопроса) мы осознано выбрали варик как в видео и репо слой немного иначе разбивает, от того неудобства нет
@buginsystem8925
@buginsystem8925 7 месяцев назад
@@olezhek28go Понял-принял.
@MrJamesHunt
@MrJamesHunt 18 дней назад
@@olezhek28goинверсия зависимости направлена не в ту сторону. Бизнес логика зависит от репозитория и его импортирует.
@Orionich
@Orionich 8 месяцев назад
Олег, отличный контент! Спасибо тебе! Небольшой вопрос: в коде модель репозитория и модель сервиса для User помещены в пакет model. Обе модели с публичной видимостью. В итоге к ним обеим можно обратиться как model.User, но при этом это разные структуры естественно. Возникает некоторая потенциальная путаница и необходимость пользоваться альясами. Это так и задумано? Или в конкретном случае лучше использовать разный нейминг/пакеты? Спасибо!
@olezhek28go
@olezhek28go 8 месяцев назад
Спасибо за добрые слова) касательно вопроса - Мы на работе так и юзаем с алиасом) IDE сразу запоминает куда что ведет и импорты автоматом добавляются и путаницы фактически нет) но можно и разные нейминги попробовать)
@Orionich
@Orionich 8 месяцев назад
@@olezhek28go Спасибо еще раз!
@user-pg6mb6il1c
@user-pg6mb6il1c 9 месяцев назад
Опа, новое от Козыря
@olezhek28go
@olezhek28go 9 месяцев назад
так меня пожалуй с садика не называли)
@yarbersheer8559
@yarbersheer8559 9 месяцев назад
для микросервиса покатит) но когда в приложении больше одного сервиса, то без слоя межсервисного взаимодействия будет .опа)
@olezhek28go
@olezhek28go 9 месяцев назад
С несколькими еще жить можно, но чем дальше тем хуже, согласен)
@user-tr5wi9ws6s
@user-tr5wi9ws6s 6 месяцев назад
На работе (python/fastapi) начали вводить чистую архетиктуру, интересно посмотреть на всю эту тему со слоями со стороны другого языка
@olezhek28go
@olezhek28go 6 месяцев назад
И как в го проще или нет?
@user-tr5wi9ws6s
@user-tr5wi9ws6s 6 месяцев назад
@@olezhek28go да трудно сказать, надо попробовать апиху полноценную выкатить, не хватает времени пока. У нас еще авторизация, орм, зависимостей внедрения свои способы. В fastapi уже есть это готовое, на коллектив можно опереться. А так со слоями нормально объяснили в видео -- делать их изолированными полностью, и все ок будет.
@fprotimaru1944
@fprotimaru1944 9 месяцев назад
Возвращать интерфейс вместо структуры разве не антипаттерн?
@olezhek28go
@olezhek28go 9 месяцев назад
А в чём проблема? Для этого же всё и задумывалось, чтоб абстракцией закрыться)
@fprotimaru1944
@fprotimaru1944 9 месяцев назад
@@olezhek28go Интерфейса нужно положить туда, где этот интерфейс вызывается. А чтобы закрыть у нас есть инкапсуляция)
@olezhek28go
@olezhek28go 9 месяцев назад
Как раз тут и случается срач по поводу интерфейсов:) Кто-то кладет по месту использования, кто-то иначе) так что стоит отталкиваться от того как договорились в комманде
@user-zu3rw3cr1u
@user-zu3rw3cr1u 6 месяцев назад
@@olezhek28go так на выходе получаем какой-то конкретный объект, зачем нам возвращать абстракцию? чтобы использоваться полиморфизм, на вход мы получаем абстракцию, а на выходе зачем она непонятно
@MrJamesHunt
@MrJamesHunt 18 дней назад
@@olezhek28goпроблема в том что это не конструктор сущности должен решать какие методы нужно реализовывать возвращать интерфейсом, а тот кто будет пользоваться должен определить нужный ему интерфейс для этой сущности. Конструктор возвращает конкретное(структура), потребители решают какие методы требуются (интерфейс)
@yarbersheer8559
@yarbersheer8559 9 месяцев назад
а разве было бы не прагматичнее convertor mapper'ом назвать?)
@olezhek28go
@olezhek28go 9 месяцев назад
да в целом можно и так) тут скорее зависит как в команде договоришься) мы на конверторе сошлись)
@eamarc
@eamarc Месяц назад
вот говорит, что плюсами покусан, а сам пишет = (*repository)(nil) вместо = new(repository). Что-то тут не так...
@olezhek28go
@olezhek28go Месяц назад
Ну все, надо разоблачение снимать))
@eamarc
@eamarc Месяц назад
@@olezhek28go точно! И обязательно сдать своего диллера, который ключи от Goland'а поставляет ))
@Kotl1n
@Kotl1n 9 месяцев назад
Олег а на собеседованиях DevOps/SRE в Ozon или Avito спрашивают алгоритмы или это только у разрабов?
@olezhek28go
@olezhek28go 9 месяцев назад
Честно говоря не знаю, не интересовался на этот счет)
@JohnGrave
@JohnGrave 5 месяцев назад
Сделайте поправочку только, что, это не та самая "чистая архитектура" как на первой картинке было А обычная слоистая, трехзвенка в народе
@olezhek28go
@olezhek28go 5 месяцев назад
Я уже не помню, что там за пикча была) в целом, если там шестиугольник, то кажется оно тут тоже ложится) или я что-то упускаю?
@yarbersheer8559
@yarbersheer8559 9 месяцев назад
эй.. почему не по схеме explicit architecture? ) один раз бы разобрались, было бы веселее )) А ещё DDD не хватат)
@olezhek28go
@olezhek28go 9 месяцев назад
да я рассказывал из своей рабочей практики) а так-то конечно можно намутить будет как-нить урок веселья ради и по тому же DDD) Заодно будет повод лучше разобраться хех
@alekseishashev712
@alekseishashev712 9 месяцев назад
@@olezhek28go это, я так понимаю, вся суть лучших практик по архитектуре - "веселья ради"? 😅
@TheDavBag
@TheDavBag 7 месяцев назад
на больших бачах конвертер дорого юзать (ещё один проход O(n)), также спорно использовать конвертер на перекладывании одинаковых полей из одной структуры в другую. я лично предпочитаю сквозные дто/модели на микросервис. прикол что ЧА разрабилась для модульных монолитов
@olezhek28go
@olezhek28go 7 месяцев назад
ага, на большых бачах будет грустно( сквозные дтошки мы тоже юзали в другом проекте, сейчас решили иначе)
@TheDavBag
@TheDavBag 7 месяцев назад
@@olezhek28go а что повлияло на выбор?
@romanbush5164
@romanbush5164 2 месяца назад
интересно когда-нибудь напишут для go Фреймворки, пока это выглядит, как ранний php, но хотя бы архитектурно придумали как делить это безобразие
@olezhek28go
@olezhek28go 2 месяца назад
Внутри крупных компаний есть:)
@qskyisover8153
@qskyisover8153 Месяц назад
Надеюсь, что никогда
@ypohut1673
@ypohut1673 3 месяца назад
А правда что в го можно новичкам идти? Непонятно что лучше взять питон или го?
@olezhek28go
@olezhek28go 3 месяца назад
Конечно можно) в чем проблема?)
@vugpgu
@vugpgu 2 месяца назад
Да, лучше питон в руках, чем гоу в кустах
@user-sx4hu3ny9c
@user-sx4hu3ny9c 4 месяца назад
Посмотрел разные видосы по чистой архитектуре, единого стандарта тупо нет, каждый городит по своему "как удобнее или как понял" У кого-то Entity,Usecase у кого-то Model, Repository. Давайте еще какой-нибудь "Template" еще введем, чтоб всем дружно гадать, что это такое
@olezhek28go
@olezhek28go 4 месяца назад
Если правильно помню, я об это и говорил) в любом случае на уровне команды лучше устаканивать договоренности такие)
@9285550
@9285550 3 дня назад
Не понял зачем RLock в гете.
@olezhek28go
@olezhek28go 3 дня назад
Чтобы запись залочить)
@9285550
@9285550 3 дня назад
@@olezhek28go пошёл читать доки сразу после просмотра, уже разобрался, спасибо)
@niumandzi2929
@niumandzi2929 8 месяцев назад
А у кого-то есть пример цепной инициализации DB Client'a в контестке реализации, представленной в этом видео?
@olezhek28go
@olezhek28go 8 месяцев назад
Дак а что там сверхъестественного?) принцип же тот же самый
@niumandzi2929
@niumandzi2929 8 месяцев назад
Ну я столкнулся с некоторыми проблемами при попытке реализации, по этому решил спросить
@faizulla5838
@faizulla5838 8 месяцев назад
Вопросы все задают вроде как все с опытом, но смотря как чувак распинается объясняя всем что он сделал все на интерфейсах, типа ООП, то понимаешь что многие вообще не знают что такое ООП, и инкапуляция в том числе. Хотя Go он вообщето задуман как функциональный язык, и че городить ООП, я пока не догнал, за исключением "+" для поддержки проекта. А закзчику тяжело с сайтом и сервером... дааа ерунда.
@JohnGrave
@JohnGrave 5 месяцев назад
В Go коммьюнити вообще как-то странно с пониманием архитектуры сервисов, я заметил
@vugpgu
@vugpgu 2 месяца назад
​@@JohnGraveв комьюните противостояние очкариков ушедших с плюсов и студентов после питона. Борьба поколений!
@L0wPressure
@L0wPressure 9 месяцев назад
Сорри, но 666 подписичков - пока кто-то не испортит, подписаться религия не позволит.
@olezhek28go
@olezhek28go 9 месяцев назад
Уже испортили:(
@vincentvince2136
@vincentvince2136 7 месяцев назад
Прикольно конечно, но я в ахуе с этих названий переменных: r, n, a, b, s. Для реального проекта это конечно будет тот еще пиздец, особенно когда новенькие придут и будут в этом разбираться
@olezhek28go
@olezhek28go 7 месяцев назад
Это имена ресиверов и они как раз таки часто именно в таком стиле и задаются в проектах и проблемы в этом нет
@vincentvince2136
@vincentvince2136 7 месяцев назад
​@@olezhek28go Ну это в любом случае может ввести в некоторое заблуждение или недоумение неподготовленного человека, ничего не мешает написать название чуть подлиннее, зато любой человек поймет что к чему, да и легче потом в коде будет искать их использование
@olezhek28go
@olezhek28go 7 месяцев назад
Таков стиль в гошке:) написать можно, спору нет
@andreyparovozz
@andreyparovozz 2 месяца назад
Послушал первые 10 минут. Дальше не смог. Формулирование мыслей на уровне 5 класса.
@olezhek28go
@olezhek28go 2 месяца назад
А вы в шестой уже перешли?:)
@michaelcorleone3741
@michaelcorleone3741 6 месяцев назад
Все курсы и тренинги - вчерашний день, лохотрон) вы там получите как минимум устаревшую информацию) не рекламируйте это.. имейте совесть) в разы эффективней найти себе ментора) и дешевле и полезней
@olezhek28go
@olezhek28go 6 месяцев назад
Почему я не могу рекламировать свой собственный курс, материал которого я обновляю) да и разговоры про знания, которые не используются тоже спорный) практики, которые я там рассказываю мы активно юзаем у себя в команде в Авито) ментор тоже хороший способ, спору нет
@michaelcorleone3741
@michaelcorleone3741 6 месяцев назад
@@olezhek28go Если вы передаете свой опыт, знания и являетесь ментором для каждого ученика индивидуально - респект вам и уважуха.. если же нет - то те же пожелания наоборот вам.. и геморрой хронический в качестве бонуса)
@user-cq7gb9gj4e
@user-cq7gb9gj4e 5 месяцев назад
Большинство коммерческих курсов - да. Но есть бесплатные курсы от компаний, в которых бывает полезно. Проходил такой от МТС пару лет назад, для меня это был легкий способ войти в Go, имея опыт в другом языке. Доступная информация, классные менторы. Практические задания для меня были мотивацией потратить время на изучение языка на практике. После курса получил 3 оффера из бигтехов РФ, в одном из которых работаю до сих пор.
@michaelcorleone3741
@michaelcorleone3741 5 месяцев назад
@@user-cq7gb9gj4e Вам повезло) я не имею ввиду, что все вокруг шарлатаны.. всего лишь 99% населения планеты
@videorelief
@videorelief 7 месяцев назад
зная как работает ужасно Авито, лучше всерьез не слушать данный доклад
@olezhek28go
@olezhek28go 7 месяцев назад
Зная как устроен интернет, лучше всерьез не слушать комментарии😄
@videorelief
@videorelief 7 месяцев назад
@@olezhek28go согласен, но очень прощу почините Авито уже, так плохо работает =((
@olezhek28go
@olezhek28go 7 месяцев назад
Я во внутренних сервисах тружусь, так что над основным сайтом власти не имею(
@carrykerry2023
@carrykerry2023 6 месяцев назад
А че не так с авито? Вроде нормально там ручки отвечают, никогда долго не ждал ответа
Далее
skibidi toilet multiverse 039 (part 1)
05:29
Просмотров 4,7 млн
🎙️ПЕСНИ ВЖИВУЮ от КВАШЕНОЙ💖
3:23:13