Из чего состоит бизнес-объект (domain object) в Java?

«Из чего состоит бизнес-объект (domain object) в Java?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Бизнес-объект (или сущность предметной области) инкапсулирует данные и логику конкретной бизнес-концепции. Его типичная структура:

  1. Состояние (Поля): Приватные поля, представляющие атрибуты объекта (ID, имя, статус, даты).
  2. Поведение (Методы): Публичные методы, реализующие бизнес-логику, связанную с этими данными.
  3. Инварианты (Валидация): Логика внутри методов или аннотаций (Bean Validation), обеспечивающая целостность объекта.
  4. Связи: Ссылки на другие бизнес-объекты (агрегация, композиция), определяющие границы агрегата.

Пример класса Order (Заказ):

public class Order {
    private Long id;
    private Customer customer; // Связь с агрегатом Customer
    private List<OrderItem> items = new ArrayList<>(); // Композиция
    private OrderStatus status;
    private LocalDateTime createdAt;

    // Бизнес-метод для расчета итога
    public BigDecimal calculateTotal() {
        return items.stream()
                .map(OrderItem::getSubtotal) // Делегирование расчета позиции
                .reduce(BigDecimal.ZERO, BigDecimal::add);
    }

    // Бизнес-метод для размещения заказа
    public void place() {
        if (items.isEmpty()) {
            throw new IllegalStateException("Order must have at least one item");
        }
        this.status = OrderStatus.CONFIRMED;
        this.createdAt = LocalDateTime.now();
    }
}

Принцип: Объект должен защищать свое состояние и гарантировать выполнение бизнес-правил.