0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Для получения данных извне и передачи их куда-то дальше в Java используются Data-классы. Обычно это связано с любыми внешними источниками данных, базой данных, HTTP, файлами. Если нам нужно получить какие-то данные, например информацию о заказе, нам придется создать класс, который описывает этот заказ. Причем сам класс не будет зависеть от того, из какого источника пришли данные. То же самое работает и в обратном направлении, если нам нужно выгрузить данные, то для этого создаются свои классы, которые содержат только необходимые поля.</p>
1
<p>Для получения данных извне и передачи их куда-то дальше в Java используются Data-классы. Обычно это связано с любыми внешними источниками данных, базой данных, HTTP, файлами. Если нам нужно получить какие-то данные, например информацию о заказе, нам придется создать класс, который описывает этот заказ. Причем сам класс не будет зависеть от того, из какого источника пришли данные. То же самое работает и в обратном направлении, если нам нужно выгрузить данные, то для этого создаются свои классы, которые содержат только необходимые поля.</p>
2
<p>Data-классы это обычные классы без поведения. Из-за этого их стараются делать неизменяемыми, или как говорят иммутабельными (immutable), для избежания случайных ошибок. В идеале у этих классов нет сеттеров, а все поля помечены как final, что защищает их от изменения.</p>
2
<p>Data-классы это обычные классы без поведения. Из-за этого их стараются делать неизменяемыми, или как говорят иммутабельными (immutable), для избежания случайных ошибок. В идеале у этих классов нет сеттеров, а все поля помечены как final, что защищает их от изменения.</p>
3
<p>Data-классы это настолько большая часть любого приложения на Java, что в язык была внедрена новая конструкция Record (запись). Записи по своей сути Data-классы. Ниже пример того, как мы бы могли переделать наш OrderDTO:</p>
3
<p>Data-классы это настолько большая часть любого приложения на Java, что в язык была внедрена новая конструкция Record (запись). Записи по своей сути Data-классы. Ниже пример того, как мы бы могли переделать наш OrderDTO:</p>
4
<p>Запись значительно сокращает количество кода, предоставляя практически такую же функциональность. Но с небольшими отличиями. Геттеры в записях не содержат префикса<em>get</em>.</p>
4
<p>Запись значительно сокращает количество кода, предоставляя практически такую же функциональность. Но с небольшими отличиями. Геттеры в записях не содержат префикса<em>get</em>.</p>
5
<p>Несмотря на синтаксическое превосходство, записи обладают рядом недостатков, которые делают их использование в качестве замены обычных классов неудобным. Сюда входят:</p>
5
<p>Несмотря на синтаксическое превосходство, записи обладают рядом недостатков, которые делают их использование в качестве замены обычных классов неудобным. Сюда входят:</p>
6
<ul><li>Возможность работать только в неизменяемом стиле. Нет сеттеров.</li>
6
<ul><li>Возможность работать только в неизменяемом стиле. Нет сеттеров.</li>
7
<li>Только один конструктор со всеми полями.</li>
7
<li>Только один конструктор со всеми полями.</li>
8
<li>Нет наследования (иногда нужно).</li>
8
<li>Нет наследования (иногда нужно).</li>
9
<li>Многие библиотеки и фреймворки до сих пор не совместимы с записями.</li>
9
<li>Многие библиотеки и фреймворки до сих пор не совместимы с записями.</li>
10
</ul><p>Поэтому основным способом по-прежнему является создание обычных классов. И Lombok делает этот процесс достаточно простым.</p>
10
</ul><p>Поэтому основным способом по-прежнему является создание обычных классов. И Lombok делает этот процесс достаточно простым.</p>
11
11