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

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 พ.ย. 2024

ความคิดเห็น • 90

  • @TheArtofDevelopment
    @TheArtofDevelopment  ปีที่แล้ว +1

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

  • @alexandrsukhrin5400
    @alexandrsukhrin5400 2 ปีที่แล้ว +7

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

  • @andrewolegovich8754
    @andrewolegovich8754 3 ปีที่แล้ว +20

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

  • @MichailMishutkin
    @MichailMishutkin 2 ปีที่แล้ว +4

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

  • @ВячеславЖувага-ю3ч
    @ВячеславЖувага-ю3ч 3 หลายเดือนก่อน +1

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

  • @nwuno
    @nwuno ปีที่แล้ว +2

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

  • @lexanlix
    @lexanlix ปีที่แล้ว +1

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

  • @AlkeraIr
    @AlkeraIr 2 ปีที่แล้ว +1

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

  • @AlexanderMatveev
    @AlexanderMatveev 3 ปีที่แล้ว +10

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  3 ปีที่แล้ว

      Записал

    • @bestia96
      @bestia96 ปีที่แล้ว

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

    • @paniciour
      @paniciour ปีที่แล้ว

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

  • @delay_gryaz_chisto
    @delay_gryaz_chisto 3 ปีที่แล้ว +3

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

  • @alexscorpion1321
    @alexscorpion1321 3 ปีที่แล้ว +12

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

  • @wMwPlay
    @wMwPlay 3 ปีที่แล้ว +3

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

  • @ДмитрийАгафонов-ь1к
    @ДмитрийАгафонов-ь1к 3 ปีที่แล้ว +6

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

  • @sergeyfilatov3027
    @sergeyfilatov3027 2 ปีที่แล้ว +1

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

  • @alekseybudaev2135
    @alekseybudaev2135 2 ปีที่แล้ว +2

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

  • @ВладимирЛепешко-т2р
    @ВладимирЛепешко-т2р 3 ปีที่แล้ว +4

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

  • @Andrei-cv1kn
    @Andrei-cv1kn 2 ปีที่แล้ว +3

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

  • @blckhwk8024
    @blckhwk8024 2 ปีที่แล้ว +1

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

  • @UAStriker
    @UAStriker 3 ปีที่แล้ว +3

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  3 ปีที่แล้ว +1

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

    • @PoletaevRoman
      @PoletaevRoman 2 ปีที่แล้ว +2

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

  • @LeonZaaa
    @LeonZaaa 3 ปีที่แล้ว +4

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

  • @wildjoe6259
    @wildjoe6259 3 ปีที่แล้ว +5

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

  • @vp_arth
    @vp_arth 7 หลายเดือนก่อน

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

  • @sandrynin
    @sandrynin 3 ปีที่แล้ว +3

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  3 ปีที่แล้ว

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

  • @vladimirudalykh4121
    @vladimirudalykh4121 2 ปีที่แล้ว +2

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

  • @ArslanArslan-ph2pz
    @ArslanArslan-ph2pz 3 ปีที่แล้ว +4

    Шикарно

  • @it1860
    @it1860 2 ปีที่แล้ว +1

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

  • @АлексейСуббота-ц4п
    @АлексейСуббота-ц4п 2 ปีที่แล้ว +1

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

  • @ivanstrelka3448
    @ivanstrelka3448 3 ปีที่แล้ว +3

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

  • @openrtb
    @openrtb 3 ปีที่แล้ว +3

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

  • @КириллКутузов-з2п
    @КириллКутузов-з2п 2 ปีที่แล้ว +1

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

  • @tilekasankulov5034
    @tilekasankulov5034 3 ปีที่แล้ว +5

    Мощь!!!

    • @TheArtofDevelopment
      @TheArtofDevelopment  3 ปีที่แล้ว +6

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

    • @tilekasankulov5034
      @tilekasankulov5034 3 ปีที่แล้ว +1

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

    • @АлександрРабушко-ц7о
      @АлександрРабушко-ц7о 3 ปีที่แล้ว +1

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

  • @nurlanikhsan3692
    @nurlanikhsan3692 7 หลายเดือนก่อน

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

  • @theeasywaytr4293
    @theeasywaytr4293 2 ปีที่แล้ว +2

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

  • @slavik695
    @slavik695 3 ปีที่แล้ว +5

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  3 ปีที่แล้ว +1

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

    • @aidarlatypov7747
      @aidarlatypov7747 3 ปีที่แล้ว +1

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

    • @slavik695
      @slavik695 3 ปีที่แล้ว

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

    • @jonik_doit4463
      @jonik_doit4463 2 ปีที่แล้ว

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

    • @aidarlatypov7747
      @aidarlatypov7747 2 ปีที่แล้ว

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

  • @TheDavBag
    @TheDavBag 3 ปีที่แล้ว +3

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 ปีที่แล้ว

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

    • @TheDavBag
      @TheDavBag 2 ปีที่แล้ว

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

  • @kirillmilano7593
    @kirillmilano7593 หลายเดือนก่อน

    Топ контент

  • @rumartru
    @rumartru 3 ปีที่แล้ว +3

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 ปีที่แล้ว +4

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

  • @m1rable283
    @m1rable283 2 ปีที่แล้ว +1

    Спасибо

  • @tobiramasenju1782
    @tobiramasenju1782 ปีที่แล้ว +1

    молодец

  • @kodaf
    @kodaf 3 ปีที่แล้ว +3

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

    • @kodaf
      @kodaf 3 ปีที่แล้ว +1

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  3 ปีที่แล้ว

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

    • @TheArtofDevelopment
      @TheArtofDevelopment  3 ปีที่แล้ว

      git будет

  • @BROV1
    @BROV1 2 ปีที่แล้ว +4

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

  • @nurlanikhsan3692
    @nurlanikhsan3692 7 หลายเดือนก่อน

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

  • @АлександрРыков-ж4ы
    @АлександрРыков-ж4ы 2 ปีที่แล้ว +1

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

  • @Antresoliorg
    @Antresoliorg 2 ปีที่แล้ว +1

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

  • @АлександрРыков-ж4ы
    @АлександрРыков-ж4ы 2 ปีที่แล้ว +1

    а в go есть Command Bus?

    • @TheArtofDevelopment
      @TheArtofDevelopment  2 ปีที่แล้ว

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

    • @АлександрРыков-ж4ы
      @АлександрРыков-ж4ы 2 ปีที่แล้ว +1

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

  • @АлександрРыков-ж4ы
    @АлександрРыков-ж4ы ปีที่แล้ว +1

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

  • @SvirMusic
    @SvirMusic 11 หลายเดือนก่อน +1

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

    • @LeonRussia8ypa
      @LeonRussia8ypa 6 หลายเดือนก่อน

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

  • @yarbersheer8559
    @yarbersheer8559 2 ปีที่แล้ว +1

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

  • @dmitriyobidin6049
    @dmitriyobidin6049 2 ปีที่แล้ว +1

    Gateways это скорее API

  • @videorelief
    @videorelief 2 ปีที่แล้ว +1

    😂😂😂😂🤣🤣🤣

  • @МихаилПопов-э7ш
    @МихаилПопов-э7ш 2 ปีที่แล้ว +1

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