Обновить

История тупняка.
В тестах я использую билдеры на минималках: создаю DTO и мутирую его с помощью универсального метода With или специальных методов расширений. Это позволяет устанавливать только важные для теста поля. Выглядит так-то так:

var person = DefaultPerson().With(x => Name = "Вася");
//или
var person = DefaultPerson().WithName("Вася");

И вот мне понадобилось в таком стиле работать с рекорадми, а они не мутируются. Ну я такой не растерялся, вспомнил, что есть нормальная реализация паттерна builder, когда мы сначала настраиваем builder, а потом потом уже создаём интересующий нас объект. Выглядит так раньше, только есть вызов Build().

var person = DefaultPerson().WithName("Вася").Build();

Минус в том, что билдер нужно писать, поэтому вспомнил про source-generators, нашёл библиотеку в которой просто объявляешь класс билдера, вешаешь атрибут, а остальное она сделает сама. Выглядит вот так:

[AutoGenerateBuilder(typeof(PersonDto))]
public partial class PersonDtoBuilder
{
}

А потом решил загуглить как народ выкручивается, искал по запросу C# record builder. И нашёл, что можно просто использовать ключевое слово with. Очень просто:

DefaultPerson() with {Name = "Вася" }; 

И знаете что? Я знал про with, просто никогда не пользовался и забыл. Такой вот тупняк на ровном месте.

Теги:
Всего голосов 3: ↑2 и ↓1+4
Комментарии4
ЕЖЕДНЕВНЫЙ ХАБР | 11 АВГ 2026
Охват6K

Мидл — это не три года опыта. Грейды в DevOps как типы ответственности

Два инженера, у обоих пять лет в DevOps и одинаковый стек в резюме: Kubernetes, Terraform, GitLab и вот это вот всё. Весной оба ходили по собеседованиям, но первый собрал офферы уровня “мидл, 200”, второй ушёл с “сеньор, 300” (алгоритмические секции первый, к слову, проходил лучше). Разница больше миллиона в год при неотличимых резюме. Ниже рамка, которая по моему мнению объясняет за что доплачивают, и три вопроса, чтобы найти в ней себя.

Мидл — это не три года опыта. Грейды в DevOps как типы ответственности

Публикации