Java Records - это не просто DTO.
Многие думают, что record - только для хранения данных.
Но на практике это полноценный тип, в котором можно добавить бизнес-логику.
Что можно внутри record:
* конструкторы с валидацией
* instance-методы
* static-методы
* фабричные методы
* нормализацию данных
Пример реального использования:
public record Email(String address) {
// Валидация при создании
public Email {
if (address == null || !address.matches("^[\\w-.]+@[\\w-]+\\.[\\w]{2,4}$")) {
throw new IllegalArgumentException("Invalid email: " + address);
}
}
// Бизнес-логика
public String domain() {
return address.substring(address.indexOf("@") + 1);
}
// Фабричный метод
public static Email from(String raw) {
return new Email(raw.trim().toLowerCase());
}
}
Почему это мощно:
* неизменяемость по умолчанию
* вся логика рядом с данными
* меньше boilerplate
* безопасное создание объектов
* идеальный формат для Value Objects (DDD)
Record - это не “структура”.
Это компактный способ писать чистые доменные модели.
Если используешь records только как DTO, ты используешь их на 50%.
Java библиотека