Коммуникация модулей в Laravel

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

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

  • @shod76
    @shod76 3 месяца назад +13

    Ролик в студию. Ты просто мастер объяснять. Постоянно смотрю даже то, что знаю!😂

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      Благодарю)

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

    Ждём ролик про тесты!)

  • @ЕвгенийРыбкин-ф6м
    @ЕвгенийРыбкин-ф6м 3 месяца назад +2

    Спасибо за ролик!
    Подход с коммуникаторами очень похож на подход API + Adapter в чистой (слоеной) архитектуре
    Было бы очень интересно посмотреть пример проекта с изолированными модулями

  • @Моргенштерн-о4ь
    @Моргенштерн-о4ь 3 месяца назад +7

    Полписался. Да сними пожалуйста развернутый ролик о TDD

  • @vasiliyrozhkov945
    @vasiliyrozhkov945 3 месяца назад +1

    Классный ролик! Очень полезный материал!👍

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

    Очень прошу запиши такой ролик! только что

  • @webdev2030
    @webdev2030 3 месяца назад +6

    Как полюбить писать тесты?

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      расскажу)

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

    Ждем TDD

  • @PunctRu
    @PunctRu 3 месяца назад +1

    3:03 имеют ли смысл эти интерфейсы в отрыве от соответствующего модуля?
    4:15 "взаимодействуем исключительно с помощью интерфейса и публичных методов что нам доступны"
    8:17 А как же open/closed? Мы оставляем публичный метод которым нельзя пользоваться и старший разраб должен это контролировать?

  • @friendvane7612
    @friendvane7612 3 месяца назад +3

    Классный материал, будут интересны и другие видое в этом направлении

  • @0kkama
    @0kkama 3 месяца назад

    6:08 - интересно, но мне кажется это сложнее, чем приучить себя регулярно делать гимнастику. Особенно когда на работе есть живой тестировщик

  • @EscapefromWunderland-jz2yc
    @EscapefromWunderland-jz2yc 3 месяца назад +3

    Даешь приложение в рамках концепкии!

  • @slikeiv4477
    @slikeiv4477 3 месяца назад +4

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

    • @CutCodeRu
      @CutCodeRu  3 месяца назад +2

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

    • @pavlobezdvernyi9348
      @pavlobezdvernyi9348 3 месяца назад

      если долгоживущие, то можно просто РПЦ а если РПЦ то в прото файлах ты и так описываешь интерфейс сервиса

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      @@pavlobezdvernyi9348 угу, specification first

  • @alexanderk8992
    @alexanderk8992 3 месяца назад +2

    странный подход, но чем-то интересный. а почему в данном случае интерфейс отделен (namespace) от реализации? в чем преимущество?

    • @strandedinthe0737
      @strandedinthe0737 2 месяца назад

      в том что реализации может быть много

    • @alexanderk8992
      @alexanderk8992 2 месяца назад

      @@strandedinthe0737 это точно преимущество?

    • @strandedinthe0737
      @strandedinthe0737 2 месяца назад

      @@alexanderk8992 в нормальном патерне это называется порты и адаптеры

    • @alexanderk8992
      @alexanderk8992 2 месяца назад

      @@strandedinthe0737 я про неймспейсы.

  • @muhammadumarsotvoldiev8768
    @muhammadumarsotvoldiev8768 3 месяца назад +3

    Очень прошу запиши такой ролик!

  • @silentage6310
    @silentage6310 3 месяца назад +3

    имхо, неудачное название комуникатор.
    может быть Connector, Bridge, или даже просто ...Module

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      Ну это уже все есть) хочется по свежее

    • @silentage6310
      @silentage6310 3 месяца назад

      @@CutCodeRu у меня коммуникатор только с телефонами ассоциируется.

    • @CutCodeRu
      @CutCodeRu  3 месяца назад +1

      @@silentage6310 у меня со звездными войнами)

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      @@silentage6310 телефоны так то тоже для общения

    • @silentage6310
      @silentage6310 3 месяца назад

      @@CutCodeRu давай классы тогда назовём phone :)
      UserPhone
      OrderPhone
      DeliveryPhone
      звучит! :)

  • @Sosed00
    @Sosed00 2 месяца назад

    В комментариях вы говорите, что выбирая Laravel, надо быть готовым к компромисам. Отсюда делаю выводы, что сложные проекты делать на Laravel нецелесообразно. Тогда зачем выдумывать велосипед, если уже есть архитектура от разработчиков фреймворка? Как минимум, не будет страданий при поддержке. Наверное можно сделать велосипед в пакете. Туда никто не полезет.

  • @thisfil
    @thisfil 3 месяца назад

    Выглядит как-будто бы просто вы одним доменом завязываетесь на фасад другого домена

  • @InfoPolza
    @InfoPolza 3 месяца назад +2

    По больше всего этого

  • @alexplishkin5811
    @alexplishkin5811 3 месяца назад +1

    Отличное видео. Я тоже так делаю. Но вместо Communicators называю просто папку Contracts.

  • @ЮрийПлохов-к2в
    @ЮрийПлохов-к2в 3 месяца назад +2

    Ждем следующие видео на эту тему. С примерами и так далее

    • @CutCodeRu
      @CutCodeRu  3 месяца назад +1

      сделаем!

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

    Thanks❤

  • @НиколайШи-с9о
    @НиколайШи-с9о 3 месяца назад

    Почему у тебя User.php лежит внутри модуля? Это не правильно если он используется контрактом то он должен лежать рядом с контрактами

  • @Abdugoffor_Qodirov
    @Abdugoffor_Qodirov 3 месяца назад

  • @user-page_mage
    @user-page_mage 3 месяца назад +2

    Вы просто супер жду ролик про тесты.

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      ок, сделаем!

  • @ИльяСорокин-д9ц
    @ИльяСорокин-д9ц 3 месяца назад

    Я к такому же пришёл в итоге, только да, как и ниже кто-то писал у меня всё приложение зависит от папки с контрактами.
    И обмазал это php insight + deptrac
    Но тут стучится проблема Eloquent.
    Чтобы изолировать модели базы данных от слоя управления мы их очевидно вешаем на интерфейсы
    А так как в пыхе нет интерфейсов на публичные свойства, приходится либо костылями (контракт магического геттера + phpDoc), либо гет методами лечить проблему.
    В первом случае мы открываем знания о то что можно записать в поле модели в слое управления, что запрещено архитектурно
    Во втором случае мы ломаем архитектурную концепцию eloquent и начинаем делать чуждые ей геттеры
    Плюс в системе с единой моделью базы данных очень быстро ключевые модели обрастут деталями других модулей
    То есть мы сразу ставим правило что модели должны быть анемичными(иначе теряется смысл модульности), а вся логика уйдёт в севисы доменного слоя.
    И тут ещё приходит проблема, что есть слой модуля, а есть доменный слой и они имеют разное предназначение.
    Слой модуля - это слой управления доменом.
    У этого слоя свои сервисы и свои модели(дто)
    Доменный же слой ультратонкий в котором всё что есть это модели(не eloquent, а в отдельных случаях большого домена - кастомные, которые не зависят от бд) и сервисы
    Единственная зависимость домена - контракты и модель eloquent. Но мы так же можем архитектурно убрать проблему сохранения моделей не в том месте и создание странных ситуаций тем, что повесим зависимость домена на разбитый контракт модели на write и read-интерфейсы.
    В общем, та модульность которую ты показал это лишь малая часть огромной работы которую нужно провести для борьбы с хаосом завимостей и нарушения ответственности слоёв.
    И то не факт что это поймут в боевом проекте. Я такое экспереентирую только в пет проектах.
    Потому что у меня есть печальный опыт когда боевой проект, написанный с нуля, через полтора года закрылся от крайне высоких затрат на поддержку оверинжиниринга так как никто кроме архитектора не понял написанного и поломал быстро проект до неподдерживаемого состояния.

    • @CutCodeRu
      @CutCodeRu  3 месяца назад +1

      @@ИльяСорокин-д9ц рассказ о том как мы пришли к doctrine) а так со всем согласен, спасибо за такой комментарий!

    • @ИльяСорокин-д9ц
      @ИльяСорокин-д9ц 3 месяца назад

      @@CutCodeRu по-сути так и есть. Чем больше ты ломаешь архитектуру laravel и пытаешься сделать её чище чем ближе ты к симфони.
      Проблема больше кроется в том, что ларавель не предназначен быть чистым по изначальной задумке)
      Нужно много компромиссов как с архитектурой так и с потенциальными разработчиками.
      И где-то на грани этого балансировать.
      Вот тебе пример, чувак в нарушение слоёв вызывает в ресурсе бизнес-действие.
      Как от этого защититься? Повесить зависимость слоя управления от контрактов + php stan. Сломать это можно, но на ревью такой костыль будет кричащим.
      Как это реализовать иначе? Делать viewModel слоя управления и кастить из элоквент во viewModel. Цена поддержки мега высокая.
      Цена контракта будет минимальной, но если мы делаем контракт с магическим геттером то автоматически лишаем себя возможности передавать наверх простые ДТО.
      А иначе придётся писать геттеры и ломать концепцию eloquent...
      Чтобы сделать лару чистой придётся заключить очень много компромиссов.
      Скажем так, архитектурные скилы типового разработчика на ларавель на порядок ниже симфониста.
      И я сейчас, например, часто сталкиваюсь с тем, что разрабы не понимают элементарных архитектурных паттернов, отличных от стандартных лары.
      И не понимают почему некоторые паттерны лары не жизнеспособны в большом проекте.

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      @@ИльяСорокин-д9ц да все верно и выбирая ларавел надо быть готовым к куче компромиссов

  • @kind1y
    @kind1y 3 месяца назад

    Очень прошу, запиши такой ролик!

  • @bogdanchirukin1050
    @bogdanchirukin1050 3 месяца назад

    а как в такой модульной системе widart/laravel-modules придерживаться изоляции?

  • @anastasyawork3279
    @anastasyawork3279 3 месяца назад

    Очень прошу ролик про интерфейсы, и про то, как их можно связывать с классами, и как использовать дальше в проектах!

  • @gembla_info
    @gembla_info 3 месяца назад

    Недрочибельно.

    • @CutCodeRu
      @CutCodeRu  2 месяца назад

      Вы просто не старались!

    • @gembla_info
      @gembla_info 2 месяца назад

      @@CutCodeRu В том-то и дело, что старался((( Очень старался((( И так и сяк. Ну ни как.

  • @АртурЗарипов-б2й
    @АртурЗарипов-б2й 3 месяца назад +1

    Большое спасибо!

  • @asxenonify
    @asxenonify 2 месяца назад

    Странный подход, не ясно зачем крутить эти интерфейсы, как по мне лишняя абстракция. Если модуль не доступен, то и интерфейсы работать не будут, а если доступен модуль, то смысл городить этот огород. Модульная система хорошо реализована в Yii2, тут по этому ролику понять ценность предлагаемого автором невозможно.

  • @kakao_with_milk
    @kakao_with_milk 3 месяца назад +2

    пожалуйста сделайте ролик с тдд и более подбробный ролик на реальном простом примере модулей

    • @CutCodeRu
      @CutCodeRu  3 месяца назад

      запланировал