Почему не нужно использовать Impl в названии классов.

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

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

  • @viktarpatsiaichuk3558
    @viktarpatsiaichuk3558 2 วันที่ผ่านมา +1

    Отсутствии интерфейса допустимо и да класс можно именовать как DeliveryService. Но у этого есть подводные камни.
    - В случае использования DeliveryService в другом сервисе происходит нарушение принципа Dependency Inversion из SOLID.
    - В случае использования Spring и например желании сервиса сделать транзакционным вы вынуждаете использовать cglib вместо dynamic proxy.
    В случае единичной реализации использование Impl допустимо.
    В случае нескольких реализация нужно действительно использовать осмысленные имена.
    При наличии abstract реализации лучше тоже не использовать Impl ибо найминг будет неконстстентный AbstractDeliveryService и DeliveryServiceImpl

    • @kotojava
      @kotojava  2 วันที่ผ่านมา

      Спасибо не надо.

    • @dlinnozmey
      @dlinnozmey 2 วันที่ผ่านมา +1

      В SOLID нет принципа Inversion of Control

    • @Skaiiur
      @Skaiiur 2 วันที่ผ่านมา

      @@dlinnozmeyдля тех кто книжек не читал. Имеется ввиду Dependency inversion

    • @viktarpatsiaichuk3558
      @viktarpatsiaichuk3558 2 วันที่ผ่านมา

      @@Skaiiur Спасибо, поправил ответ

  • @ДанилДанилов-н7м
    @ДанилДанилов-н7м 3 วันที่ผ่านมา +2

    А как называть в чистой архитектуре, когда у нас есть доменный слой с контрактами (там DeliveryService) и слои которые реализуют контракты за которое отвечают, слой delivery-core (там DeliveryServiceImpl)? Вот в C# тоже самое, но там нейминг interface IDeliveryService и class DeliveryService и всех всё устраивает

    • @ДанилДанилов-н7м
      @ДанилДанилов-н7м 3 วันที่ผ่านมา

      Думаю этот случай показывает что на один контракт - одна реализация бывает нормально

    • @kotojava
      @kotojava  3 วันที่ผ่านมา

      Не нужно делать реализацию для одной абстракции. Это загрязнение кода

    • @ДанилДанилов-н7м
      @ДанилДанилов-н7м 3 วันที่ผ่านมา

      @@kotojava так вопрос как раз как тогда добиваться низкой связанности компонентов, если у нас не будет абстракций, все слои приложения обязаны знать имплементацию

    • @kotojava
      @kotojava  3 วันที่ผ่านมา

      @@ДанилДанилов-н7м если не планируется больше чем 1 имплементация то никаких абстракций и не нужно.

    • @ДанилДанилов-н7м
      @ДанилДанилов-н7м 3 วันที่ผ่านมา +3

      @kotojava приведу боевой пример. Есть модуль для работы с БД, он знает про jpa, postgres, имеет библиотеки для работы с ними и реализует интерфейсImpl. Остальные модули знают только про интерфейс и Spring успешно подтягивает реализацию к ним через DI. Если отказаться от интерфейса всем модулям придётся подключать этот модуль как прямую зависимость и они узнают подробности про jpa, postgres и т.п

  • @eugenakv
    @eugenakv 2 วันที่ผ่านมา

    Не существует ни одной ситуации, когда одного класса достаточно. У каждого DeliveryService всегда существует DeliveryServiceImpl и его мок, например, в тестах. Можно использовать класс напрямую, если не собираетесь писать тесты (и верите, что не породите лишний coupling)

    • @kotojava
      @kotojava  2 วันที่ผ่านมา +1

      Существует. Моки не являются обязательными для хорошего тестирования.

  • @bolekrus
    @bolekrus 3 วันที่ผ่านมา +7

    Вообще то так классы называет самая лучшая IDE. Автор не выспался, а ролик уже записал 😅

  • @dzenthai
    @dzenthai วันที่ผ่านมา

    Никогда не писал Impl в названии классов, чисто из за эстетических соображений.

  • @temez6413
    @temez6413 3 วันที่ผ่านมา +4

    Как раз про меня ахахаха

  • @universeunity9970
    @universeunity9970 2 วันที่ผ่านมา

    Это напрягает, но приходится так делать.

  • @MrAlexandrStv
    @MrAlexandrStv 3 วันที่ผ่านมา +1

    Добавлю, в ожном проекте мы как раз не делаем интерфейсы, т. К. Согдасен с автором тут, зачем делать интерфейс и одну имплементацию. Бред. В другом проекте банка у нас кучу аннотаций свагера, тайминга, mdc и т..п. Интерфейсы служат больше для разгруза всех этих аннотаций, если бы это было все на классе, то это бы была нечитаемая хрень)

  • @yggllen
    @yggllen 3 วันที่ผ่านมา

    Согласен, но забыли ещё один кейс - если у вас монолит и сервис нужен для другого модуля, то сам сервис находится в апи модуле, а имплементация в импл модуле. И тогда название норм. И в этом случае если нужна новая реализация сервиса, то скорее нужна и новая реализация так как могут сигнатуры меняться и тогда все равно будет и New, и v2, и другие)

    • @yggllen
      @yggllen 3 วันที่ผ่านมา

      Но когда в одном модуле делают и интерфейс и сам сервис это вымораживает)

  • @Skaiiur
    @Skaiiur 2 วันที่ผ่านมา +1

    Очень косноязычная речь, но за смыслы спасибо. Действительно актуально.

    • @verayanovka8114
      @verayanovka8114 2 วันที่ผ่านมา

      Озвучьте, в чем выражается косность - неясность? невнятность? невыразительность?