Что такое DDD (Domain-Driven Design)

«Что такое DDD (Domain-Driven Design)» — вопрос из категории Архитектура, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые концепции:

  • Домен (Domain) — предметная область приложения.
  • Сущности (Entities) — объекты с идентичностью (например, User с ID).
  • Value-объекты — неизменяемые объекты без идентичности (например, Address).
  • Агрегаты (Aggregates) — группы связанных сущностей с корневым объектом.
  • Репозитории (Repositories) — абстракции для доступа к данным.

Пример на Go:

type Order struct { // Агрегат
    ID       string      // Сущность
    Items    []OrderItem // Value-объекты
}

type OrderItem struct {
    ProductID string
    Quantity  int
}

type OrderRepository interface { // Репозиторий
    Save(order Order) error
    FindByID(id string) (*Order, error)
}

DDD особенно полезен в сложных бизнес-приложениях, где важно явно выразить доменные правила.