DEV Community

dmkjfs
dmkjfs

Posted on

Абстракции vs привязка к технологии. ч.2

Начало: клик

Помедитировал над этим и пришел к тому, что вообще-то такая абстракция это неплохой контракт или декларация того, что делают разработчики, особенно если их много и у них разный уровень понимания проекта.

Разбиваю по фактам себя январьского, смотреть без регистрации и смс.

Мне иррационально не нравилось отсутствие абстракций, я это рационализировал. Смотрите.

1️⃣ У объекта итак должны существовать свойства, в противном случае что-то поломается. И как будто бы не надо дополнительно навешивать на него декларацию, ведь если свойства не будет, то мы узнаем что оно должно быть? Но поломка это нехороший случай, и новичку/агенту который этим занимается будет трудно найти и понять причину поломки. Лучше явно прописать правила. Можно это сделать в доке, но доку сложно держать актуальной, а код удобен для чтения и там еще компилятор/тайпчекер напинает если сделать что-то неправильно. А если новичок нарушит правила и решит поменять контракт, то есть абстракцию, то это сразу же вскроется на ревью. Так мы даем новичку/ai-агенту комфортное и безопасное место, в котором он может сделать свою таску. Ну и вообще явное лучше неявного же.

2️⃣ Совсем не обязательно писать супер универсальную абстракцию с максимально широким применением. Допустим, у вас есть какой-нибудь класс DatabaseOperator, это абстракция. От неё наследуется PostgresOperatorImplementation. Первый класс - это декларация того, как все должно выглядеть чтобы это было удобно использовать; второй класс - уже реализация, он наследуется от первого.

И есть мысль, которой хорошо моет мозги слоистая архитектура: нужно иметь возможность заменить слой на аналогичный в любой момент. Не могу сказать, что она совсем плохая, но здесь она неприменима, потому что этот принцип создавался для другого. Как часто надо поменять БД на абсолютно любую, включая NoSQL-базы? - Примерно никогда.

Но если вам действительно нужно поменять БД, о чём вы будете думать: о переносе данных и тп или о том, что в коде надо поменять пару строк? - Наверное, всё-таки о первом, первое вызовет больше сложностей, а значит такая абстракция нерациональна и бессмыслена.

Поэтому, дорогой разработчик, ну давай сделаем класс который декларирует взаимодействие с конкретным postgres: PostgresOperator и PostgresOperatorImplementation. Никаких архитектурных проблем, которые вырастут в потерю контроля над масштабируемостью это не вызовет, просто ну вот такой у нас проект - работает только с постгресом. А если всё-таки поменяем postgres на MySQL, то изменим пару методов и название. Теперь у нас есть декларация методов без переусердствования с абстракциями.

P.S. И надо сабнуться на тгк: https://t.me/dmkjfss

Top comments (0)