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

  Переглядів 4,389

Light Code

Light Code

День тому

Привет ✌️, в этом видео я расскажу вам о 4 рефакторингах на C#. Данные приемы помогут сделать ваш код более чистым, понятным и эффективным, не меняя при этом его функциональность.
ПОДДЕРЖАТЬ развитие канала:
👨🏻‍💻 boosty.to/lightcode
ССЫЛКА НА TELEGRAM канал:
📢t.me/lightcode_group
#lightcode #lightcodegroup #csharp #dotnet #refactoring #backend #разработка #junior #программирование #coding #middle #senior
-----------------------------------------------------------
00:00 | Вступление
00:13 | Первый рефакторинг
01:03 | Второй рефакторинг
02:06 | Третий рефакторинг
04:26 | Четвертый рефакторинг
05:53 | Заключение

КОМЕНТАРІ: 34
@lightcode-group
@lightcode-group 2 місяці тому
📢 ССЫЛКА НА TELEGRAM канал: t.me/lightcode_group ⚡ ПОДДЕРЖКА канала на boosty: boosty.to/lightcode
@diam0nddangel336
@diam0nddangel336 2 місяці тому
С одной стороны может показаться, что автор говорит очевидное, но чем больше вы слышите одно и то же, тем больше шансов, что вы начнёте делать правильно
@DarkViper813
@DarkViper813 2 місяці тому
Тебе нужно делать цикл видео программирование на мемах !!!)!)!))!))!)🤧
@theone1685
@theone1685 2 місяці тому
Категорически крутой контент! Все понятно и доступно 🔥
@witheringlaziness
@witheringlaziness 13 днів тому
Спасибо за видео! Советы и правда хороши, причём нередко они необходимы и для программистов со стажем, которые были в прошлом самоучками.
@lightcode-group
@lightcode-group 13 днів тому
Согласен, ибо опыт работы не гарантирует наличие пробелов в знаниях)
@user-sg7vd5qg4u
@user-sg7vd5qg4u 2 місяці тому
Спасибо
@Yuliya_0106
@Yuliya_0106 2 місяці тому
Даже я все поняла 😁👍🏻
@zapominai
@zapominai Місяць тому
Крутой продакшн. Респект!
@crowleymass77
@crowleymass77 День тому
В последнем примере, где вы стали заранее готовить результаты всех сравнений, ваша оптимизация просто опасна. А вдруг, например, свойство user.IsLocked вычисляется относительно долго? До оптимизации оно вычислялось последним, после кучи других проверок, и не каждый раз. Вы "отрефакторили" код так, что теперь все значения для условия вычисляются обязательно и всегда, в том числе и наше потенциально тяжёлое свойство.
@nikolayn4022
@nikolayn4022 2 місяці тому
Классно, давай еще) Как вариант слева можно оставлять как было, а справа как стало.
@lightcode-group
@lightcode-group 2 місяці тому
Учту в следующих подобных видео
@AlexeyRiched
@AlexeyRiched Місяць тому
насколько на технике эпл удобно кодить на Си шарпе?
@user-zw2cj3cb8d
@user-zw2cj3cb8d 2 місяці тому
Последний пример я бы написал немного по другому. Каждый if вынес бы отдельно с прерывание дальнейшего выполнения. Зачем нам дальше выполнять код, если нет оредера или юзера? if (order == null || user == null) return false; И так далее, код будет так же читаем и без вложеностей.
@lightcode-group
@lightcode-group 2 місяці тому
Да, можно и так. Но визуально будет иначе. В твоем случае вложенность визуально сохранится, но будет всегда 1 уровень вложенности. Я показал прием, как вообще избавиться от условных конструкций. Чаще на практике я как раз делаю так, как ты предлагаешь. Т.е всегда проверяем плохие случаи и делаем прерывания.
@portosov
@portosov 2 місяці тому
На счет первого, как по мне, это вопрос спорный (где-то схватился за сердечко дядюшка Боб). Над ним я постоянно размышляю. И прихожу к выводу, что порой проще читать код в потоке, нежели заниматься извлечением метода ради самого извлечения метода. Не спорю, извлекать методы нужно и важно, когда это действительно улучшает чистоту, но иногда прям фанатичное извлечение превращается в какое-то горожение огорода. Тут все-таки нужно чувство баланса.
@lightcode-group
@lightcode-group 2 місяці тому
Полностью согласен с тобой. Тут речь безусловно о больших логических кусках, конечно выносить в метод 1-2 строчки не всегда хорошая идея, но бывают и исключения. Например, если у нас длинное и сложное условие, которое по бизнесу часто меняется, то его я бы выносил в метод, чтобы проще было изменять его в случае чего (мое субъективное мнение). А так конечно же все рефакторингы это отчасти и вкусовщина. Писать нужно так, как удобно тебе и членам твоей команды, но и стараться следовать + - общепринятым стандартам, чтобы если вы ушли, то другие разрабы могли это быстро подхватить.
@user-ql6qr4uu4q
@user-ql6qr4uu4q 4 дні тому
тут возникает дилема скорости и удобства
@slepming
@slepming 2 місяці тому
Спасибо, хоть и являюсь новичком, но понял все, о чем вы говорили в данном видеоролике. Но почему не использовать partial в 3 рефакторинге, можно же создать 2 одинаковых метода с разными аргументами, раз у нас номер карты и email, то можно uint cardNumber сделать и аналогично с e-mail, но уже в string? Я немного слабоват еще в таком
@lightcode-group
@lightcode-group 2 місяці тому
Если делать частичными классами, то придется названия методов каждый раз разные делать. Тогда не будет плюсов полиморфизма. По сути это не будет отличаться от первоначального примера, когда все в одном классе. Ты просто раскидаешь кусочки по разным файлам. Чтобы более точно понять, тут тебе нужно почитать про плюсы использования абстракций и слабой связанности за счет нее.
@slepming
@slepming 2 місяці тому
Спасибо за ответ, сейчас прочитаю как раз
@user-hd7fw4zn7l
@user-hd7fw4zn7l 2 місяці тому
какой симпатяжка🥹🥹🥹🥹😘🥹🥹
@Wings_Vlog
@Wings_Vlog 2 місяці тому
Жизненно 1:15
@bulatruslanovich422
@bulatruslanovich422 2 місяці тому
Если интересно, можно почитать книгу, Чистый код Роберта Мартина
@lightcode-group
@lightcode-group 2 місяці тому
Многим впадлу читать эти книги (особенно джунам). Т.к зачастую первое впечатление, что it материал подается довольно душно. Такие видео и созданы для тех, кто не особо читает книги.
@ilyamedvedev8943
@ilyamedvedev8943 2 місяці тому
Я бы по другому сделал мне не нравится код рефакторинга в начале мы 3 раза извлекаем продукт хотя можно это сделать 1 раз и передавать уже продукт аргументом в методы а не ID продукта. С интерфейсами вообще все просто можно сказать что интерфейсы обеспечивают стандартизацию, позволяя классам имплементировать общие методы и свойства. Это средство унификации, обеспечивая согласованный способ взаимодействия различных классов. Из этого следует вопрос а зачем нам все это надо на что можно просто ответить что это нужно для упрощения добавления новых функциональностей, обеспечивая единообразный способ взаимодействия между классами и улучшая читаемость и понимание кода. То определение что интерфейс служит контрактом бла бла бла мне в корне не нравится…
@Tony_Sol
@Tony_Sol 12 днів тому
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 12 днів тому
Согласен по поводу инвертирований, сам так постоянно пишу, думаю стоило упомянуть в видео
@dmytrobillberry3538
@dmytrobillberry3538 2 місяці тому
автору самому бЫ подучиться перед тем, как учить других. В четвертом примере название метода CanProcessOrder неудачно, поскольку описЫвает невнятное состояние вместо действия. Лучше бЫло бЫ назвать CheckOrderProcessAbility или CheckOrderProcess. Так же в коде есть антипаттерн magic numbers - єто 0 и 10. Их нужно вЫнести в константЫ.
@lightcode-group
@lightcode-group 2 місяці тому
В каждом из примеров рефакторился не весь код, а конкретные примеры. В четвертом примере специально не менялось название метода (осталось исходным), ибо об этом речь шла во втором примере. Также и в случае с константами. Если рефакторить все подряд, тогда не наглядно будут видны изменения в коде на конкретном примере рефакторинга. Также стоит отметить, что это не мой код. Я лишь взял данный код для наглядности конкретных приемов рефакторинга, которые я произвел над ним. Но тут не было речи о полном рефакторинге кода каждого из примеров. Но все равно спасибо за замечания
@Polite_person_
@Polite_person_ 2 місяці тому
Душнила😊
@rndofpipowe
@rndofpipowe 2 місяці тому
Ничо не понял. Приведённые примеры - это не рефакторинг, это исправление изначально кривущей архитектуры приложения и незнания элементарных вещей про клинкод. Нут не рефачить надо, а гнать взашей таких тупых скиллбокскодеров.
@dizznet
@dizznet 7 днів тому
Чат подсказал тоже неплохое сокращение кода, хотя хз, норм это или нет ) 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 6 днів тому
Не всегда нужно делать сокращение ради сокращения) Читаемость также должна оставаться высокой. Сейчас нужно прям вчитываться в каждый фрагмент условия, поэтому лично я бы так не писал)
КОД КАК У СЕНЬОРА. РЕФАКТОРИНГ
22:59
ITentika Online
Переглядів 62 тис.
Первый Алгоритм Для Изучения в 2024
8:13
Саша Лукин
Переглядів 48 тис.
ZED убийца VS Code? Новый редактор кода!
16:02
Вопросы собеседования на C# программиста
21:04
Програмысли Влог
Переглядів 60 тис.
Микросервисы - Простым Языком на Понятном Примере
19:08
Samsung UE40D5520RU перезагружается, замена nand памяти
0:46
Слава 100пудово!
Переглядів 3,1 млн
Result of the portable iPhone electrical machine #hacks
1:01
KevKevKiwi
Переглядів 8 млн
САМЫЙ дешевый ПК с OZON на RTX 4070
16:16
Мой Компьютер
Переглядів 95 тис.