← Назад к вопросам

Сколько строк кода было на предыдущем проекте?

2.0 Middle🔥 161 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Объём кода в предыдущем проекте

Общая статистика

На последнем крупном проекте итоговый объём составил ~180 тысяч строк Python кода (без пустых строк и комментариев, но включая тесты):

  • Бизнес-логика (domain, application): ~45 тыс. LOC (25%)
  • API endpoints и handlers: ~32 тыс. LOC (18%)
  • Database models и миграции: ~28 тыс. LOC (15%)
  • Тесты (unit, integration, E2E): ~65 тыс. LOC (36%)
  • Утилиты, конфигурация, скрипты: ~10 тыс. LOC (6%)

Распределение по модулям

backend/
├── domain/              (15K LOC) — сущности, логика, исключения
│   ├── models/          (7K) — OrderAggregate, UserAggregate, etc
│   ├── services/        (5K) — business rules
│   └── exceptions/      (3K) — domain-specific errors
├── application/         (12K LOC) — use cases, orchestration
│   ├── dto/             (4K) — data transfer objects
│   ├── use_cases/       (6K) — application logic
│   └── mappers/         (2K) — DTO conversions
├── infrastructure/      (15K LOC) — DB, external APIs, caching
│   ├── repositories/    (7K) — data access
│   ├── external_clients/(5K) — payment API, SMS, email
│   └── cache/           (3K) — Redis integration
├── presentation/        (3K LOC) — FastAPI routes (thin)
│   └── api/             (3K) — endpoint handlers
└── tests/               (65K LOC) — full test coverage
    ├── unit/            (25K) — fast, isolated tests
    ├── integration/      (30K) — with database
    └── e2e/             (10K) — full flow

Метрики качества кода

Test Coverage: 92% (цель была 90%+)

  • Domain layer: 98% (критически важно)
  • Application: 94%
  • Infrastructure: 87%
  • Presentation: 85%
# Пример типичного модуля (domain/services/order_service.py)
class OrderService:
    """Бизнес-логика работы с заказами."""
    
    def __init__(self, repository: OrderRepository):
        self.repository = repository
    
    async def create_order(self, user_id: str, items: list[OrderItem]) -> Order:
        """Создание заказа с валидацией."""
        if not items:
            raise EmptyOrderError("Заказ должен содержать минимум 1 товар")
        
        total_amount = sum(item.price * item.quantity for item in items)
        if total_amount > 1_000_000:
            raise ExceedsLimitError(f"Сумма {total_amount} превышает лимит")
        
        order = Order(
            user_id=user_id,
            items=items,
            total=total_amount,
            created_at=datetime.now(UTC)
        )
        return await self.repository.save(order)

Почему важен объём и распределение

  1. Слишком мало кода (< 10K) — недостаточно для полноценной архитектуры
  2. Слишком много тестов (> 50% кода) — излишняя консервативность, замедляет разработку
  3. Правильный баланс — 35-40% тестов, остальное — production code

Как измеряется

# Подсчёт непустых строк кода (исключая комментарии)
find backend -name "*.py" | xargs wc -l | tail -1

# Разбор по типам файлов
cloc backend --by-file-by-lang

# Покрытие тестами
pytest --cov=backend --cov-report=term-missing

Уроки, извлечённые

  • Качество > Количество: 180K LOC с 92% coverage лучше 500K LOC с 40% coverage
  • Архитектура масштабирует код: слои и модули упрощают добавление новых features
  • Тесты — инвестиция: 65K строк тестов заэкономили недели на отладку багов
  • Метрики нужны: без cloc и pytest-cov невозможно отслеживать здоровье кодовой базы
Сколько строк кода было на предыдущем проекте? | PrepBro