Logo

dev-resources.site

for different kinds of informations.

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

Published at
1/13/2025
Categories
architecture
cleancode
programming
discuss
Author
dmkjfs
Абстракции vs. привязка к технологии

Считайте это продолжением "От слоистой архитектуры к DDD". Я ищу компромисс.

Контекст. В простой монолитной архитектуре(слоистой, линейной, etc.) привязка к конкретному стеку гораздо сильнее, чем в архитектуре, напичканной абстракциями. Например, у вас есть какой-то интерфейс для чего-то. В первом случае он просто существует сам по себе и просто используется, где надо. Во втором случае у него будет какая-нибудь абстракция, с которой вы будете работать везде, где понадобится этот интерфейс. Вот эти два способа я и сравниваю.

Плюсы и минусы использования объектов без абстракций:
+ быстро пишутся с нуля
+ проще читаются
- сложнее расширяются

При использовании абстракций, соответственно, всё наоборот. Это довольно общепринятая вещь, но я в ней начал сомневаться. Думаю я примерно о таком:

1️⃣ Абстракция означает только явное указание свойств объекта. Неявно они существуют в любом случае. Представим, что в неком приложении есть объект с неким свойством, которое используется в другом месте. Получается, объект должен им обладать, иначе его нельзя вызвать. Можно, конечно, прописать абстракцию, которая будет обозначать наличие этого свойства, но и без этого оно необходимо, потому что используется.

2️⃣ Такие абстракции часто подгоняются под свои реализации, хотя и кажется, что они универсальны.

3️⃣ Для медленных языков программирования: добавляются проблемы. Например, в питоне создание ещё одного класса с абстракцией может ощутимо замедлить работу приложения.

4️⃣ Для модульного монолита/микросервисов: каждый модуль/сервис почти полностью или полностью изолирован от других модулей/сервисов, то есть нет потребности в сложной архитектуре и куче абстракций внутри каждого модуля, ведь он представляет собой крошечное приложение.

5️⃣ В реальности замена объекта на аналогичный происходит крайне редко. Сложно представить ситуацию, в которой требуется много раз заменить интерфейс для базы данных или для почты.

Напоминаю, всё это относится только к абстракциям для единственного объекта, а не вообще ко всем абстракциям.

Получается, при наличии хорошей документации абстракции такого типа вообще не нужны. Но это вступает в конфликт с хорошей рекомендацией "явное лучше неявного". Или такой рекомендацией всё-таки можно пренебречь в данном контексте (пренебрегаем же мы ей в более простых местах)? Ещё отказ от таких абстракций не нравится моему внутреннему перфекционисту. Короче, я ещё думаю, стоит ли убирать их на практике

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

Featured ones: