Ответ
Бизнес-объект (или сущность предметной области) инкапсулирует данные и логику конкретной бизнес-концепции. Его типичная структура:
- Состояние (Поля): Приватные поля, представляющие атрибуты объекта (ID, имя, статус, даты).
- Поведение (Методы): Публичные методы, реализующие бизнес-логику, связанную с этими данными.
- Инварианты (Валидация): Логика внутри методов или аннотаций (Bean Validation), обеспечивающая целостность объекта.
- Связи: Ссылки на другие бизнес-объекты (агрегация, композиция), определяющие границы агрегата.
Пример класса 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();
}
}
Принцип: Объект должен защищать свое состояние и гарантировать выполнение бизнес-правил.