The Vertical Codebase: Почему вертикальная организация кода имеет значение

#frontend#codebase#architecture

TL;DR: Вертикальный кодбейс — это подход к организации кода, который минимизирует cognitive load, улучшает colocation и повышает cohesion. В статье разберем, как это работает и почему это важно в современной разработке.

Введение: Контекст и актуальность

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

Основная часть: Что такое вертикальный кодбейс?

Вертикальный кодбейс — это подход к организации кода, при котором связанные части системы группируются вместе, а не распределяются по горизонтальным слоям (например, controllers, services, repositories). Это позволяет разработчикам работать с одной функциональной единицей, не переключаясь между разными слоями приложения.

Пример горизонтального кодбейса:

// controllers/userController.js
export const getUser = async (req, res) => {
  const user = await userService.getUser(req.params.id);
  res.json(user);
};

// services/userService.js
export const getUser = async (id) => {
  return await userRepository.findById(id);
};

// repositories/userRepository.js
export const findById = async (id) => {
  return db.query('SELECT * FROM users WHERE id = ?', [id]);
};

Пример вертикального кодбейса:

// users/getUser.js
export const getUser = async (req, res) => {
  const user = await db.query('SELECT * FROM users WHERE id = ?', [req.params.id]);
  res.json(user);
};

В вертикальном подходе весь код, связанный с функциональностью получения пользователя, находится в одном файле. Это уменьшает cognitive load и улучшает colocation.

Практическое применение

1. Минимизация Cognitive Load

Когда разработчику не нужно переключаться между разными файлами и слоями приложения, он может сосредоточиться на конкретной задаче. Это особенно важно в командах, где каждый разработчик работает над разными частями системы.

2. Улучшение Colocation

Colocation — это принцип, при котором связанные части кода находятся рядом друг с другом. В вертикальном кодбейсе это достигается естественным образом, так как весь код, относящийся к одной функциональности, находится в одном месте.

3. Повышение Cohesion

Cohesion (сцепление) — это мера того, насколько сильно связаны элементы внутри модуля. Вертикальный кодбейс способствует высокой cohesion, так как все связанные элементы находятся в одном модуле.

4. Упрощение тестирования

Тестировать вертикальный кодбейс проще, так как все зависимости и логика находятся в одном месте. Это позволяет писать более компактные и понятные тесты.

// users/getUser.test.js
import { getUser } from './getUser';

test('getUser returns user data', async () => {
  const req = { params: { id: 1 } };
  const res = { json: jest.fn() };

  await getUser(req, res);

  expect(res.json).toHaveBeenCalledWith({ id: 1, name: 'John Doe' });
});

Заключение

Вертикальный кодбейс — это не просто новая мода, а реальный инструмент для управления сложностью в современных приложениях. Он помогает минимизировать cognitive load, улучшить colocation и повысить cohesion. Если вы еще не пробовали этот подход, возможно, стоит начать с небольшого модуля в вашем проекте и оценить его преимущества на практике.

В эпоху AI и автоматизации, когда инструменты могут генерировать код и помогать в разработке, важно сохранить человекочитаемость и простоту поддержки. Вертикальный кодбейс — это шаг в правильном направлении.


Источник: https://tkdodo.eu/blog/the-vertical-codebase