РЕФАКТОРИНГ НА C# | ПИШИ СВОЙ КОД ПРАВИЛЬНО!

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

КОМЕНТАРІ • 37

  • @lightcode-group
    @lightcode-group  6 місяців тому +2

    📢 ССЫЛКА НА TELEGRAM канал: t.me/lightcode_group
    ⚡ ПОДДЕРЖКА канала на boosty: boosty.to/lightcode

  • @diam0nddangel336
    @diam0nddangel336 6 місяців тому +11

    С одной стороны может показаться, что автор говорит очевидное, но чем больше вы слышите одно и то же, тем больше шансов, что вы начнёте делать правильно

  • @DarkViper813
    @DarkViper813 6 місяців тому +5

    Тебе нужно делать цикл видео программирование на мемах !!!)!)!))!))!)🤧

  • @witheringlaziness
    @witheringlaziness 4 місяці тому +1

    Спасибо за видео!
    Советы и правда хороши, причём нередко они необходимы и для программистов со стажем, которые были в прошлом самоучками.

    • @lightcode-group
      @lightcode-group  4 місяці тому +1

      Согласен, ибо опыт работы не гарантирует наличие пробелов в знаниях)

  • @theone1685
    @theone1685 6 місяців тому +1

    Категорически крутой контент! Все понятно и доступно 🔥

  • @crowleymass77
    @crowleymass77 4 місяці тому +1

    В последнем примере, где вы стали заранее готовить результаты всех сравнений, ваша оптимизация просто опасна. А вдруг, например, свойство user.IsLocked вычисляется относительно долго? До оптимизации оно вычислялось последним, после кучи других проверок, и не каждый раз. Вы "отрефакторили" код так, что теперь все значения для условия вычисляются обязательно и всегда, в том числе и наше потенциально тяжёлое свойство.

  • @portosov
    @portosov 6 місяців тому +2

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

    • @lightcode-group
      @lightcode-group  6 місяців тому +1

      Полностью согласен с тобой. Тут речь безусловно о больших логических кусках, конечно выносить в метод 1-2 строчки не всегда хорошая идея, но бывают и исключения. Например, если у нас длинное и сложное условие, которое по бизнесу часто меняется, то его я бы выносил в метод, чтобы проще было изменять его в случае чего (мое субъективное мнение). А так конечно же все рефакторингы это отчасти и вкусовщина. Писать нужно так, как удобно тебе и членам твоей команды, но и стараться следовать + - общепринятым стандартам, чтобы если вы ушли, то другие разрабы могли это быстро подхватить.

  • @nikolayn4022
    @nikolayn4022 6 місяців тому +1

    Классно, давай еще) Как вариант слева можно оставлять как было, а справа как стало.

    • @lightcode-group
      @lightcode-group  6 місяців тому +2

      Учту в следующих подобных видео

  • @carl-qy5go
    @carl-qy5go 3 місяці тому

    Отличный видос, спасибо

  • @igrovoi_kom
    @igrovoi_kom Місяць тому

    Пример с интерфейсами тот еще мусор. Автор просто взял весь сценарий с нейронки и записал ролик. Браво

  • @ЛевКулешов-н4э
    @ЛевКулешов-н4э 6 місяців тому +2

    Спасибо

  • @НиколайГарагуля-л9б
    @НиколайГарагуля-л9б 6 місяців тому +2

    Последний пример я бы написал немного по другому. Каждый if вынес бы отдельно с прерывание дальнейшего выполнения. Зачем нам дальше выполнять код, если нет оредера или юзера? if (order == null || user == null) return false; И так далее, код будет так же читаем и без вложеностей.

    • @lightcode-group
      @lightcode-group  6 місяців тому

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

  • @zapominai
    @zapominai 6 місяців тому

    Крутой продакшн. Респект!

  • @Cryptomoons
    @Cryptomoons 4 місяці тому

    Бро, скинь ссылку пожалуйста на годный курс на программирование , что бы вот сесть и вместе с курсом чт то делать а не просто слушать .

  • @Yuliya_0106
    @Yuliya_0106 6 місяців тому

    Даже я все поняла 😁👍🏻

  • @slepming
    @slepming 6 місяців тому +2

    Спасибо, хоть и являюсь новичком, но понял все, о чем вы говорили в данном видеоролике. Но почему не использовать partial в 3 рефакторинге, можно же создать 2 одинаковых метода с разными аргументами, раз у нас номер карты и email, то можно uint cardNumber сделать и аналогично с e-mail, но уже в string? Я немного слабоват еще в таком

    • @lightcode-group
      @lightcode-group  6 місяців тому +2

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

    • @slepming
      @slepming 6 місяців тому

      Спасибо за ответ, сейчас прочитаю как раз

  • @user-hd7fw4zn7l
    @user-hd7fw4zn7l 6 місяців тому +1

    какой симпатяжка🥹🥹🥹🥹😘🥹🥹

  • @ИльмирЯмалетдинов-ж3у

    тут возникает дилема скорости и удобства

  • @Wings_Vlog
    @Wings_Vlog 6 місяців тому

    Жизненно 1:15

  • @bulatruslanovich422
    @bulatruslanovich422 6 місяців тому

    Если интересно, можно почитать книгу, Чистый код Роберта Мартина

    • @lightcode-group
      @lightcode-group  6 місяців тому

      Многим впадлу читать эти книги (особенно джунам). Т.к зачастую первое впечатление, что it материал подается довольно душно. Такие видео и созданы для тех, кто не особо читает книги.

  • @AlexeyRiched
    @AlexeyRiched 6 місяців тому

    насколько на технике эпл удобно кодить на Си шарпе?

  • @ilyamedvedev8943
    @ilyamedvedev8943 6 місяців тому

    Я бы по другому сделал мне не нравится код рефакторинга в начале мы 3 раза извлекаем продукт хотя можно это сделать 1 раз и передавать уже продукт аргументом в методы а не ID продукта. С интерфейсами вообще все просто можно сказать что интерфейсы обеспечивают стандартизацию, позволяя классам имплементировать общие методы и свойства. Это средство унификации, обеспечивая согласованный способ взаимодействия различных классов. Из этого следует вопрос а зачем нам все это надо на что можно просто ответить что это нужно для упрощения добавления новых функциональностей, обеспечивая единообразный способ взаимодействия между классами и улучшая читаемость и понимание кода. То определение что интерфейс служит контрактом бла бла бла мне в корне не нравится…

  • @Tony_Sol
    @Tony_Sol 4 місяці тому

    4й - не надо так плз, имхо более правильный рефакторинг в данном случае это инвертирование условия:
    т.е. вместо
    if (a) { if (b) { if (c) ...логика... }}} else { return false; }
    лучше
    if (!a) { return false; } if (!b) { return false; } if (!c) { return false; } ...логика...
    это легче читать чем вложенные в тернарники тернарники и полотно && || условий

    • @lightcode-group
      @lightcode-group  4 місяці тому

      Согласен по поводу инвертирований, сам так постоянно пишу, думаю стоило упомянуть в видео

  • @dmytrobillberry3538
    @dmytrobillberry3538 6 місяців тому

    автору самому бЫ подучиться перед тем, как учить других. В четвертом примере название метода CanProcessOrder неудачно, поскольку описЫвает невнятное состояние вместо действия. Лучше бЫло бЫ назвать CheckOrderProcessAbility или CheckOrderProcess. Так же в коде есть антипаттерн magic numbers - єто 0 и 10. Их нужно вЫнести в константЫ.

    • @lightcode-group
      @lightcode-group  6 місяців тому +4

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

    • @Polite_person_
      @Polite_person_ 6 місяців тому

      Душнила😊

  • @rndofpipowe
    @rndofpipowe 6 місяців тому

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

  • @dizznet
    @dizznet 4 місяці тому

    Чат подсказал тоже неплохое сокращение кода, хотя хз, норм это или нет )
    public class OrderProcessor
    {
    public bool CanProcessOrder(Order order, int stockCount, User user, bool isExpressShipping)
    {
    return order != null && user != null & order.Status == OrderStatus.Pending && stockCount > 0 && user.IsActive && !user.IsLocked && (!isExpressShipping || stockCount >= 10);
    }
    }

    • @lightcode-group
      @lightcode-group  4 місяці тому +1

      Не всегда нужно делать сокращение ради сокращения) Читаемость также должна оставаться высокой. Сейчас нужно прям вчитываться в каждый фрагмент условия, поэтому лично я бы так не писал)