Поясню последнюю мысль. Люди упрощают концепцию DRY до "дублирование кода это

плохо". Почему плохо? потому что если надо подправить чего (например баг пофиксить или правило поменять) то надо не забыть подправить в "дублях". То есть больше действий, "зачем себя повторять".

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

Озвучив эти две мысли обсудим риски с кейсом когда мы НЕ убираем дублирование. Самый большой риск тут - если у нас было важное бизнес правило которое продублировано везде (чаще всего такое вижу в виде проверок доступа и т.д.) мы можем "забыть" где-то поменять и в лучшем случае у нас поведение будет не консистентным а в худшем у нас будет дырка в безопасности или система может где-то в неконсистентный стэйт зайти.

С другой стороны, если мы меняем структуры данных, то есть некий стэйт... по каким причинам мы можем это делать? Стэйт же врядли существует сам по себе - есть какая-то логика которая на него завязана. Если мы попробуем "убрать дублирование" - мы уверены что все кто на этот стэйт завязан требуют этих изменений? Ведь если инварианты разные - то скорее всего и стэйт может со временем расходиться.

Самый банальный пример - попытки "реюза" структур данных для DTO которые используются например в апишке для разных операций. Частенько вижу такое что если на клиенте надо айдишка, тайтл и автор поста люди любят сделать какую-нибудь одну структуру которая будет юзаться и для списка постов на публичной стороне системы так и на стороне бэкофиса/админки. Как следствие изменения требующиеся одной стороной могут случайно повлиять на другую.

При этом если мы "забудем" поменять в дубле - ну... ежели у нас зависимость этого требует то мы врядли забудем обновить. А если зависимость этого не требует то надо ли менять.

Такие вот мысли на эту тему.

Есть еще один интересный ракурс на эту проблему - когда стэйт действительно один но в зависимости от контекста и операции правила меняются. Это можешь на тему data context interaction погуглить)

2 ответов

16 просмотров

Офигеть, я это сохраню себе пожалуй

У меня много дублирования. И в дб, и в коде)) Так меньше каплинга)0

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта