Гексагональная архитектура и микросервисы

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024

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

  • @senin24
    @senin24 10 месяцев назад +8

    Титанический труд автора и бесценный контент. Как мне его не хватало пару лет назад. Спасибо за труд. По гексоганальной архитектуре мне так же понравилась книга Get Your Hands Dirty on Clean Architecture - там автор тож от теории сразу переходит к практике создания структуры приложения по гексагону, но в книге даже все попрорще, чем в этом видео. В этом видео прям от и до показана структура приложения. И как красиво и просто можно от монолита переходить к распределенным микросервисам. В случае если это действительно понадобилось, а не дань моде.

  • @hackim2554
    @hackim2554 11 месяцев назад +6

    Снимай дальше!!! Отличный контент, я бы хотел увидеть ещё про написания правильной веб архитектуры в современном backend

  • @viktorperov9020
    @viktorperov9020 7 месяцев назад +3

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

  • @БогданЗараник
    @БогданЗараник 11 месяцев назад +8

    блин, какой же классный контент. Вот нигде такого не видел, если честно.

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

      много спорных моментов, но в комментарии их не укажешь все

    • @shurik_codes
      @shurik_codes  11 месяцев назад +4

      Было бы желание)

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

    «Мне очень не нравятся аббревиатуры в названиях классов», «так называем класс Api, …. следующий класс Spi» 😂
    Видео очень интересное, спасибо.

  • @psergeev77
    @psergeev77 8 месяцев назад +1

    красиво!
    Спасибо, Александр

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

    уау, сочный контент, посмотрел в захлеб, по теме все делают по разному, увидел еще один вариант реализации))

  • @liliabekuzinaensosense8987
    @liliabekuzinaensosense8987 8 месяцев назад +2

    Спасибище!

  • @Тимур-л1м
    @Тимур-л1м 11 месяцев назад +2

    Мне больше понравился доклад от DDDevotion по чистой архитектуре, но там не показывали процесс разделения на модули и т.п.
    Я сейчас как раз пишу проект с гексагональной архитектурой, но отдельно на модули его я так и не решился разделить. Спасибо вам за это видео, сегодня постараюсь применить полученные знания)

  • @RatchetTV1515
    @RatchetTV1515 2 месяца назад +1

    Однозначно лучший джавист

    • @shurik_codes
      @shurik_codes  2 месяца назад +1

      Да ну нееее... Но спасибо)

  • @БогданЗараник
    @БогданЗараник 11 месяцев назад +2

    Про Spring ACL вообще только на этом канале впервые увидел)

  • @ANDREYQIWS
    @ANDREYQIWS Месяц назад

    Очень хочется к вам на индивидуальные занятия, если таковые будите вести.

  • @inzagher
    @inzagher 9 месяцев назад +10

    Вот интересно, одному мне показалось, что решение слишком переусложнено? По мне, схема, которая используется в большинстве спринг бутовых приложениях вида controller(listener, scheduled и т.д.) -> service -> repository (rest-template, kafka-template и т.д.) работает по тем же принципам, но не переусложнена деталями и допабстракциями. Пока ни разу не сталкивался с гексагоналкой, представленной именно в таком виде. Автору огромное спасибо за разъяснение принципов на практике.

    • @walcermelodia
      @walcermelodia 5 месяцев назад +1

      Слоистую архитектуру люди научились варить)
      А вот с гексагональной и ддд у большинства проблемы с пониманием + каждый по своему трактует

    • @lexxx1994
      @lexxx1994 5 месяцев назад +1

      И там и там есть плюсы и минусы. Иногда классическая трехслойка в одном модуле будет предпочтительнее.

  • @АлександрВолков-я6й
    @АлександрВолков-я6й 11 месяцев назад +2

    Спасибо за классный контент.
    Расскажи плиз что думаешь о Java modules ? Заметил что не используешь в этом тестовом проекте их. Что думаешь над возможностью скрыть часть пакетов с помощью Java modules ?

    • @shurik_codes
      @shurik_codes  11 месяцев назад

      В целом удобный инструмент, хотя и не решающий всех задач при работе с пакетами, хочется чего-то большего. Вообще код этого проекта распределён таким образом, чтобы не возникло проблем при внедрении JPMS. Но это не продемонстрировано для экономии времени)

  • @e-researcher
    @e-researcher 4 месяца назад +1

    👍

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

    большое спасибо автору

    • @androidandroid1893
      @androidandroid1893 11 месяцев назад

      и все-таки какая то магия происходит с produces = "application/vnd.catalogue.product-category.v1+json (в моей редакции без selmag). Запрос GET localhost:8080/api/catalogue/product-categories/1 Accept: application/vnd.api+json (и в других редакциях) возвращает 406 Not Acceptable. Лог Could not find acceptable representation .

    • @androidandroid1893
      @androidandroid1893 11 месяцев назад

      Не. Магии нет. Не было getter-ов в ProductCategoryPresentationV1

    • @shurik_codes
      @shurik_codes  11 месяцев назад

      А так и должно быть, если метод возвращает "application/vnd.catalogue.product-category.v1+json", то единственное корректное значение заголовка Accept - именно "application/vnd.catalogue.product-category.v1+json"

  • @munirsunchalyaev7484
    @munirsunchalyaev7484 Месяц назад

    Подскажите, как реализовать с JPA. Где должны располагаться сущности и располагаться миграции?

  • @baxiskerimzade2690
    @baxiskerimzade2690 11 месяцев назад +4

    Где же найти столько свободного времени чтоб это всё посмотреть ?))

    • @shurik_codes
      @shurik_codes  11 месяцев назад +3

      Ну, яж нашёл как-то время это всё записать)

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

      @@shurik_codes спасибо большое
      Продолжайте
      Мы обязательно все посмотрим )

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

    🔥🔥🔥

  • @elsalvadore7063
    @elsalvadore7063 9 месяцев назад

    Отличное видео спасибо Вам большое!!! Тоже использую гексагональную архитектуру, но не разделяю по отдельным модулям порты ведь порты относятся к доменной модели? Может поправите если не так?

    • @shurik_codes
      @shurik_codes  9 месяцев назад

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

  • @ЕвгенийАлексеев-о9э
    @ЕвгенийАлексеев-о9э 10 месяцев назад

    Александр, большое спасибо за видео. Получается, можно обойтись без доменной сущности, которая в ядре была?

    • @shurik_codes
      @shurik_codes  10 месяцев назад

      В операциях чтения - да

  • @sergeyshcherbakov3653
    @sergeyshcherbakov3653 10 месяцев назад

    сложна. восхищаюсь людьми, которые способны держать в голове такие схемы зависимостей (без иронии). но у меня вот вопрос практического свойства: как организовано версионирование модулей?
    некоторые зависимости встречаются по несколько раз в pom файлах модулей: customer-shared - 6 раз, catalogue-shared - 4 раза, customer-spi-catalogue - 4 раза, catalogue-api - 3 раза. И это у нас всего две бизнес-сущности - Customer и Catalogue, учебный пример!
    При изменении версии того или иного модуля, как мне кажется, довольно легко забыть внести соответстветствующие изменения во все остальные помники смежных модулей... Вы как с этим справляетесь?
    Если где-то ошибся или неправильно понял автора, заранее прошу прощения 😇

    • @shurik_codes
      @shurik_codes  10 месяцев назад +1

      Обычно нет никаких проблем ручками обновлять версии, но вообще есть плагин versions, который позволяет упростить работу с версиями: www.mojohaus.org/versions/versions-maven-plugin/index.html

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

    Верно ли я понял, что в реализации гексагональной архитектуры нужно под каждый метод класса порта писать отдельный интерфейс? Т.е. порт - это по сути один метод? Или же можно делать порт с несколькими методами?

    • @shurik_codes
      @shurik_codes  4 месяца назад +1

      Можно писать и несколько методов в одном порте, никто не запрещает. Я просто так трактую принцип разделения интерфейса.

  • @resolution07
    @resolution07 5 месяцев назад +2

    Не показывайте это КРУДОделам, у них инфаркт случится

  • @БогданЗараник
    @БогданЗараник 11 месяцев назад +1

    А кто может подсказать, что за плагинчик под идею с @simple 0%? Это про конгитивную сложность кода что-то?

  • @dmaberlin
    @dmaberlin 10 месяцев назад

    Code Complexity - какой профит от этого плагина?

    • @shurik_codes
      @shurik_codes  10 месяцев назад +2

      Оценка когнитивной сложности, ставил ради интереса

  • @ИванПавлов-э6у
    @ИванПавлов-э6у 11 месяцев назад +3

    Один глаз на нас, другой на Кавказ.
    А видос - класс)

    • @shurik_codes
      @shurik_codes  11 месяцев назад +3

      Ох уже эти ваши шуточки про мои глаза...

  • @mikhailkarpovdev
    @mikhailkarpovdev 11 месяцев назад +3

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

    • @shurik_codes
      @shurik_codes  11 месяцев назад

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

    • @Алексейм-с7б
      @Алексейм-с7б 11 месяцев назад

      Так расскажи

  • @К.ОТяра
    @К.ОТяра Месяц назад

    Архитектура ради архитектуры.. ну зачем так наворачивать все? Спрингбутовые микросервисы - простая как бревно вещь! Controiller - DTO+Mappers - Service - Repository/Entity
    Не нужно этих пакетов-модулей-spi-адфптеров.. jdbc еще вынесли куда-то отдельно.. о фак! столько лишних директорий, помников.. глаза болят!!