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

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

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

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

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

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

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

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

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

2 ответов

4 просмотра

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

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

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

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

Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
А чего при переходе с 2 на 3 все что в билдере сделано тютю?
Денис Александрович
5
К слову, почему бы не использовать ссылки на папки, вместо инвайтинга?
Артем Уколов
3
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Всем привет, может кто знает нормальных иностранных хостинг провайдеров. Что бы по качеству аналогичные netangels, beget, timeweb?
Black Cat
4
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Кастомные эмодзи для ботов доступны только элите, верно?
山 | Bobby | 山
3
Карта сайта