@movtobase: Ты всё еще пишешь гигантские switch и endless цепочки if-else в своем C# коде? Пора с этим заканчивать, пока старший разработчик не пришел на код-ревью с тяжелым предметом! В этом видео я наглядно показал, почему старый добрый подход с проверкой типов через enum и кучу условий — это тикающая бомба замедленного действия. Представь реальную ситуацию из жизни бэкендера. Тебе прилетает задача сделать систему расчета скидок для интернет-магазина. Сначала всё просто: есть обычный покупатель, есть VIP. Ты быстренько набрасываешь enum и пару условий. Всё работает, фича в проде, ты доволен. Но наступает Черная Пятница! Маркетологи прибегают и просят срочно добавить еще скидку для подписчиков, скидку по промокоду и специальную акцию для тех, кто покупает ночью. Ты снова залезаешь в тот же самый класс, дописываешь еще пять ветвей if-else... И вот твой класс расчета стоимости превращается в нечитаемую простыню на 500 строк. В чем тут главная боль? Во-первых, ты жестко нарушаешь главный принцип SOLID — Open/Closed Principle (принцип открытости/закрытости). Твой класс должен быть открыт для расширения, но закрыт для изменения! Каждая новая скидка заставляет тебя менять уже рабочий и протестированный код. Во-вторых, тестировать такую лапшу — это ад. Чтобы проверить логику одной маленькой скидки, тебе приходится прогонять через тесты весь огромный монолитный класс. В-третьих, если над проектом работают несколько человек, вы постоянно будете ловить конфликты слияния в Git в одном и том же файле. Какое решение? Использовать классический паттерн проектирования Стратегия (Strategy)! Как это работает простыми словами? Вместо того чтобы держать все варианты расчетов в одном месте, мы выносим каждый алгоритм скидки в отдельный класс. А чтобы система знала, что все эти классы делают одно и то же, мы объявляем общий интерфейс (например, IDiscountStrategy). Теперь наш основной класс обработки заказов больше вообще ничего не знает о том, как именно считаются проценты! Ему абсолютно всё равно. Он просто принимает любой объект, который реализует наш интерфейс, и вызывает у него метод расчета. Что мы получаем в итоге? Идеальная архитектура: код стал чистым, понятным и элегантным. Полная независимость: нужна новая скидка? Просто создаешь новый файл с новым классом. Старый код ты вообще не трогаешь, а значит, физически не можешь там ничего сломать! Легкое unit-тестирование: каждый вариант логики тестируется изолированно в своем собственном файле. Идеальная дружба с Dependency Injection: ты можете легко подставлять нужную стратегию через встроенный DI-контейнер ASP.NET Core. Паттерн Стратегия — это базовый инструмент, который должен быть в арсенале каждого C# и .NET разработчика. Если ты готовишься к собеседованиям на позиции Junior или Middle, вопросы про этот паттерн и принципы SOLID прилетают почти всегда! Напиши в комментариях, часто ли тебе приходится встречать гигантские switch в рабочих проектах? И какой паттерн проектирования разобрать в следующем ролике? Не забудь поставить лайк, сохранить это видео в закладки, чтобы не потерять перед собесом, и подписаться на канал! Здесь много полезного про C#, .NET, архитектуру и разработку. #csharp #dotnet #программирование #it #разработка #паттерны #паттерныпроектирования #solid #backend #вебразработка #обучениепрограммированию #код #itблог #программист #csharpобучение

movToBaza
movToBaza
Open In TikTok:
Region: DE
Monday 10 August 2026 07:55:48 GMT
23036
1026
51
68

Music

Download

Comments

jopkashmelya
алек ༽ :
Тут всегда вопрос в том, а появится ли еще один тип скидки в будущем? Или мы просто так добавили 2 класса и интерфейс (+ еще где-то фабрика нужна, если просто туда переедет)? Может, пока что обойдемся этим ифом, да и хрен с ним? Кроме того, чтобы действительно сделать абстракцию хорошо заранее, надо быть предсказателем будущего. Мало ли как нам придется рассчитывать скидку для нового типа, может, одного только аргумента discount будет недостаточно — придется добавить еще какие-то параметры, и тогда всё равно придется переделывать всю абстракцию, которую мы заранее напридумывали. Если это простой продуктовый код (а не универсальная библиотека), то зачастую гораздо правильнее выделять абстракции по мере возникновения реальной потребности. Добавился новый тип скидки (или точно будет в будущем) — увидели, что с этим стало много возни — добавили абстракцию.
2026-08-10 18:03:38
42
white.bummer
White Bummer :
Все никак не могу понять смысл паттерна стратегии, все равно ведь где-то должен будет быть большой if else или switch который по типу скидки будет выбирать какую реализацию отдать в конструктор поясните кто-нибудь?
2026-08-13 23:36:24
2
poetry.for.the.so7
Poetry For The Soul :
спасибо большое!
2026-08-19 11:57:34
1
valentyn_mudryk
Valentyn Mudryk :
Ну значения скидок, акций и ТД не должны жить в коде. Они должны быть в бд. В зависимости от процесса обработки скидок тебе может понадобится одна кверя на сумму скидку. Понимаю что пример чисто в образовательных целях. Но тогда лучше уж использовать более подходящий пример. Middleware, парсер протоколов какой-то. В целом ситуации где это более применимо и имеет реальное использование в настоящих проектах
2026-08-13 23:26:05
2
prosekov1337
Prosekov :
чем гуще лес тем else if else
2026-08-10 22:33:25
6
lburkeesley
lburke :
да это круто. но стандарт ли захардкоженные проценты скидок? или это учебный пример
2026-08-10 08:06:27
15
m1ssileevasion
Главный еврей War thunder :
Замыкание не проще ли?
2026-08-10 13:31:46
2
docaner273
docaner :
А теперь аналитики попросили добавить возможно комбинировать скидки. Причем возможны различные виды комбинирования: наложение скидок друг на друга, складывание процентов скидки и применение результирующего процента и применение только максимальной скидки. Попробуйте реализовать такой функционал.
2026-08-12 09:23:51
9
bpartner
Alexander :
Принцип единственной ответственности не говорит о том, что класс не должен знать все скидки системы. Он говорит о том, что должна быть единственная причина для изменения. И если у этого класса один актор, то пусть себе знает. В описание вы правильно указали, что в данном случае нарушается второй принцип открытости, тут 100% попадание :) Вы пошли через стратегию, но этаже задача также хорошо решается через декораторы. В целом контент годный, мне бы эту информацию, когда начинал программировать.
2026-08-11 06:05:45
2
hooli316
hooli :
т.е. была 1 функция, но много элсов, мы создали кучу классов вместо этого?😁
2026-08-10 19:10:52
4
vladlenkasimov
dfg :
обожаю ваши видео. очень интересно слушать
2026-08-10 11:28:04
1
0v3r10r
Талашвлвщ Рооаоалал :
а если каждая новая скидка зависит от предыдущей?) для ознакомления подойдет, но в программном коде все индивидуально
2026-08-12 19:31:22
0
tof1k3_
tof1k3_ :
Я думал что такое разруливаеться на фронте, а потом подумал при заказе сервер самостоятельно должен посчитать чтобы юзер как то не заказал чет за свою цену, но тогда вопрос получается одно и тоже делается и на фронте и на бэке, либо же только на бэке а уже выводить цену юзеру с сервера, как это по итогу делают ?
2026-08-13 16:53:53
0
olen2919383728
Olenevod :
твои ролики мотивируют оторвать жопу с дивана и продолжить писать пет проект)
2026-08-10 09:51:05
1
_xackerr_
Тот самый XCovers :
ага, а можно вообще одним типом обойтись
2026-08-10 22:16:50
0
python_projects0
python_projects :
Если ты уже пару недель учишь Питон — хватит теории. Пора к проектам! Зовём в команду, пишем код вместе. Мест: 0/100.
2026-08-11 15:57:29
0
haha.classic1
Ha-Ha Classic :
Ну блин, ну нет, тут тупо скидка это массив выносится и остается в методе только перемножение скидки на массив
2026-08-10 16:35:09
1
jileeenbka
Жееенька :
офигеть такая полезная инфа, а ты еще и в описании все расписал🤯 респект
2026-08-10 15:13:54
0
digmen_gg
Жони :
Звучит как то хреново прям пиздец какой то не? Разве нельзя в бд записать через админку нахрена мне 100 классов если можно было сделать 1 функцию которая будет сервисом которая будет данные из бд записанные через админку я могу хоть календарь скидок сделать и сделать роли внутри типо пятницы или там день какой то там праздник зачем городить не универасльные вещи лучше если нужно малое кол это иф елсе если это не грамосткие вещи
2026-08-10 22:48:42
2
t.erpeni.e
t.erpeni.e :
Пример понятный, но странный. Скидки через настраиваемые правила и условия делаются, ну и настраивают их уже не разработчики, а менеджеры (дергая разработчиков только тогда, когда нужно добавить новое условие с подвыпердом)
2026-08-10 11:13:58
0
siarheyb
SiarheyB :
фу, всё в проперти и на лету создавать такое. Нет тела - нет дела :)
2026-08-19 23:27:59
0
To see more videos from user @movtobase, please go to the Tikwm homepage.

Other Videos


About