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

Поделиться
HTML-код
  • Опубликовано: 12 сен 2024
  • Заканчиваем #чистая #архитектура на примере #golang композитами. Третья часть& Дальше будем делать приложение с использованием этой архитектуры!
    Приятного просмотра!
    Больше обо мне и курсах можно прочитать здесь:
    artofedu.org/
    GitHub репозиторий:
    github.com/the...
    Часть 2 - • Уроки по Golang. Advan...
    Часть 1 - • Уроки по Golang. Advan...
    Поддержи выход новых видео на Патреоне!
    / theartofdevelopment
    Другие видео:
    Уроки по 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 #clean_architecture #урок #jetbrains #goland #tutorial #голенг #development #howto #learnbasics #coding #programming #изучаемIT #программирование #разработка

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

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

    Отличный контент, спасибо!
    Чтобы не плодить композиты, можно также выбрать немного другой подход к реализации и расположить директории следующим образом:
    1. cmd/app/main.go - точка входа, где инициализируется конфиг и вызывается метод app.Run()
    2. internal/app/app.go - содержит только метод Run() и в нем инициализируются все объекты (сервисы, репозитории, бд клиенты и тд)
    3. internal/domain - содержит основные сущности и бизнес правила. 1 сущность - 1 файл
    4. internal/service - сервисы (1 файл - 1 сущность). Интерфейсы располагаются в файле interfaces.go в корне пакета service (для удобной генерации моков в дальнейшем)
    4. internal/service/repo - аналогично репозитории в формате сущность_реализацияБД.go
    5. internal/handler/тип_хандлера/версия/сущность.go - контроллеры/хандлеры, где тип_хандлера - тип сервера, например http, или amqtp_rpc.
    Все остальные реализации серверов, логгеров и прочего "утилит" располагать в pkg
    При таком раскладе не будет проблем с повторением имен у пакетов.
    Вот пример такого подхода github.com/ysomad/go-auth-service

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

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

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

      @@TheArtofDevelopment к примеру есть cmd->main.go и есть internal -> some-package-> some-logic.go и тут же some file forread.xml или somefile.csv, some-logic.go содержит функцию котрая читает этот файл ReadFile('./somefle.csv') но это даст ошибку потому что на момент запуска этот файл долежн находиться в папке cmd а не тут , как в таком случае лучше делать? где хранить файлы которые надо читать, например статику или еще какие то файлы. По бизнес логики они нужны в одном месте, но класть их надо всегда только в cmd где main.go

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

    Спасибо. Ждал. Вебка огонь.

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

    О, новый видосик!! Ещё не смотрел, но царский лайк уже поставил!!! Спасибо!!!

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

    Спасибо за ваш труд!

  • @user-jv4od5en6z
    @user-jv4od5en6z 2 года назад +3

    Небольшая подсказка по голанду, когда пишешь возвращаемые типы метода-функции голанд автоматически обрамляет скобками типы если их больше одного, достаточно поставить запятую после первого возвращаемого типа

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

      забываю об этом постоянно! спасибо!

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

    Спасибо за твой труд! Было интересно!

  • @Shindos-Kopernik
    @Shindos-Kopernik Год назад +1

    Спасибо! отличный обзор архитектуры.

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

    «Всегда делись тем, чему ты научился».
    - Йода

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

    Контент супер. Просто кайф

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

    Да, я тупой. Вебку надо было записывать отдельным потоком, чтобы потом убрать фон и убирать ее в нижний угол, а не в верхний.
    Но ничего, в следующий раз :-)

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

    Супер! Спасибо.

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

    Классно, спасибо)

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

    используйте wire)

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

    а как же принцип dependency inversion principle? Почему не использовать зависимость от интерфейсов?
    В такой реализации тестирование становится проблематичным

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

      так она здесь родимая, никуда не делась

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

    Привет! Очень интересно все таки увидеть реализацию т.к. сейчас присутствует циклическая зависимость между domain и adapter сущностями. Ну и не раскрыта тема с инициализацией Сервисов зависящих от других сервисов, тоже частенько приходится упираться в циклические зависимости.

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

    Артур , посдкажи где и как хранить файлы? если на момент старта он считает что находиться в папке cmd, чтение файлов надо делать всегда относительно того где лежит исполняемый main.go , не относительно пакета в котором мы пишем логику чтения какого то файла?

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

      не очень понял какие файлы. пути относительные относительно бинарника, а не файла main.go.

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

    Можете сделать видос про cobra framework для cli приложений на golang

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

      я другую либу пробовал, может на нее запилю что-то. мне она очень понравилась

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

    Возникла ошибка import cycle not allowed - возникл цикл, которые в go не поддерживаются. Исправил переносом интерфейса сервиса в Domains. Насколько это правильно?

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

      Скоро будет обновленная версия чистой архитектуры с учетом ошибок

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

      Жду с нетерпением :) спасибо!

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

    3:40 у меня adapters.Handler вместо api.Handler . это нормально?

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

    привет. Можеш репозиторий свой обновить, Там старая версия. Спасибо заранее !

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

    Похоже на то, что чувак изобрел недо-IoC-контейнер

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

    Справа в плейлисте написано: 1 недоступное видео скрыто. Это про что? Кстати, можно в jetbrains создавать файл, указываю путь из папок, и тогда он создаст и все папки и файл.

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

      надо посмотреть но я точно перезаливал

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

    Это не про Clean Arch, где сущности и VO? порты inout?

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

    google/wire намного Проше все это сделает, сгенерирует композитор сам и не надо ручками писать.