плохо". Почему плохо? потому что если надо подправить чего (например баг пофиксить или правило поменять) то надо не забыть подправить в "дублях". То есть больше действий, "зачем себя повторять".
Стоит так же заметить плюсы дублирования - если у нас есть две штуки которые представляют собой разные концепты (например их юзают разные вещи, они обслуживают фичи разных групп людей, etc), пусть и использующие одинаковый код где-то, шансы того что ты сломаешь случайно "другую штуку" подправив что-то для "той штуки" существенно ниже. Работает не трогай как говорится.
Озвучив эти две мысли обсудим риски с кейсом когда мы НЕ убираем дублирование. Самый большой риск тут - если у нас было важное бизнес правило которое продублировано везде (чаще всего такое вижу в виде проверок доступа и т.д.) мы можем "забыть" где-то поменять и в лучшем случае у нас поведение будет не консистентным а в худшем у нас будет дырка в безопасности или система может где-то в неконсистентный стэйт зайти.
С другой стороны, если мы меняем структуры данных, то есть некий стэйт... по каким причинам мы можем это делать? Стэйт же врядли существует сам по себе - есть какая-то логика которая на него завязана. Если мы попробуем "убрать дублирование" - мы уверены что все кто на этот стэйт завязан требуют этих изменений? Ведь если инварианты разные - то скорее всего и стэйт может со временем расходиться.
Самый банальный пример - попытки "реюза" структур данных для DTO которые используются например в апишке для разных операций. Частенько вижу такое что если на клиенте надо айдишка, тайтл и автор поста люди любят сделать какую-нибудь одну структуру которая будет юзаться и для списка постов на публичной стороне системы так и на стороне бэкофиса/админки. Как следствие изменения требующиеся одной стороной могут случайно повлиять на другую.
При этом если мы "забудем" поменять в дубле - ну... ежели у нас зависимость этого требует то мы врядли забудем обновить. А если зависимость этого не требует то надо ли менять.
Такие вот мысли на эту тему.
Есть еще один интересный ракурс на эту проблему - когда стэйт действительно один но в зависимости от контекста и операции правила меняются. Это можешь на тему data context interaction погуглить)
Офигеть, я это сохраню себе пожалуй
У меня много дублирования. И в дб, и в коде)) Так меньше каплинга)0
Обсуждают сегодня