Объекты и структуры по Clean Code. Как писать хороший код?

Поділитися
Вставка
  • Опубліковано 25 вер 2024

КОМЕНТАРІ • 94

  • @kudashevs
    @kudashevs 3 роки тому +47

    Про Закон Деметры интересно. Если еще и с каким-нибудь хитрым примером неявного нарушения было бы вообще шикарно :)

  • @deniss7703
    @deniss7703 3 роки тому +17

    Интересно про закон Деметры. Спасибо!

  • @pfiresky
    @pfiresky 3 роки тому +17

    Интересно будет посмотреть отдельное видео про закон Деметры!

  • @alexhali6003
    @alexhali6003 3 роки тому +2

    Сергей, предлагаю объединить эти видео в один плейлист)

  • @valbv
    @valbv 3 роки тому +6

    Супер! Спасибо за информативное видео )
    Будет круто, если архитектурный тренд зайдёт и будет побольше разбора архитектурных решений/ошибок

  • @alexandrianov8109
    @alexandrianov8109 3 роки тому +16

    Здравствуйте, снимите пожалуйста видео на тему - Путь от мидла до синьера

  • @jollyroger2757
    @jollyroger2757 3 роки тому +9

    Спасибо за знания. Запишите пожалуйста видео, как в реальном коде соблюдать принципы GRASP на java.

  • @MrRomanvideo
    @MrRomanvideo 3 роки тому

    Комментарий в поддержку этого видео и лайк для продвижения канала. Ну и за закон Деметры.

  • @mykola-rohoza
    @mykola-rohoza 3 роки тому +1

    Интересно про закон Деметры, к сожалению больше одного лайка поставить не могу))

  • @Alex-ip9bn
    @Alex-ip9bn 3 роки тому +2

    Ничего не понял , но очень интересно))

  • @swimmwatch
    @swimmwatch 3 роки тому +5

    К сожалению, не было никакого обоснования, почему плохо писать классы с окончанием er. Вроде в самой Java есть StringBuilder - ы всякие и т. д.

  • @nickr6196
    @nickr6196 3 роки тому +6

    Ноги у собаки должны быть приватным компонентом с ограниченным внешним доступом :)

  • @JohnSmith-ml2yg
    @JohnSmith-ml2yg 3 роки тому

    Вижу видос Сергея, ставлю лайк с двух ног!

  • @ЮрийПлохов-к2в
    @ЮрийПлохов-к2в 3 роки тому +4

    Принцип Деметры много вопросов вызывает. Вот например создаём мы объект httpClient, вызываем его метод post, получаем объект response, вызываем его метод getBody. Все. Мы ведь нарушили принцип Деметры? А как тогда быть?

    • @bennymountain1
      @bennymountain1 3 роки тому

      Но ведь Response это не часть состояния httpClient, это возвращаемое значение Post(). Так что мы работаем с двумя отдельными классами - httpClient и Response, к обоим глубоко не лезем, не так ли?

    • @ЮрийПлохов-к2в
      @ЮрийПлохов-к2в 3 роки тому +1

      @@bennymountain1 ну и получается, что есть закон Деметры, который нельзя нарушать, ну или хотя бы не очень сильно нарушать. Короче, как и все остальное в ООП, требует прагматизма.

  • @AlexAlex-jk2tn
    @AlexAlex-jk2tn Рік тому

    Очень хорошо подмечено про дальние вызовы, особенно если посмотреть, как реализован weak_ptr в C++, и там нет возможности обратиться к объекту иначе как object_wp.lock().method(), даже если вы точно знаете, что объект всё ещё жив в момент использования weak_ptr, неужели было сложно добавить оператор -> для данного типа указателей.

  • @tribacckk
    @tribacckk 3 роки тому +2

    про закон диметры. А что делать в такой ситуации. У тебя есть интерфейс iА, реализуется классом cA. У iA есть 3-4 интерфейса и все. Небольшой такой хороший интерфейс.
    А вот у cA внутри есть объект cB который реализует интерфейс iB. А вот у iB уже 100500 методов.
    Я таким сталкивался когда работал с тем, что iB это какой-то визуальный компонент у которого 100500 различных метод для кастомизации и рисования.
    Выше описал абстрактно, пока писал вспомнил про реальный пример:
    Excel
    Верхеуровнего у нас доступна рабочая книга. Но чтобы поменять стиль у конкретной ячейки нам надо пройтись по внутренним объектам.
    Насколько я помню надо получить коллекцию листов, в коллекции найти лист, у листа уже запросить ячейку, у нее уже поменять стиль.
    На верхнем уровне у рабочий книги ведь нет метода который позволит сразу поменять стиль ячейки

  • @a.sorokin
    @a.sorokin 3 роки тому +8

    FileReader вышел из чата

  • @OleksandrKharchenko-rt9hf
    @OleksandrKharchenko-rt9hf 3 роки тому +6

    06:51 укол в JS засчитан

    • @max_mgtow
      @max_mgtow 3 роки тому +1

      JS рулит, не бугурти))

    • @maxlich9139
      @maxlich9139 3 роки тому

      @Keira Errinwright как будто в джс нельзя

  • @borisvolokhov6546
    @borisvolokhov6546 3 роки тому +8

    Как хорошо, что Вы напоминаете, что Вы Сергей Немчинский! Ваше имя и фамилия въелась в кору моего головного мозга, аааа!! Что Вы наделали?!!!

  • @oleksandrkovtunov487
    @oleksandrkovtunov487 2 роки тому +1

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

  • @PavelAkulich
    @PavelAkulich 3 роки тому

    Спасибо большое за ваши видео. Расскажите пожалуйста про основы Clean Architecture с примерами из жизни)

  • @АрманМеликбекян-е4ш

    Здравствуйте Сергей, расскажите пожалуйста зачем в таких ОО-языках как C++, C#, Java доступ к переменным класса происходит через get/set методы, а не напрямую

  • @artemhnilov
    @artemhnilov 3 роки тому +4

    Тяжело быть апологетом ООП... По возможности избегайте этого.

    • @0imax
      @0imax 3 роки тому +1

      Тяжело всех отговаривать от ООП :)

    • @artemhnilov
      @artemhnilov 3 роки тому

      @@0imax это правда

  • @volodymyrzakolodyazhny7740
    @volodymyrzakolodyazhny7740 3 роки тому +2

    Звісно, що люди люблять дивитися відео про чистий код. Дивишся відео - і думаєш, що таким чином, вже сам став розробником з чистим кодом. :-)

  • @БендерЗадунайский-щ9ы

    вам эту лекцию в "гугле" прочитать надо было в 2007, когда они GO изобретали. такого наx¥eвертили!!!..

  • @mikhailefremov8583
    @mikhailefremov8583 3 роки тому

    Про то, что поведения не должно быть в dto - это понятно. Но dto - это состояния объектов бизнес логики приложения и один хрен нужно мапить dto на реальные классы. Или есть какой то лучший способ это провернуть (кроме рефлексии) ?

  • @TedFanat
    @TedFanat 3 роки тому +5

    Странная штука этот ваш клин код - никто не видел и не писал, а все говорят)

  • @artursveshnikov7668
    @artursveshnikov7668 3 роки тому

    А какая альтернатива у active record? И там тоже могут быть свои недостатки, раз ar все ещё используют.

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  3 роки тому

      хватает альтернатив. От Data Accessor до Data Mapper (ORM)

  • @TwilightSun32
    @TwilightSun32 3 роки тому

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

  • @МихаилКрамер-н7ш
    @МихаилКрамер-н7ш 3 роки тому

    Ну про ActiveRecord - понятно. Хорошо, берём второй подход, который используется в Hebirnate Java или в Doctrine и ряде других ORM в PHP. Взяли мы класс предметной области, и половину (а чаще все) его полей обвесили всякими аннотациями, некоторые из которых указывают прямо тип поля в БД. Мы что, не получили зависимости от аннотаций? Мы типа не нарушили SRP? Но после навешивания аннотаций, у нас фактически в этом классе есть информация о том, как хранить его в базе данных. Где профит по сравнению с AR?

    • @arman-6172
      @arman-6172 8 місяців тому

      отличный вопрос! не нашел ответ случайно за два года?)

    • @МихаилКрамер-н7ш
      @МихаилКрамер-н7ш 8 місяців тому

      @@arman-6172 Про жабу не скажу, а про доктрину читал вариант, что если очень радеешь за чистоту кода, не обвешивай аннотациями, а конфигурируй через xml/yml и т.п. А аннотации (теперь атрибуты) типа да, нарушают, но меньшее зло

    • @arman-6172
      @arman-6172 8 місяців тому

      @@МихаилКрамер-н7ш благодарю! Как будто действительно нужно какой-то баланс ловить

  • @the_minor_emotion
    @the_minor_emotion 3 роки тому +2

    class Nemchinsky extends(Developer, Businessmen, Coach, UA-camr, ...);

  • @adminroot1345
    @adminroot1345 3 роки тому +1

    В чем разница между макапом и факапом?

    • @max_mgtow
      @max_mgtow 3 роки тому

      В том что там тебя поимеют, а там нет)

  • @elib2203
    @elib2203 3 роки тому +1

    Жаль что нет наглядных примеров

  • @Kadabra1981
    @Kadabra1981 3 роки тому +2

    Насчет дальних вызовов - пол javafx в них, и ничего, часть jdk.

  • @bloodpineapple9057
    @bloodpineapple9057 3 роки тому

    Подскажите пожалуйста, никак не могу запомнить. Стараюсь, но из раза в раз не получается запомнить.
    Как вас зовут?

  • @nicolas267s
    @nicolas267s 3 роки тому

    Util.java или CommonUtil.java почти во всех проектах есть)))

  • @НиколайПетров-п5т
    @НиколайПетров-п5т 3 роки тому

    Пора выпускать энциклопедию с названиями переменных и классов. Бардак-с

  • @0imax
    @0imax 3 роки тому

    "Вы должны в явном виде различать, что из этого класс с поведением, а что - структура без поведения".
    Особенно таким запутыванием грешат плюсовики, объявляющие классы через struct, потому что им лень писать public.

  • @АлександрРыжков-м7ъ

    Деметры +

  • @vitalijuskolinko9011
    @vitalijuskolinko9011 3 роки тому

    Мой учитель - не uncle Bob, а S. Nemchinskiy 👳

  • @VaGroz
    @VaGroz 3 роки тому

    Привет case class-ы

  • @kartograf490
    @kartograf490 3 роки тому +1

    А куда пропала кружка, ммм?!

    • @SergeyNemchinskiy
      @SergeyNemchinskiy  3 роки тому +1

      забыли поставить :)

    • @kartograf490
      @kartograf490 3 роки тому +1

      @@SergeyNemchinskiy Надеемся, что она жива, иначе бундъ)

  • @roman6572
    @roman6572 3 роки тому +1

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

    • @SecretYouTubeAgent
      @SecretYouTubeAgent 3 роки тому

      Да Немчинский сам не понимает что говорит

    • @roman6572
      @roman6572 3 роки тому

      @@SecretUA-camAgent не, он норм мужик

    • @SecretYouTubeAgent
      @SecretYouTubeAgent 3 роки тому

      @@roman6572 хз, что за мужик, но программист так себе

  • @orlovskyconsultinggbr2849
    @orlovskyconsultinggbr2849 3 роки тому

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

  • @111shooter1111
    @111shooter1111 3 роки тому +1

    Откуда так много поведения у объектов в типичном Enterprise? Доменная модель -- обычно структура данных. Всякие записи, о людях(клиент, пациент, покупатель), какие то там документы связанные с ними, пусть там чек в магазине. Так вот, чек сам себя не считает, он структура данных. Запись о товаре сама себя не обрабатывает -- тоже структура. Пусть собака, какая нибудь, будет. Она же не в игре или симуляции жизни, ей гавкать в коде не нужно, о ней, скорее всего, будет просо запись(вет клиника например), это опять структура данных, эта запись сама себя не отображает, не передает.
    Вот в геймдеве объекты с поведением уже выглядят логичнее. Там собачка и правда может сама бегать, а мы ей отдаем команды.

    • @0imax
      @0imax 3 роки тому

      Ну вот как раз чек считает себя сам, спрашивая у каждой позиции её сумму, а та берётся из стоимости товара и количества.

    • @111shooter1111
      @111shooter1111 3 роки тому +1

      ​@@0imax и зачем? Это как раз ActiveRecord
      На примерах школьного уровня оно неплохо выглядит. А если нужно применить скидку? А для этого проверить текущие акции, скидочную карту или аккаунт пользователя.
      Что мы имеем: нет единой формулы расчета, она разбросана по коду -- понять код сложнее, больше точек изменения при новых требованиях. Странные зависимости. Если эти чеки в базе хранить то при загрузке данных им нужно инжектить зависимости, тогда тот кто получает эти данные должен это делать. Это добавит еще ему зависимостей либо на DI контейнер либо на то что нужно заинжектить.
      Другой пример:
      Сообщение тоже само себя отправляет? Тогда пусть оно зависит от HttpClient, надо только еще получателя где то взять, давайте базу подключим.
      А создаваться это сообщение как будет? Само себя примет или кто то создаст?
      И что мы имеем: две точки взаимодействия с отправкой по сети, работой с базой и прочим. Кривой DI так как сообщение это не зависимость, его нужно создавать, но еще и ему передать зависимости.

    • @0imax
      @0imax 3 роки тому

      @@111shooter1111 Это information expert. Иначе чеку придётся лезть внутрь каждой позиции, спрашивать у неё товар, у товара спрашивать цену, скидку, всё это считать снаружи от тех объектов, которые сами могли бы это посчитать и выдать результат, который осталось бы просто просуммировать.
      Можно, конечно, всё считать в одном методе, но с увеличением количества стратегий подсчёта он пухнет и превращается в гору ифов, в которой потом хрен разберёшься. В то время как каждый кусочек "размазанного по коду" расчёта остаётся довольно простым.
      Можно долго теоретизировать о том, как делать лучше, но конкретная задача ставит всё на свои места: где-то проще пробежаться по всему чеку, собрать всё и перемножить/сложить, а где-то проще насетить товар уже с учётом всех скидок и бонусов, а чеку останется лишь всё это просуммировать.

    • @111shooter1111
      @111shooter1111 3 роки тому +1

      ​@@0imax В современной разработке ActiveRecord зачастую не оправдан, он плохо дружит с DI и ORM (кроме примеров где действительно надо 2+2).
      Местами действительно можно и так делать, но это должны быть действительно маленькие сущности, которые не имеют тенденции к росту логики. Например какое то простое дерево где каждая нода дает свой результат беря резульат дочерних, тут выделять какой то класс для обработки действительно смысла не имеет.
      И задача разработчика находить баланс между overdesign и решением в лоб, которое потом приведет к проблемам при расширении.
      Есть такие подходы как data-oriented design например, где данные нужно строго отделять от обработки. Или более простое MVC, где модель зачастую не имеет кода.

  • @gyros9162
    @gyros9162 3 роки тому

    Про извращение - это про JS :))

  • @silkproduction
    @silkproduction 3 роки тому +2

    больше нас не любит(

    • @max_mgtow
      @max_mgtow 3 роки тому

      Всё, разлюбил батенька))

  • @maksonic_official
    @maksonic_official 3 роки тому

    Хоть бы одну строчку кода написал)

    • @0imax
      @0imax 3 роки тому +1

      Зачем, если и так всё понятно?

    • @max_mgtow
      @max_mgtow 3 роки тому

      Так сам напиши

  • @romandolmatov9098
    @romandolmatov9098 3 роки тому

    Добрый. Можете Вы посоветовать как решить эту проблему? Делаю интернет магазин. и на магазин размещаю кнопку с ссылкой на видео, как с магазином работать. Записать видео полноценно смогу только залив магазин с базой на хост. А кнопка-ссылка она же в коде прописана )). Я в этом деле новичок, расскажи как избежать двойного действия. Я думал типа записать пустышку на ютуб, создать не нее ссылку, (а в ютубе перезаписывать видео нельзя, соответственно URL теряется). Захостить магазин, заполнить его и потом перезаписать вместо той пустышки полноценное короткое видео. Ваши видео постоянно смотрю, вот почему-то подумал что Вы Мне бы смогли помочь. Что можете посоветовать?

    • @ZendTheExpert
      @ZendTheExpert 3 роки тому +4

      Я многое видел, но задавать вопросы по коду в Ютуб комментах это что-то новое...

    • @romandolmatov9098
      @romandolmatov9098 3 роки тому

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

    • @sergeymoskalenko282
      @sergeymoskalenko282 3 роки тому

      "кнопка-ссылка она же в коде прописана"
      Код в котором прописана ссылка - в файле (или в нескольких файлах).
      Что вам мешает поставить вместо ссылки знак "#". Захостить магазин.
      Когда загрузите своё видео на ютуб, получаете на него ссылку и вставляете вместо знака "#", и закачивание на хостинг этот фаил(ы) уже со ссылкой.
      Или у вас на хостинг доступ "одноразовый"?)

    • @romandolmatov9098
      @romandolmatov9098 3 роки тому

      @@sergeymoskalenko282 Вы немножко не так поняли, или может я новичок и еще так не делал и недоганяю ), но прочтите пожалуйста мой запрос еще раз )

    • @0imax
      @0imax 3 роки тому +1

      В чём проблема добавить ссылку на ютуб после заливки на хостинг?

  • @Philip_Just
    @Philip_Just 3 роки тому

    Я на украинском читаю. Есть отличное недорогое бумажное издание серии книг Боба

    • @max_mgtow
      @max_mgtow 3 роки тому

      Привет, бро)

  • @АлександрМихайлов-н4ж

    Кто ты такой ?

  • @radikovichkz2470
    @radikovichkz2470 2 роки тому

    Уж точно не слушать немчинского вода