КОД КАК У СЕНЬОРА. РЕФАКТОРИНГ

Всем привет! С вами первая серия проекта «Код Раковского». Где я, Александр Раковский, Senior Java разработчик компании ITentika, расскажу о том, что считаю важным и интересным в сфере программирования.
Ссылка на исходный код и репозиторий с коммитами: github.com/rakovi4/refactorin...
Каких-то жестких правил тут не будет, главное, запомните:
Здесь не любят костыли и велосипеды.
Здесь не терпят код без тестов.
Здесь чтут отцов аджайла.
Здесь суровое экстремальное программирование.

Пікірлер: 150

  • @CoRecYT
    @CoRecYT Жыл бұрын

    Какой сочный видос. Один из самых годных по рефакторингу, что я видел. Однозначно лайк.

  • @binzaricatalin6542

    @binzaricatalin6542

    Жыл бұрын

    А можно фото с видео? С котом Томом)

  • @ITentikaOnline

    @ITentikaOnline

    Жыл бұрын

    @@binzaricatalin6542 а вот и кот! itentika.ru/wp-content/uploads/2022/10/cat_refactoring.jpg

  • @binzaricatalin6542

    @binzaricatalin6542

    Жыл бұрын

    @@ITentikaOnline спасибо ✋

  • @karimkimsanbaev7932

    @karimkimsanbaev7932

    Жыл бұрын

    Я

  • @ok-tz3vw
    @ok-tz3vw Жыл бұрын

    Видос - супер! Кратко, понятно и доступно! Можно показать как разрабам, так и менеджменту.

  • @ulcuber
    @ulcuber Жыл бұрын

    Разбивать на методы нужно по уровням абстракции. Я насмотрелся на кучу безсвязных методов. Для рефакторинга бывает нужно свалить всё в один метод, чтобы поделить всё заново. Самое частое для веба в проектах любого размера -- запросы к базе в неожиданных местах. В основном нужно отделять получение данных от рассчётов. Часто логику просто двигают из одного класса в другой, чтобы удовлетворить какое-нибудь требование, вроде "контроллер должен быть коротким", но смысла в этом нет, если у тебя получается Noname класс, делающий то же самое. Если нельзя назвать назначение класса, то скорее всего он был создан не для решения задачи, а для переноса логики, чтобы спрятать.

  • @beispiel
    @beispiel Жыл бұрын

    Очень приятная манера повествования и дикция, уши в восторге

  • @bog_d
    @bog_d Жыл бұрын

    Знаю родителей автора видео, классные мужики!

  • @Nisitka
    @Nisitka Жыл бұрын

    Спасибо за видео! Все понятно и доступно

  • @user-by8ji5nm2o
    @user-by8ji5nm2o Жыл бұрын

    Топ, однозначно. И техническая сторона, и философская, и взаимоотношения.

  • @user-rr7yr9ml9p
    @user-rr7yr9ml9p Жыл бұрын

    Спасибо, теперь появилось хоть и смутное, но понимание того, что же такое рефакторинг

  • @sliceem88
    @sliceem88 Жыл бұрын

    Блин категорически крутой контент! Как раз в процессе.

  • @user-up2lc4kb5o
    @user-up2lc4kb5o Жыл бұрын

    Автору спасибо за видео. "Структурный поиск/замена" в IntelliJ Idea тоже является мощным средством рефакторинга и автоматизации сопутствующих рутинных операций. Не могли бы Вы также, как и в этом ролике, более подробно познакомить нас с этим инструментом?

  • @urbanfreestylerone
    @urbanfreestylerone10 ай бұрын

    Это просто великолепно! На ум сразу пришел проект, который мне нужно рефакторить, ибо не заходя в него 2 месяца, я начал путаться в своем же коде

  • @foooxich8828
    @foooxich8828 Жыл бұрын

    Прекрасное видео, спасибо большое автору

  • @enter_IT
    @enter_IT Жыл бұрын

    Классная подача материала в видео :)

  • @user-iz8jg2ky6p
    @user-iz8jg2ky6p Жыл бұрын

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

  • @gset1000
    @gset1000 Жыл бұрын

    все это конечно интересно... Но я не понял фичу со switch. Отрефактарил код и в итоге, по сути к нему же и вернулся, заменив его на if(ы). Почему не создать словарь, где будут храниться все классы -наследники и ключ по priceCode?

  • @user-sw9hc5pn6s
    @user-sw9hc5pn6s Жыл бұрын

    катастрофически одобряю контент полезный

  • @cognosce6193
    @cognosce6193 Жыл бұрын

    Можно добавлять в описание ссылку на репозиторий исходников? спасибо

  • @youtubeyh
    @youtubeyh Жыл бұрын

    Только за озвучку уже 2 лайка заслуживает!

  • @nomugop8017
    @nomugop8017 Жыл бұрын

    Сильно брат! Надеюсь однажды достигну твоего уровня код рефакторинга ;), а лучше сразу буду писать как надо.

  • @___avka___924
    @___avka___924 Жыл бұрын

    Для того кто не стоял на проде тяжко... Но интересно. Понял к чему приводят неправильные тесты. Спасибо за интересный контент.

  • @spamcolector
    @spamcolector Жыл бұрын

    Просто божественный контент большое автору спасибо. Одна проблема если ты пытаешься разобраться что автор пишет ты понимаешь что ускоренное Перемотка здесь вообще ни к месту. Приходится постоянно останавливать видео и разбираться хотя и понимаю зачем было это сделано

  • @Unknow2N

    @Unknow2N

    Жыл бұрын

    да и говорит по ходу дела довольно энергично) Если в теме 0, то тяжело воспринимать. Я начал сыпаться с switch-case. Надо будет пересматривать, как предыдущая информация будет переработана

  • @BodnarSergey
    @BodnarSergey8 ай бұрын

    Отличный видос!

  • @antonchekulaev
    @antonchekulaev Жыл бұрын

    Братан, хорош, давай, давай, вперёд. Контент в кайф, можно еще? Вообще красавчик! Можно вот этого почаще?

  • @TurboKot1k
    @TurboKot1k6 ай бұрын

    слова настоящего синьора, мое почтение! единственное есть пару спорных моментов, многие это подметили, а в остальном балдеж)

  • @VladykaVladykov
    @VladykaVladykov Жыл бұрын

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

  • @Nixguy

    @Nixguy

    Жыл бұрын

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

  • @Zanozus

    @Zanozus

    Жыл бұрын

    А еще из-за этого строка кода становится заметно длиннее и автоматическая проверка стиля будет разбивать ее на несколько строк.

  • @nerewan

    @nerewan

    Жыл бұрын

    плюс, запрашиваемые данные могли измениться за время между вызовами (зависит от контекста, конечно же)

  • @alexgorodecky1661

    @alexgorodecky1661

    5 ай бұрын

    А ещё это банальное дублирование логики

  • @Valentin_I
    @Valentin_I Жыл бұрын

    Круто! Вместо 1 свитча с 64 кейсами - 64 новых класса

  • @maxgrachev1

    @maxgrachev1

    Жыл бұрын

    Увидел 4 класса вместо 4 свитч кейсов. И это действительно удобнее, имхо. А в чем проблема с новыми классами? Если их выходит слишком много, то можно группировать по неймспейсам и/или подклассам. Или рефакторить дальше.

  • @Valentin_I

    @Valentin_I

    Жыл бұрын

    @@maxgrachev1 если количество категорий будет расти, то вырастет и количество классов. А если логика поменяется? То придется пройтись по всем файлам. Можно запутаться

  • @user-un5kp9qr8o

    @user-un5kp9qr8o

    Жыл бұрын

    @@Valentin_I Если растет количество категорий, можно воспользоваться паттерном Builder или Composite - сделать класс категории, который можно собирать из нескольких более простых. В схему со switch такое вообще не представляю как уложить.

  • @Valentin_I

    @Valentin_I

    Жыл бұрын

    @@user-un5kp9qr8o вот с этим согласен

  • @zvuk3316
    @zvuk3316 Жыл бұрын

    Классный видос, спасибо! Вот только про unit тесты не понял всё таки. Я столкнулся с проблемой, что когда рефакторишь код, то постоянно нужно и рефакторить тесты(

  • @mir8876
    @mir8876 Жыл бұрын

    Давай больше таких видосов

  • @user-cy1mz4om5w
    @user-cy1mz4om5w Жыл бұрын

    Не ну это за гранью конечно. Методы по 3-4 строки - еще ладно, на любителя, может кому-то и правда удобнее иметь 1000 методов вместо 20. Лично меня учили, что метод должен быть глубоким, то есть делать какое-то значимое и понятное изменение, решать какую-то структурную часть задачи. А не просто быть потому что нам код слишком длинным показался. Но вызов одного и того же метода несколько раз, просто чтобы не создавать переменную - это край уже. А если метод изменится и станет жрать больше ресурсов, тогда что? Будете все его вызовы искать? А когда у вас такие методы вообще везде и имя им легион - так что конкретно одного тормозящего нет, а все коматозят приложение примерно поровну - тогда что? Опять полный рефакторинг? Нельзя так откровенно забивать на оптимизацию. Преувеличивать её роль конечно тоже не стоит, но тут прямо полное пренебрежение же. Что вообще значит "только когда она (оптимизация) требуется"? Кому требуется? Типа пока заказчик претензии не выставит, то и оптимизировать не будем что ли?

  • @alexgorodecky1661

    @alexgorodecky1661

    5 ай бұрын

    А ещё в этом методе могут быть эффекты и файлы начнут записываться 2 раза 😅 Абсолютно безумные метрики у автора канала и, соответственно, абсолютно безумный код на выходе

  • @maximlyakhov967
    @maximlyakhov967 Жыл бұрын

    видео топ, но семантика имени класса ChildrensPrice заставляет задуматься о контексте))

  • @Eltar007
    @Eltar007 Жыл бұрын

    Интересно... Но как же асилить весь ролик-то? ))) Надо будет посмотреть с утра, пожалуй ))

  • @andd3dfx
    @andd3dfx6 ай бұрын

    Благодарю, неплохое видео

  • @user-br8ik1cq8n
    @user-br8ik1cq8n Жыл бұрын

    А что делать если методов настолько много, что не хватает фантазии придумывать названия для них?

  • @Paradise_Box
    @Paradise_Box Жыл бұрын

    Теперь я понял к чему приводит рефакторинг! К увольнению! :)

  • @arakovskiy

    @arakovskiy

    Жыл бұрын

    😆

  • @romanbush5164
    @romanbush5164 Жыл бұрын

    Нахриначил магических цифр найс, сними видос по правильным тестам

  • @gibbdev
    @gibbdev Жыл бұрын

    Хорошее видео :D После того как понимаешь как рефакторить почти все oop языки становятся гораздо менее страшными и очень понятными. Только вот может в случае джавы стоило вместо классов для новых типов фильмов завести enum?

  • @warpArtifact
    @warpArtifact10 ай бұрын

    А если я пришёл на проект и там классы по 20к строк, нету тестов, и есть такой IService который реализует более 200 интерфейсов ?

  • @eduardboiko7219
    @eduardboiko7219 Жыл бұрын

    Отлично

  • @muggzzzzz
    @muggzzzzz Жыл бұрын

    Взяли джуном на 20-летнее легаси. В программе около 450 классов, самый маленький строк в 5-10, самый большой в овер6000. Жуткие макароны. Рефакторить такое практически невозможно, как и добавить новый функционал.

  • @MrNikitaftw
    @MrNikitaftw18 күн бұрын

    Работаю джуном в проекте с легаси кодом, имеем классы размером 11 тысяч строк)

  • @FL4M3M4K3R
    @FL4M3M4K3R6 ай бұрын

    хорошее видео спасибо

  • @bossmusa9075
    @bossmusa9075 Жыл бұрын

    от души

  • @Igor-wh3cp
    @Igor-wh3cp Жыл бұрын

    Хорошее видео. Автору спасибо! Где можно посмотреть исходный код и репозиторий с коммитами?

  • @Igor-wh3cp

    @Igor-wh3cp

    Жыл бұрын

    @@arakovskiy Спасибо за оперативный ответ!

  • @justborney
    @justborney Жыл бұрын

    Автор, у тебя не было статьи на хабре?

  • @olegbogomolov3227
    @olegbogomolov3227 Жыл бұрын

    Огромное спасибо! Отличная подача и наглядные примеры!

  • @suifutors
    @suifutors Жыл бұрын

    Все так просто, раз, два и готов чудо код. Да и тесты простые на функциональность. А потом в реальной ситуации, невозможно написать тест, так как очень сильная зависимость от системы и контекста. Я в пример привожу обращение к черному ящику, на который сложно написать мок (железка кастомная использующая системные интерфейсы или специфические шины) или Андроид, практически покрыть удаётся только меньше половины кода. Помимо помойной поддержки самой системы и Гугла, сложность остаться в том что тесты инструментальные, так и ещё зависят от производителя и версии системы и прочих наворотов пользователей, которые могу кастомизировать очень сильно систему. Самый тупой пример, это разветвление кода в зависимости от версии системы и недай бог производителя, да Самсунг с Сяоми. В общем хорошие виде, правда выставление картинок смотрится, как-то тупо что ли, может из-за того что у них разный фон и они шакального качества или не в одном стиле.

  • @ivanmatew568
    @ivanmatew568 Жыл бұрын

    Отличное видео. Подписка. 1. Я сам пока не могу себя заставить не кешировать в переменную результат функции, но борюсь с этим. 2. Говорят, что Кент Бек уже отрицает полезность TDD. Я не проверял, но мысль любопытная.

  • @arakovskiy

    @arakovskiy

    Жыл бұрын

    Последнее, что я встречал - это как тдд защищает :) kzread.info/dash/bejne/rG2l19qTo6_JltI.html

  • @ne4to777

    @ne4to777

    Жыл бұрын

    а надо кэшировать. Я хз, от куда эта идея экономить на спичках.

  • @ivanmatew568

    @ivanmatew568

    Жыл бұрын

    @@arakovskiy , ролику 8 лет же.

  • @georgepro8481
    @georgepro84814 ай бұрын

    Я в репе увидел ещё попытку подрефакторить через ООП. Я думаю. что лучше через функциональные интерфейсы, типа private static Map map = new HashMap(); static { map.put(REGULAR, a -> (a (a (a

  • @_LEXX_
    @_LEXX_ Жыл бұрын

    Концовка намекает что удача вам пригодится )))

  • @user-cz6mp5vr6z
    @user-cz6mp5vr6z Жыл бұрын

    эх, всегда бы было все так просто

  • @vlera4198
    @vlera41983 ай бұрын

    а вы знаете что у джавы есть лимит на размер класса. Врлде 64000 строк. Я не знал, но слышал от коллеги что на его прошлой работе уперлись в этот лимит))) и тимлид этого проекта выдал гениально решение - разделить класс пополам и продолжать писать в оба класса.

  • @user-fj8tw3pj3g
    @user-fj8tw3pj3g Жыл бұрын

    3-4 строки на метод, я представляю сколько теперь будет методов в моих проектах)...

  • @user-cy1mz4om5w

    @user-cy1mz4om5w

    Жыл бұрын

    В этом-то и проблема. У нас подобная практика наоборот порицается. Типа методы должны быть глубокими и всё такое. Делать вещи, а не заменять собой простенький цикл.

  • @user-fj8tw3pj3g

    @user-fj8tw3pj3g

    Жыл бұрын

    @@user-cy1mz4om5w но и когда в методе много чего и он просто огромный тоже не сойдёт для тестирования или маштабирования крайне сложно будет. Лучше во всем соблюдать умеренность.

  • @user-cy1mz4om5w

    @user-cy1mz4om5w

    Жыл бұрын

    @@user-fj8tw3pj3g Так в методе и не должно быть много чего. В нем должно быть решение одного аспекта задачи. Только одного. Но по возможности полностью - чтобы прочитав код этого метода, ты понял, как именно этот аспект решается. Без беготни по стеку вызовов.

  • @user-fj8tw3pj3g

    @user-fj8tw3pj3g

    Жыл бұрын

    @@user-cy1mz4om5w Да так и есть

  • @eternal_wanderer_ru

    @eternal_wanderer_ru

    Жыл бұрын

    Уж лучше один метод на 50 строк который делает что-то конкретное, чем 17 функций по 2-3 строки

  • @octaviarius
    @octaviarius Жыл бұрын

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

  • @MrShnaiderTV

    @MrShnaiderTV

    7 ай бұрын

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

  • @PaulSith
    @PaulSith Жыл бұрын

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

  • @bubblesort6368

    @bubblesort6368

    Жыл бұрын

    Жиза... Часто приходиться работать с кодом где точка невозврата пройдена и рефакторить уже поздно) тестов мало, а иногда есть но уже сходу красные, а порой совсем нет. И в коде столько костылей что страшно любую строчку тронуть, потому как она нужна для неведомой фичи)))

  • @TheDavBag
    @TheDavBag Жыл бұрын

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

  • @ltukutfl
    @ltukutfl Жыл бұрын

    Красивый шрифт у IDEA

  • @eternal_wanderer_ru

    @eternal_wanderer_ru

    Жыл бұрын

    Jetbrains Mono. Можно юзать хоть где

  • @Wansery
    @Wansery5 ай бұрын

    1:14 мне интересно, а что они такое писали, что у них ушло так много строк кода? Я блин аналог тележки уложил в 5к строк, это с учётом визуала javaFx, который занял минимум 30% строк. А тут что...

  • @user-gh2ml3cf5o
    @user-gh2ml3cf5o24 күн бұрын

    Еще раз гляну когда протрезвекю

  • @bog_d
    @bog_d Жыл бұрын

    МОЯ ЖИЗНЬ РАЗДЕЛИЛАСЬ НА ДО И ПОСЛЕ ПОЧЕМУ Я НЕ ДЕЛАЛ ЭТОГО РАНЬШЕ ЧТОБЫ ПОЗНАТЬ РЕФАКТОРИНГ ПОЛНОСТЬЮ, НУЖНО ВСЕГО РАЗ В ДЕНЬ... Читать дальше

  • @user-jd6ff3mr2m
    @user-jd6ff3mr2m Жыл бұрын

    А почему у великих программистов считается, что работать с тысячей мелких классов на 2-3 строчки проще, чем с одним большим? Превратил простую и понятную программку на 10 строк в дремучие дебри, в которых сам через неделю ничего не поймёшь )))

  • @SkyAntins

    @SkyAntins

    9 күн бұрын

    Потому что Роберт Мартин так сказал, это самое главное для них. А то, что работать с этим неудобно - это уже мелочи и издержки

  • @Lucio11a
    @Lucio11a Жыл бұрын

    "Метод, который содержит 10 и более строк - явно перегружен!" Вспомнил ща методы свои, в которых я, иногда, использую switch, т.к. он бывает удобнее и нагляднее, и так получается явно больше 10 строк :D

  • @user-jk8qv5wy5x

    @user-jk8qv5wy5x

    Жыл бұрын

    Если у тебя вменяемое и точно фиксированное количество case'ов, и в одном месте, то можно и switch.

  • @arakovskiy

    @arakovskiy

    Жыл бұрын

    @@user-jk8qv5wy5x +

  • @spirridd
    @spirridd Жыл бұрын

    Одна вещь осталась неясной - зачем нужно слово get при именовании методов?

  • @arakovskiy

    @arakovskiy

    Жыл бұрын

    Совершенно необязательна :) Это просто одна из конвенций, предложенная Робертом Мартином, называть методы глаголами, а переменные существительными. Но, в целом, сейчас, спустя год, считаю её избыточной.

  • @magdel1940

    @magdel1940

    Жыл бұрын

    Так называют методы которые возвращают значения полей как есть. Без get называют методы которые что-то делают и возвращают.

  • @krauter_roman
    @krauter_roman Жыл бұрын

    ыы, а такое бывает?)

  • @GoosesGoose
    @GoosesGoose6 ай бұрын

    видел разок .c файл на 88к строк кода :)

  • @georgepro8481
    @georgepro84814 ай бұрын

    Пулемётная скорость. Я лично не успеваю осмыслить. Пришлось смотреть не сколько раз. А так-то в общем неплохо.

  • @pavel2392
    @pavel2392 Жыл бұрын

    Что за ОС стоит?

  • @arakovskiy

    @arakovskiy

    Жыл бұрын

    убунта)

  • @VinodKumar-mz3fs
    @VinodKumar-mz3fs Жыл бұрын

    Could you please provide sub titles in English for non Russian audience

  • @hpw-dev
    @hpw-dev Жыл бұрын

    пофиксите название, замените на КОД КАК У СЕНЬОРА. РЕФАКТОРИНГ КОДА НА JAVA

  • @Wansery
    @Wansery5 ай бұрын

    4:10 сомнительное утверждение... Очень сомнительное

  • @stepan-klyukin
    @stepan-klyukin Жыл бұрын

    3:13 это реальнй проект?

  • @user-rh5jf4vh8b
    @user-rh5jf4vh8bАй бұрын

    Надо было на 1С писать!

  • @user-tb3mm6dl3z
    @user-tb3mm6dl3z3 ай бұрын

    Я канеш не шарю в джавах но видос крутой

  • @GrafMKristo
    @GrafMKristo6 ай бұрын

    Слова проглатываешь. Не торопись.

  • @user-io9sb2yt3z
    @user-io9sb2yt3z Жыл бұрын

    1:00 Тот, кто это говорил - тот не видел код ЯндереДева в Яндере симуляторе.

  • @user-dn8yk9wq7c
    @user-dn8yk9wq7c4 ай бұрын

    Всё можешь идти книгу писать

  • @danielshabarov5661
    @danielshabarov5661 Жыл бұрын

    22:22

  • @leader_antagonist
    @leader_antagonist Жыл бұрын

    Копия статей хабра?

  • @articice7342
    @articice7342 Жыл бұрын

    5 за подачу материала. 1 за отсутствие видео где объясняется когда и почему вышеописанные правила не надо использовать.

  • @alexgorodecky1661

    @alexgorodecky1661

    5 ай бұрын

    Никогда эти правила не нужно использовать 😂

  • @step6753
    @step6753 Жыл бұрын

    Мои методы на 150 строк: а, да?

  • @java_couch
    @java_couch Жыл бұрын

    Ключевое слово - никто не платит за рефакторинг...Менеджерам ты никогда не объяснишь - что вот тут мы пару месяцев потратим и будет лучше работать и проще расширять и по сути менеджеры будут правы - так как тот человек, что рефакторил и делал под себя , завтра уволится и его код какой бы крутой он не был все равно придется читать и понимать и дописывать , а дописывать будут люди, которые не умеют рефакторить) и весь этот рефактор через год превратиться в тоже самое что было. Реф хороош для пет проектов или чего то своего личного, рефить энтерпрайз , на котором до тебя были пара сотен человек и после тебя будет тысяча - пустая трата времени и средств

  • @tony8366
    @tony8366 Жыл бұрын

    Спасибо за видео Вообще рекомендуется ещё не использовать приватные методы в классе

  • @user-tp1qn2wt6t

    @user-tp1qn2wt6t

    Жыл бұрын

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

  • @igorgromyko8975
    @igorgromyko8975 Жыл бұрын

    хммм набор мыслей джуна не понимающего чего делает

  • @ivanmatew568

    @ivanmatew568

    Жыл бұрын

    Обоснование есть?

  • @bubblesort6368

    @bubblesort6368

    Жыл бұрын

    @@ivanmatew568 ну во первых даже первоначальный код был весьма сносным. А во вторых 4 строчки может быть пипец как мало для метода) даже 12 очень немного. В реальных проектах у вас может быть сущность с 50 полями по домену. И как ее инициализацию уместить в 4 строки?) Можете сказать, что сущность нужно разбить на несколько классов, так она она тогда может потерять инварианты...

  • @XpIOHdeJIb3000
    @XpIOHdeJIb3000 Жыл бұрын

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

  • @TinTaBraSS777
    @TinTaBraSS777 Жыл бұрын

    ты не синьер помидор ты синьер мухомор )

  • @AlexGreenoff
    @AlexGreenoff Жыл бұрын

    Видео скорее вредное, чем полезное. Автор определяет методы подлежащие укорачиванию по их длине, что в корне неверно. Укорачивать метод или нет, нужно решать по его логической структуре. В идеале метод должен делать что-то одно и если это не так, то только тогда разносить логику на несколько методов. Насмотревшись таких роликов джуны и некоторые миддлы будут плодить код, состоящий из сотен коротких методов и функций, порождая лишние сущности и по сути нарушая принцип KISS. А уж момент со встраиванием переменной и вовсе заставил меня выключить видео. Чтобы сэкономить 1 строку кода (кому вообще это мешает????), автор видео потенциально увеличил потребление ресурсов. Неопытные разработчики, опять же, увидев такое и приняв на вооружение начнут подобное клепать во всех проектах к месту и не к месту. А ведь за этим методом, который мы встраиваем, может скрываться потенциально какой-нибудь тяжелый кусок кода, который проводит сложные вычисления, лезет в БД, лезет в сторонние API. Поэтому попытка хорошая, но видео скорее вредное, чем полезное. И уровень рефакторинга, на мой взгляд, не соответствует названию. Дальше не смотрел, тк стало просто жалко времени.

  • @AlexGreenoff

    @AlexGreenoff

    Жыл бұрын

    @@kanequbolt10 Почему один раз, если два? Даже сам автор видео на этом делает акцент. Посмотрите сами на 6:53

  • @darkjune0122
    @darkjune0122 Жыл бұрын

    Да хватит болт ложить на оптимизацию! 1. На вас смотрят Джуны! Вы же потом будете страдать от того, что придется нанимать дорогого специалиста на рефакторинг кода новичка. 2. На рынке и так полно неоптимизированной продукции! Харе её плодить такими тезисами! Оптимизация не важна только если это ваш собственный проект, если вы делаете публичный продукт - если не оптимизировать намеренно, то хоть не замедляйте его! Иначе будет значительно меньше охват аудитории у продукта.

  • @user-eq9uh2rv4l
    @user-eq9uh2rv4l Жыл бұрын

    лайк + підписка + комент

  • @Kadabra1981
    @Kadabra1981 Жыл бұрын

    Автор просто клал на производительность от слова совсем - дублирует циклы, увеличивает количество вызовов, меняет циклы на стримы. Накладные расходы на всю эту "красоту" автора не волнуют. "Замеры не производились" - ультимативный аргумент. Вот после таких сеньоров люди потом недоумевает почему Ворд на i7 работает как на pentium3.

  • @evgeniichuprov

    @evgeniichuprov

    Жыл бұрын

    Хорошо иметь встроенный профайлер в голове, да?

  • @Kadabra1981

    @Kadabra1981

    Жыл бұрын

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

  • @evgeniichuprov

    @evgeniichuprov

    Жыл бұрын

    @@Kadabra1981 не эксперт по jvm, но доводилось оптимизировать код на С++ для embedded system. Я тоже не сторонник разбивать циклы в общем случае, но видел на что иногда способны компиляторы с точки зрения оптимизации, поэтому каждый случай может быть индивидуален. И что точно меня коробит, так это предварительная оптимизация (хз как правильно перевести premature optimization). Тут разница может быть незаметные доли секунды, тогда как рядом есть неоптимальный запрос к базе данных или к файловой системе, которые будут нивелировать всю выгоду от такого объединённого цикла. В общем, я к тому, что контекст важен.

  • @user-ul5ic2rw5h

    @user-ul5ic2rw5h

    Жыл бұрын

    Рабочий процесс гуру (Кента Бека): 1. Напиши рабочее говно; 2. Сделай из говна конфетку (отрефакторь); 3. Оптимизируй, только если очень очень надо. Если ты видишь неоптимизированные куски кода, то либо автору так не критично, либо он ещё не дошёл до стадии 3. Другой известный всем ненубам гуру (Дональд Кнут) говорит: преждевременная оптимизация - корень всех зол.

  • @ProGuitarUA

    @ProGuitarUA

    Жыл бұрын

    Оптимизаторы херовы. В 95% случаев десятки задублировпных циклов отработают за секунды в то время что по итогу тормозить будет какой-то гейтвей, запрос к базе или к другому сервису по rest и т.д

  • @heheheyhey5234
    @heheheyhey52344 күн бұрын

    Глупость. Если в сложной бизнес логике сокращать длину кода до 5 строк, в итоге это будет ПРОСТО НЕВОЗМОЖНО поддерживать и читать следующим людям. Если писать большие программы в стиле "Cean Code" вы получите еле работающее чудовище.

  • @user-jd6ff3mr2m
    @user-jd6ff3mr2m Жыл бұрын

    Молодец какой. Сам придумал учебный говнокод, сам переписал )))

  • @Anton-kh9bj
    @Anton-kh9bj Жыл бұрын

    Хочешь просрать время - напиши тесты к коду

  • @onetwothree123-
    @onetwothree123-Ай бұрын

    Первый этап это отловить дятла который написал код который надо рефакторить, код изначально должен быть покрыт тестами и просмотрен более опытными разработчиками. А так по своей практике скажу, что рефакторить надо постепенно от релиза к релизу и очень > очень аккуратно, когда на 100% понимаешь, что делает тот или иной метод, а кто говорит, что если работает, не трогай, тому видимо не доводилось вносить изменения в гигантские легаси методы или классы

  • @george-harder
    @george-harder Жыл бұрын

    kzread.info/dash/bejne/l56M2rmxpJbef84.html Главное, не дорефакториться до примерно такого: result += first.getSomething(second.GetAnother() * third.GetWhatever(42)) / (100 + vat.GetVat(false)) * vat.GetVat(true); Ненуачо. Сколько локальных переменных сэкономили! Во всём нужна мера. И это чувство меры воспитывается (не у всех, правда) десятками лет впахивания в разработке.

  • @user-mc8tn9qn3d
    @user-mc8tn9qn3d Жыл бұрын

    2022год в джаве до сих пор клоунские геттеры и сеттеры

  • @Tezla0

    @Tezla0

    Жыл бұрын

    А какие надо?

  • @alexgorodecky1661

    @alexgorodecky1661

    5 ай бұрын

    Жиза

Келесі