Почему это важно?
В DDD value object должен:
- быть неизменяемым (immutable)
- сравниваться по значениям, а не по ссылке
Именно это records дают из коробки.
Что получаем:
- неизменяемость через
init- структурное сравнение (Value Equality)
- короткий и чистый синтаксис
- deconstruction
- pattern matching
Пример:
public class Booking
{
public Address Address { get; init; }
public DateRange Period { get; init; }
}
public record Address(
string Street,
string City,
string State,
string Country,
string ZipCode);
Теперь два Address считаются равными, если совпадают их поля - без переопределения Equals и GetHashCode.
Раньше для value object приходилось писать:
• конструкторы
• Equals
• GetHashCode
• оператор ==
Теперь - одна строка.
Records делают value objects:
• безопаснее
• проще
• ближе к функциональному стилю
Если используете DDD в .NET - records должны быть стандартом для value objects.
