Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Использование record для моделей реквестов ASP.NET

vato 1 Мастер (1509), на голосовании 2 месяца назад
public record LoginRequest(string Email, string Password);

public record RegisterRequest(string Email, string Password);

public record ConfirmEmailRequest(string Email, string Otp);
public record ChangePasswordRequest(string Email, string CurrentPassword,string NewPassword);
public record ResetPasswordRequest(string Email);
public record NewPasswordRequest(string Email,string Otp,string NewPassword);

Обоснованно ли , хорошая ли практика , до этого я писал public sealed class с required свойствами.
Голосование за лучший ответ
Александр Просветленный (21522) 3 месяца назад
Не самое лучшее использование record. Его хорошо использовать для иммутабельных конструкций, конфигов, вычислений, циклов. Например когда нам в цикле нужно создать большое кол-во объектов, которые впоследствии не будут изменены, и тут будет полезен record, потому что позволяет избегать дополнительных аллокаций. Ну и там есть еще нюансы при сравнении объектов по значению/ссылке и при сериализации. Вообщем в качестве моделей Request/Response используйте обычные классы, они же Dto. И sealed тоже не очень, потому что одна Dto может наследовать другую. Вполне нормальное явление.
vato 1Мастер (1509) 3 месяца назад
у меня была мысль что в разрезе одного реквеста , эта модель живёт всего раз и для максимальной производительности рекорд выглядил максимально привлекательно , причём даже если совпадают все свойства я не смогу сделать родительский базовый класс для реквеста так как они зачастую по сути своей отличаются. Есть совет исходя из этой доп информации?
Александр Просветленный (21522) vato 1, тут дело не в том, что модель живет всего раз, а в том, что у record есть свои ограничения, например вы не примените к record различные атрибуты вроде JsonIgnore или подобных. Поэтому можете нарваться на грабли при сериализации/десериализации. Помимо этого при каком-нибудь ToString у вас полезут все поля при вызове этого метода. И т.д. Поэтому record не стоит использовать в качестве Request/Respone моделей, лучше обычные классы, которые вы можете декорировать любыми атрибутыми и манипулировать как угодно.
Похожие вопросы