HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Создание и обновление сущности - это похожие операции, но все таки они совпадают не полностью. Различия между операциями приводят к тому, что нам нужно создавать свои DTO под каждую из них. В этом уроке мы научимся реализовывать операцию обновления с учетом DTO.</p>
1 <p>Создание и обновление сущности - это похожие операции, но все таки они совпадают не полностью. Различия между операциями приводят к тому, что нам нужно создавать свои DTO под каждую из них. В этом уроке мы научимся реализовывать операцию обновления с учетом DTO.</p>
2 <p>Возьмем для примера Post. Как правило, слаг в постах не меняется после создания. Если его изменить, все ссылки на пост перестанут работать и начнут выдавать ошибку 404. Технически это означает, что для обновления мы должны запретить изменять слаг. Фактически нам придется создать свой DTO для операции обновления.</p>
2 <p>Возьмем для примера Post. Как правило, слаг в постах не меняется после создания. Если его изменить, все ссылки на пост перестанут работать и начнут выдавать ошибку 404. Технически это означает, что для обновления мы должны запретить изменять слаг. Фактически нам придется создать свой DTO для операции обновления.</p>
3 <p>В итоге мы сделаем три DTO для CRUD всего одной сущности. Может показаться, что это слишком много. К сожалению, здесь нет идеального решения. Свой DTO под каждый тип операции - это самое простое и устойчивое к ошибкам решение, хотя оно и приводит к большему объему кода.</p>
3 <p>В итоге мы сделаем три DTO для CRUD всего одной сущности. Может показаться, что это слишком много. К сожалению, здесь нет идеального решения. Свой DTO под каждый тип операции - это самое простое и устойчивое к ошибкам решение, хотя оно и приводит к большему объему кода.</p>
4 <p>Посмотрим, как выглядит наш DTO для создания сущности:</p>
4 <p>Посмотрим, как выглядит наш DTO для создания сущности:</p>
5 <p>В таком случае DTO для обновления будет выглядеть так:</p>
5 <p>В таком случае DTO для обновления будет выглядеть так:</p>
6 <p>Второе отличие обновления от создания связано с тем, что мы не создаем новый объект, а меняем уже существующий. То есть правильная реализация обновления выглядит так:</p>
6 <p>Второе отличие обновления от создания связано с тем, что мы не создаем новый объект, а меняем уже существующий. То есть правильная реализация обновления выглядит так:</p>
7 <p>Учитывая все сказанное выше, мы получим следующий обработчик в контроллере:</p>
7 <p>Учитывая все сказанное выше, мы получим следующий обработчик в контроллере:</p>
8 <p>У этой реализации есть одно важное ограничение - она не поддерживает частичное обновление. Для примера представим, что мы передали ей новое значение и не уточнили, что хотим оставить старое. В таком случае эта реализация просто удалит старое значение. В одном из следующих уроков мы обсудим, как решить эту проблему.</p>
8 <p>У этой реализации есть одно важное ограничение - она не поддерживает частичное обновление. Для примера представим, что мы передали ей новое значение и не уточнили, что хотим оставить старое. В таком случае эта реализация просто удалит старое значение. В одном из следующих уроков мы обсудим, как решить эту проблему.</p>