Уроки по Golang. Advanced. Чистая Архитектура / Clean Architecture Часть 1

Поделиться
HTML-код
  • Опубликовано: 6 сен 2024
  • Пришло время пообщаться про чистую архитектуру и ее реализацию в Go.
    Приятного просмотра!
    GitHub репозиторий:
    github.com/the...
    С радостью хочу вам представить, что я запускаю курс “Начальная подготовка” по языку Golang. Курс как для совсем начинающих в сфере IT, так и для тех, кто хочет просто изучить язык Go.
    Больше обо мне и курсах можно прочитать здесь:
    artofedu.org/
    Больше информации есть в ролике на ютубе:
    • Анонс: Курс Начальная ...
    На все вопросы могу ответить в Телеграм группе канала и в личных сообщениях.
    Другие видео:
    Уроки по Golang. Advanced. REST API. Вебсервер.
    • Уроки по Golang. Advan...
    Изучаем Python. Урок 1. Основы. Бонус: Пишем приложение на FastAPI • Изучаем Python. Урок 1...
    Изучаем Golang. Урок 1. Основы + веб-сервер в 3 строки в конце урока! • Изучаем Golang. Урок 1...
    Разработка системы заметок на Python, Golang и микросервисы в 2021 году • Разработка системы зам...
    Как стать разработчиком. Часть 1 • Как стать разработчико...
    Что такое микросервисы за 200 секунд • Что такое микросервисы...
    Что такое Apache Kafka за 200 секунд • Что такое Apache Kafka...
    Telegram Group: t.me/theartofd...
    VK: thearto...
    Дружественный Golang чат: t.me/gogolang
    ----
    Меня зовут Артур Карапетов и я занимаюсь всем, что связано с разработкой. Я создаю высоконагруженные информационные системы, стартапы, занимаюсь личным обучением людей в сфере разработки (программисты, аналитики, системные администраторы), также я помогаю компаниям и стартапам с обучением людей работать и повышением их квалификации, об этом можно почитать здесь: mitkadr.ru.
    На этом канале я выкладываю ролики на интересующие меня темы, здесь можно найти серию роликов про создание информационной системы с нуля, а также можно найти серию уроков по языкам, которые я люблю. Добро пожаловать и хорошего просмотра!
    #golang #урок #restapi #rest #микросервисы #microservices #jetbrains #goland #tutorial #голенг #development #howto #learnbasics #coding #programming #изучаемIT #программирование #разработка

Комментарии • 90

  • @TheArtofDevelopment
    @TheArtofDevelopment  Год назад +1

    С радостью хочу вам представить, что я запускаю курс “Начальная подготовка” по языку Golang. Курс как для совсем начинающих в сфере IT, так и для тех, кто хочет просто изучить язык Go.
    Курс доступен в 3 вариациях:
    1. Онлайн курс с лекциями, заданиями, чатом менторской поддержкой.
    2. Полный видеокурс
    3. Отдельные блоки с лекциями
    Больше обо мне и курсах можно прочитать здесь:
    bit.ly/3XK1oZp
    Записаться на курс можно вот тут:
    bit.ly/406V3IY
    А видео курс тут:
    bit.ly/406VgMg
    А отдельные блоки с видео тут:
    bit.ly/3Rfmhcj
    Больше информации есть в ролике на ютубе:
    ruclips.net/video/E0b0dmwf-6c/видео.html
    На все вопросы могу ответить в Телеграм группе канала и в личных сообщениях.

  • @andrewolegovich8754
    @andrewolegovich8754 2 года назад +20

    Дружище, ты очень крут в донесении информации и её подаче. Благодарю за труды. Твои видео очень полезны, пусть у тебя всегда будет вдохновение помогать людям )

  • @user-uq7yk5vm5r
    @user-uq7yk5vm5r Месяц назад +1

    Лучшее видео по теме на русском! Спасибо!!!! Наконец-то стало понятнее

  • @alexandrsukhrin5400
    @alexandrsukhrin5400 2 года назад +7

    Сказочный голос героя слушал как сказку на ночь )) Спасибо

  • @MichailMishutkin
    @MichailMishutkin 2 года назад +4

    Лучший канал о Go!!!! Понять возможно только если сталкивался с реализацией архитектуры. Но если сталкивался, то польза этого видео зашкаливает!!!! Доначу просто из благодарности за моё съэкономленное время и нервы!!!

  • @alexscorpion1321
    @alexscorpion1321 2 года назад +12

    Отличное видео, очень жду продолжения. Спасибо за твои труды

  • @lexanlix
    @lexanlix 11 месяцев назад +1

    Большое спасибо, отличное видео! После просмотра Go Advances как раз было неполное понимание что куда и для чего, а здесь все супер понятно объясняется!

  • @nwuno
    @nwuno Год назад +2

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

  • @AlexanderMatveev
    @AlexanderMatveev 2 года назад +10

    По сути, все что сделано, это структура папок. Идеи на будущее:
    1) Где будет жить валидация запросов к API (не только формата и набора полей, но и допустимых значений с учетом уровней доступа)
    2) Где будет жить в целом разграничение доступа и роли (GetAllBooks может быть разным для разных ролей)
    3) Связи доменных сущностей, контексты и реализация их мапинга в репах, без этого вообще нет смысла рассматривать чистую архитектуру

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад

      Записал

    • @bestia96
      @bestia96 Год назад

      Можете подсказать, есть где-либо пример самой "правильной" реализации микросервиса с учетом всего возможного

    • @paniciour
      @paniciour Год назад

      @@bestia96 ее нету, когда понимаешь и принимаешь это, то идешь учить алгоритмы, распределенные системы или еще что реально полезное, а не жевать козявки

  • @user-jm7io6ut2p
    @user-jm7io6ut2p 2 года назад +6

    Однозначно нужно продолжение. Ждем!

  • @AlkeraIr
    @AlkeraIr 2 года назад +1

    доходчиво и понятно объясняете и рассказываете. с примером в коде гораздо легче усваивается.
    спасибо!

  • @sergeyfilatov3027
    @sergeyfilatov3027 2 года назад +1

    C чуством юмора у тебя все в порядке, ставлю лайк

  • @alekseybudaev2135
    @alekseybudaev2135 2 года назад +2

    Круто объясняешь, давай больше про архитектуры и различные подходы

  • @user-jx8jl7nc3j
    @user-jx8jl7nc3j 2 года назад +4

    Да отлично вообще, конечно, надо продолжать!)

  • @delay_gryaz_chisto
    @delay_gryaz_chisto 2 года назад +3

    спасибо большое за видео.
    обычно storage(репозиторий) кладу рядом с сервисом(в той же директории). так получается целый контекст упакован в одном пекадже. этакий микросервис внутри приложения.
    а так со всем согласен, все здорово. продолжение ждем)

  • @blckhwk8024
    @blckhwk8024 2 года назад +1

    Спасибо за видео! В целом понятно, но чувствую придется пересматривать. Пойду смотреть следующие части.

  • @LeonZaaa
    @LeonZaaa 2 года назад +4

    Супер! Ждём продолжения!

  • @Andrei-cv1kn
    @Andrei-cv1kn 2 года назад +3

    Спасибо! Все понятно! Ждем продолжения!

  • @wMwPlay
    @wMwPlay 2 года назад +3

    Да, всё по фэн-шую, но перегруз случился хаха. Хотим часть 2

  • @vp_arth
    @vp_arth 5 месяцев назад

    Споткнулся на первой же модели. Знание, что книжка занята и кем занята некорректно размещать в модели Book. Мы зачем-то осознанно ограничиваем варианты использования этой модели одинм сценарием.
    Смотрю дальше.

  • @wildjoe6259
    @wildjoe6259 2 года назад +5

    Спасибо! Отличные видео делаете!

  • @ArslanArslan-ph2pz
    @ArslanArslan-ph2pz 2 года назад +4

    Шикарно

  • @vladimirudalykh4121
    @vladimirudalykh4121 2 года назад +2

    Огонь, очень круто, спасибо большое

  • @UAStriker
    @UAStriker 2 года назад +3

    Спасибо! Понятно и понравилось, жду продолжение!
    Но есть два замечания:
    1) На 35:38 минуте вы сначала отправляете тело запроса, а затем заголовок. надо наоборот.
    2) На 24:51 минуте зачем возвращать указатель на Book? Так память будет выделена в куче, что создаст лишнюю нагрузку на сборщик мусора. Лучше отдавать копию Book, так память будет выделена в стеке.

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад +1

      пересмотрю - отвечу

    • @PoletaevRoman
      @PoletaevRoman 2 года назад +2

      В случае с возвратом указателя можно вернуть nil, а куча для того и нужна, чтобы память для объектов выделять. Выделять память на стеке под большие бизнес-объекты совершенно ни к чему.

  • @openrtb
    @openrtb 2 года назад +3

    хороший материал , лайк, подписка)

  • @user-rd4ph1oh3x
    @user-rd4ph1oh3x 2 года назад +1

    Огонь, спасибо за урок)

  • @sandrynin
    @sandrynin 2 года назад +3

    Поддержу лайкосом, жаль что на полуслове.

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад

      А это чтобы понять нужна ли вторая часть :)

  • @ivanstrelka3448
    @ivanstrelka3448 2 года назад +3

    Кайф, спасибо!

  • @tilekasankulov5034
    @tilekasankulov5034 2 года назад +5

    Мощь!!!

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад +6

      Спасибо. Значит вторую часть делать? )

    • @tilekasankulov5034
      @tilekasankulov5034 2 года назад +1

      @@TheArtofDevelopment обязательно!!!
      Сейчас мало просмотров, но думаю со временем люди найдут ваш канал будут также как и я кайфовать)))

    • @user-fd9bg1gm8z
      @user-fd9bg1gm8z 2 года назад +1

      @@TheArtofDevelopment Обязательно!!!

  • @user-yw2xc2kc6p
    @user-yw2xc2kc6p 2 года назад +1

    Ты лучший! Спасибо большое!

  • @it1860
    @it1860 2 года назад +1

    красавчик.!
    риспект
    молоцо
    благодарю!

  • @nurlanikhsan3692
    @nurlanikhsan3692 6 месяцев назад

    1. почему интерфейсы определены на стороне продьюсера ?
    2. Почему функция возвращает интерфейс вместо того, чтобы возвращать конкретный тип ? По конвенции, функция получает интерфейс, а возращает конкретный тип же - конечно, это правило, а правило не всегд придерживается )
    3. Почему функция усложняется тем еще, что возращает пойнтер к структуру ? Ведь пойнтеры не всегда полезны для рантайма для маленьких данных.

  • @slavik695
    @slavik695 2 года назад +5

    все круто и понятно) может попробовать прям как по книжке с пресенторами, юзкейсами интеракторами для них? Еще как вариант, можно кроме рест интерфейса показать пример с cli интерфейсом, когда условно говоря у тебя нет риквеста

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад +1

      можно. но зачем? архитектура должна же помогать, а не мешать :-)
      а вот про CLI интересно - надо будет подумать

    • @aidarlatypov7747
      @aidarlatypov7747 2 года назад +1

      Не стоит переносить подходы Java в Go один к одному да и не получится. Принципы нужно перенимать. Гексагональная, Луковая или Чистая - суть одна, адаптеры и инверсия зависимости - и все по сути. Чистая архитектура конечно очень полезна убрать инфраструктуру и привести все в порядок, но она автоматически не спасет от спагетти кода в самом домене. Если хотите прямо разобраться и все увязать вместе то есть серия публикаций Герберто Граца, там все сведено в одну большую схему с подробностями и объяснениями и гит есть правда насколько помню на ПХП

    • @slavik695
      @slavik695 2 года назад

      @@aidarlatypov7747 надо глянуть, спасибо

    • @jonik_doit4463
      @jonik_doit4463 2 года назад

      @@aidarlatypov7747 буду оч признателен, если поделитесь ссылочкой на гит

    • @aidarlatypov7747
      @aidarlatypov7747 2 года назад

      ​@@jonik_doit4463 Напишите свой телеграмм, это еще найти же надо.. ) Прямо сейчас не могу

  • @theeasywaytr4293
    @theeasywaytr4293 2 года назад +2

    Коллеги, подскажите, пожалуйста, почему мы передаем service в NewHandler в controllers не по ссылке?

  • @TheDavBag
    @TheDavBag 2 года назад +3

    imo излишне было разделение на субдоменные директории в domain, и директория adapters.
    и еще вопрос про клиент в pkg: разве его не надо инкапсить в internal? его ведь юзать будет только наша прилога.
    я как понял, переходя на го, что в pkg интерфейс нашей прилоги для го модулей

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад

      про субдоменные директории в domain возможно соглашусь, а вот про pkg не понял

    • @TheDavBag
      @TheDavBag 2 года назад

      @@TheArtofDevelopment возможно я не так понял концепт разделения на pkg и internal, поправь, если не прав: internal инкапсулирует всю логику приложения и запрещает её импорт извне.
      Pkg же является интерфейсом приложения для взаимодействия (например для go module) и юзает все, что в интернал, так?

  • @user-jd2xr7bf2t
    @user-jd2xr7bf2t Год назад +1

    я интерфейсы кидаю папку Port

  • @rumartru
    @rumartru 2 года назад +3

    Спасибо, лайк. Зачем контроллеры пихать в папку адаптеры? Они же таковыми не являются?

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад +4

      являются. они адаптеры между транспортом и логикой

  • @kirillmilano7593
    @kirillmilano7593 День назад

    Топ контент

  • @m1rable283
    @m1rable283 2 года назад +1

    Спасибо

  • @BROV1
    @BROV1 2 года назад +4

    продолженние бы..

  • @nurlanikhsan3692
    @nurlanikhsan3692 6 месяцев назад

    если Gateways это репозитори, то внешний слой DB это же репозитори ?

  • @kodaf
    @kodaf 2 года назад +3

    Можешь скинуть архив с итоговым кодом или залить на гит?

    • @kodaf
      @kodaf 2 года назад +1

      Как в эту архитектуру интегрировать Proto? Мы можем исключить в таком случае DTO или он всё ещё нужен?

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад

      @@kodaf DTO нужен. Интегрировать Proto можно

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 года назад

      git будет

  • @tobiramasenju1782
    @tobiramasenju1782 Год назад +1

    молодец

  • @user-jd2xr7bf2t
    @user-jd2xr7bf2t 2 года назад +1

    UID надо передавать Удобно потом теснить без базы данных

  • @Antresoliorg
    @Antresoliorg 2 года назад +1

    Какой-то квантовый скачок прям от видео описания языка к видео написания приложений на данном языке.
    У меня постоянно возникали вопросы зачем и почему? Зачем нужна "чистая архитектура"? Зачем такая структура директорий? Термины проектирования, которые плохо согласуются с терминами бизнес-логики (домен, сервис в нескольких местах, модель, адаптер, порт, регистр, контроллер, интерфейс и т.д. и т.п.). И ведь эти абстракции явно ничего общего не имеют типами самого языка и плохо согласуются с терминами из смежных областей (сети, базы данных, кубренетес, что угодно). Плохо акцентирован момент передачи точки управления между слоями (я программист не настоящий, но всё через интерфейсы го, вместо передачи ссылки на структуру, видимо с этим связано).
    Короче. Если вы, например, из смежной it-области, то тут вы и приплыли. Нужны уроки на тему как писать приложения, почему именно так и к чему приводит если вот не так, а иначе. Миллион проектов работающих на гитхабе которые вот прям совсем не так.
    Пожелания по новым урокам.
    1) Дебаггинг в go.
    2) go для девопсов (+ взаимодействие с api kubernetes) best practice построения пайплайна для го приложения. (когда и как запускать лучше тесты, линтёры-форматеры, сонаркуб, паковка в образ, миграция бд ликвибейзом или чем на го меняется бд и т.п.) Если есть такой опыт, кончено.
    3) Цикл: "изучаем чужой код(т)". Что хорошо, что плохо и почему?
    4) Как написать свой модуль и выложить в опенсорс? Как правильно документировать ?
    5) Обвес современного приложения (микросервиса) на go (трассировка jagger, метрики прометеуса, правильное логирование в том числе паник и укладывания их в json -- чтоб красиво в кибане и т.п.). Параметризация приложения без рестарта. Swagger.
    И... уроки в целом хороши. Наверное пока лучшее на русском по go.

  • @user-jd2xr7bf2t
    @user-jd2xr7bf2t Год назад +1

    а в go есть Command Bus?

    • @TheArtofDevelopment
      @TheArtofDevelopment  Год назад

      сахар над комманд можно написать любой, а команда есть, да, но без наследования

    • @user-jd2xr7bf2t
      @user-jd2xr7bf2t Год назад +1

      ThreeDotsLabs/wild-workouts-go-ddd-example 3к звездочек, мне понравился

  • @yarbersheer8559
    @yarbersheer8559 2 года назад +1

    Hexogonal .... и шести, а не пятиугольник... пяти - это пентагон..

  • @SvirMusic
    @SvirMusic 9 месяцев назад +1

    Короче, для потомков, кто будет смотреть в 2023 и позже. Не тратьте время. В итоге он ничего не доделал, во второй части правит первую, в третьей вторую, в репо вообще другая структра папок в итоге и ничего не закончено и там. Опытным разрабам - бесполезно, новичкам - вредно. Шлак.

    • @LeonRussia8ypa
      @LeonRussia8ypa 4 месяца назад

      И что тогда смотреть? (И есть ли, или только читать)

  • @dmitriyobidin6049
    @dmitriyobidin6049 2 года назад +1

    Gateways это скорее API

  • @videorelief
    @videorelief 2 года назад +1

    😂😂😂😂🤣🤣🤣

  • @user-cp7ge5vk5m
    @user-cp7ge5vk5m 2 года назад +1

    Классное видео. Спасибо за труды