Создайте стык (seam) в первый же день
Создание платформы для обработки больших объемов данных заставляет сделать выбор.
Вам нужна быстрая база данных для долгосрочного хранения. Но развертывание сложной системы в первый же день — задача непростая. Вы можете даже не знать паттернов ваших данных. Безопасный выбор — стандартная реляционная база данных, которую вы уже используете.
Ошибка заключается в том, чтобы привязывать код напрямую к этой первой базе данных. Если каждая часть вашего приложения обращается к базе напрямую, вы создаете ловушку. Переход на более подходящую базу данных позже потребует масштабного рефакторинга.
Правильное решение — создать стык (seam).
Стык — это контракт. Он определяет, что делает система, не уточняя, как именно она это делает.
- Создайте интерфейс для задачи.
- Напишите базовый драйвер, использующий вашу текущую базу данных.
- Привяжите этот драйвер к интерфейсу.
Все остальные части вашего приложения взаимодействуют только с интерфейсом. Никто не знает, какая база данных работает в фоновом режиме.
Когда объем данных вырастет и вам понадобится более быстрая система, работа будет простой. Вы напишете новый драйвер, измените одну строку кода и выпустите обновление. Дашборды не сломаются. Пайплайны не остановятся.
Некоторые называют это преждевременной абстракцией. Они говорят, что она вам пока не нужна.
Я не согласен. Интерфейс стоит вам всего одного дополнительного файла. Отказ от него лишь переносит расходы на более поздний срок. Когда вам наконец потребуется внести изменения, вам придется исправлять сотни файлов в условиях цейтнота. Интерфейс — это дешевая страховка.
Используйте эти три привычки, чтобы сделать ваши стыки надежнее:
Используйте двойную идентификацию. Используйте быстрые целые числа для внутренних соединений (joins) в базе данных. Используйте UUID для всего, что покидает вашу систему. Это обеспечит безопасность данных и высокую скорость соединений.
Используйте Enums для общего словаря. Не используйте произвольные строки для статусов или уровней важности. Используйте единый Enum, чтобы каждая часть вашего приложения говорила на одном языке.
Используйте версионированные оболочки (envelopes) для данных. Если ваша система получает данные из множества источников, используйте строгую схему. Только добавляйте новые поля. Никогда не удаляйте и не переименовывайте их без выпуска новой версии. Это позволит старым клиентам продолжать работу, пока вы совершенствуете систему.
Найдите границу. Опишите её контрактом. Наполните её простой реализацией.
Контракт — это ваше обещание. Драйвер — это лишь то, как вы выполняете это обещание сегодня.
Источник: https://dev.to/nasrulhazim/build-the-seam-on-day-one-the-second-driver-on-day-ninety-26b
