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

В чем разница между Business Model и Entity Model?

3.0 Senior🔥 91 комментариев
#Архитектура и паттерны

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

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

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

Разница между Business Model и Entity Model

Business Model и Entity Model — это две разные концепции проектирования, которые решают разные задачи и находятся на разных уровнях абстракции архитектуры приложения.

Business Model

Business Model отражает бизнес-логику и процессы предметной области. Это концептуальное представление сущностей и их взаимоотношений в реальном мире. Business Model:

  • Фокусируется на бизнес-правилах — что нужно делать и как это должно работать
  • Независим от реализации — не привязан к технологиям, БД, фреймворкам
  • Содержит инвариванты — правила, которые всегда должны быть истинны
  • Предметно-ориентирован — использует язык бизнеса

Примеры:

// Business Model — Order
class Order {
  id: string;
  customerId: string;
  items: OrderItem[];
  status: "pending" | "confirmed" | "shipped" | "delivered";
  totalPrice: Money;
  
  // Бизнес-правило: статус можно изменить только в определённом порядке
  confirmOrder(): void {
    if (this.status !== "pending") {
      throw new Error("Заказ уже подтверждён");
    }
    this.status = "confirmed";
  }
  
  // Бизнес-правило: цена вычисляется с учётом скидок
  calculateTotal(discounts: Discount[]): Money {
    // Бизнес-логика расчёта
  }
}

Entity Model

Entity Model — это техническое представление данных для хранения в базе данных. Это то, как данные физически организованы и структурированы в PostgreSQL, MongoDB и т.д. Entity Model:

  • Фокусируется на хранении — как структурировать таблицы, индексы, связи
  • Привязан к конкретной БД — учитывает особенности реляционной или NoSQL БД
  • Оптимизирован для запросов — может содержать денормализацию для производительности
  • Технический — использует терминологию БД

Примеры:

// Entity Model — Order в PostgreSQL
interface OrderEntity {
  id: string;
  customer_id: string;
  status: "pending" | "confirmed" | "shipped" | "delivered";
  total_price_cents: number; // Храним в центах для точности
  created_at: Date;
  updated_at: Date;
}

interface OrderItemEntity {
  id: string;
  order_id: string; // FK для связи
  product_id: string;
  quantity: number;
  price_cents: number;
}

Основные отличия

ПараметрBusiness ModelEntity Model
УровеньДомен, бизнес-логикаИнфраструктура, хранение
ЯзыкПредметный, бизнесТехнический
ОтветственностьИнвариванты, правилаСтруктура БД, запросы
ИзменчивостьМеняется редкоМожет меняться часто
ЗависимостьНезависимЗависит от выбора БД
Пример поляtotalPrice: Moneytotal_price_cents: number

Как они работают вместе

  1. Domain Layer работает с Business Models
  2. Application Layer преобразует между Business и Entity models
  3. Infrastructure Layer работает с Entity Models и БД
// Application Service
class CreateOrderService {
  async execute(command: CreateOrderCommand): Promise<void> {
    // 1. Создаём Business Model
    const order = new Order(command.customerId);
    
    // 2. Применяем бизнес-логику
    order.addItem(item);
    if (order.totalPrice > MAX_PRICE) {
      throw new OrderTooExpensiveError();
    }
    
    // 3. Преобразуем в Entity Model для сохранения
    const entity = this.mapper.toPersistence(order);
    
    // 4. Сохраняем в БД
    await this.orderRepository.save(entity);
  }
}

Вывод

Business Model — это модель предметной области с правилами и инвариантами. Entity Model — это техническое представление данных для хранения. Разделение этих моделей позволяет:

  • Сохранить чистоту доменного слоя
  • Легко менять реализацию БД
  • Легче тестировать бизнес-логику
  • Применять Clean Architecture и DDD

Это одна из основ Clean Architecture и Domain-Driven Design.

В чем разница между Business Model и Entity Model? | PrepBro