Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

DTO vs POCO vs Value Object

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ DTO, POCO ΠΈ Value Object

Π’Π½Π°Ρ‡Π°Π»Π΅ нСбольшая Ρ€Π΅ΠΌΠ°Ρ€ΠΊΠ° ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Value Object. Π’ C# сущСствуСт похоТая концСпция, называСмая Value Type. Π­Ρ‚ΠΎ всСго лишь Π΄Π΅Ρ‚Π°Π»ΡŒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ хранятся Π² памяти ΠΈ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ этого. Value Object, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ, β€” понятиС ΠΈΠ· срСды DDD (Domain-Driven Design).

Ок, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ. Π’Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ понятия ΠΊΠ°ΠΊ DTO, Value Object ΠΈ POCO часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ синонимы. Но Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅?

DTO β€” это класс, содСрТащий Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. DTO ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ прилоТСниями, Π»ΠΈΠ±ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ слоями Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прилоТСния. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, СдинствСнная Ρ†Π΅Π»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŽ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Value Object β€” это ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π»Π΅Π½ вашСй Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Он подчиняСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ сущности (Entities). ЕдинствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Value Object ΠΈ Entity Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Value Object-Π° Π½Π΅Ρ‚ собствСнной идСнтичности. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π° Value Object-Π° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ свойствами ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Π²Π΅ сущности ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π΄Π°ΠΆΠ΅ Π² случаС Ссли ΠΈΡ… свойства ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚.

Value Object-Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ прилоТСниями.

POJO Π±Ρ‹Π» прСдставлСн ΠœΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΌ Π€Π°ΡƒΠ»Π΅Ρ€ΠΎΠΌ Π² качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ для JavaBeans ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… «тяТСлых» enterprise-конструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ популярны Π² Ρ€Π°Π½Π½ΠΈΡ… 2000-Ρ….

Основной Ρ†Π΅Π»ΡŒΡŽ POJO Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΌΠ΅Π½ прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ смодСлирован Π±Π΅Π· использования JavaBeans. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, JavaBeans Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для этой Ρ†Π΅Π»ΠΈ.

Π”Ρ€ΡƒΠ³ΠΎΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π°Π½Ρ‚ΠΈ-POCO ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” Entity Framework Π΄ΠΎ вСрсии 4.0. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс, сгСнСрированный EF, наслСдовал ΠΎΡ‚ EntityObject, Ρ‡Ρ‚ΠΎ привносило Π² Π΄ΠΎΠΌΠ΅Π½ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΡƒΡŽ для EF. Начиная с вСрсии 4, Entity Framework Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с POCO модСлью β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ EntityObject.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, понятиС POCO ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ использованиС Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ простых классов насколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ для модСлирования ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области. Π­Ρ‚ΠΎ понятиС ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² YAGNI, KISS ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… best practices. POCO классы ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ.

ΠšΠΎΡ€Ρ€Π΅Π»ΡΡ†ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ понятиями

Π•ΡΡ‚ΡŒ Π»ΠΈ связи ΠΌΠ΅ΠΆΠ΄Ρƒ этими трСмя понятиями? Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, DTO ΠΈ Value Object ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ взаимозамСняСмо. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, POCO β€” это надмноТСство для DTO ΠΈ Value Object:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Value Object ΠΈ DTO Π½Π΅ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ сторонним ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ POCO. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, POCO β€” это Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ понятиС: это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Value Object, Entity, DTO ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ класс Π² Ρ‚ΠΎΠΌ случаС Ссли ΠΎΠ½ Π½Π΅ наслСдуСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, Π½Π΅ относящимся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊ Ρ€Π΅ΡˆΠ°Π΅ΠΌΠΎΠΉ Π²Π°ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅.

Π’ΠΎΡ‚ свойства ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ POCO-класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ, ΠΈ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнной идСнтичности, Ρ‚.ΠΊ. ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Value Object, Ρ‚Π°ΠΊ ΠΈ Entity. Π’Π°ΠΊΠΆΠ΅, POCO ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя. Π­Ρ‚ΠΎ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, являСтся Π»ΠΈ POCO DTO.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

DTO Π² JS

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π° DTO (Data Transfer Object) являСтся Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΠΌ Π² соврСмСнной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π’ β€œΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠΌβ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ DTO ΡΠ²Π»ΡΡŽΡ‚ΡΡ простыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ (Π±Π΅Π· Π»ΠΎΠ³ΠΈΠΊΠΈ), ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… β€œΠΏΠΎ проводам” ΠΌΠ΅ΠΆΠ΄Ρƒ разнСсСнными процСссами (remote processes). Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π΄Π°Π½Π½Ρ‹Π΅ «ΠΏΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°ΠΌ» ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ JSON.

Если DTO ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ слоями прилоТСния (Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…, бизнСс-Π»ΠΎΠ³ΠΈΠΊΠ°, прСдставлСния), Ρ‚ΠΎ, ΠΏΠΎ Π€Π°ΡƒΠ»Π΅Ρ€Ρƒ, это называСтся LocalDTO. НСкоторыС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ самого Π€Π°ΡƒΠ»Π΅Ρ€Π°) Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ относятся ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ DTO. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ локального примСнСния DTO являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ структуры Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ слоя прилоТСния ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, DTO ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π°ΠΆΠ½Ρ‹ΠΌ классом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² прилоТСниях ΠΈ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΊΠ°ΠΆΡƒ JS-ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ для DTO (Π² Ρ€Π°ΠΌΠΊΠ°Ρ… стандартов ECMAScript 2015+).

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π² ΠΊΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Π° сама структура Π΄Π°Π½Π½Ρ‹Ρ…. Π›ΡƒΡ‡ΡˆΠ΅ всСго это Π΄Π΅Π»Π°Ρ‚ΡŒ с использованиСм классов (Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ JSDoc ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…):

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой структуры Π΄Π°Π½Π½Ρ‹Ρ…, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ являСтся ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠΌ. Если Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ сами ΡΠ²Π»ΡΡŽΡ‚ΡΡ структурами, Ρ‚ΠΎ класс выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, созданиС экзСмпляра DTO Π² ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ случаСв связано Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉΡΡ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ «ΠΏΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π°ΠΌ» с «Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ конструктор DTO ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ JS-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ пытаСтся ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π΅ΠΌΡƒ Π΄Π°Π½Π½Ρ‹Π΅:

Π’ конструкторС структуры со слоТными Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ конструкторы для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²:

Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ прСдставляСт ΠΈΠ· сСбя массив, Ρ‚ΠΎ Π² конструкторС Π΅Π³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ сохранСны Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ Π±Π΅Π· Ρ€Π°Π·Π±ΠΎΡ€Π°, Ρ‚ΠΎ это Ρ‚ΠΎΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (хотя ΠΊ DTO ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ΅ сСбС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅):

ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅

НапримСр, ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π‘Π”:

РСзюмС

Если ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ всС Ρ‚Ρ€ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… DTO (структура, конструктор, ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅), Ρ‚ΠΎ получаСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ es-ΠΌΠΎΠ΄ΡƒΠ»ΡŒ:

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ подструктуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΈΡ… структур (ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΎΡ‚ сСрвисов ΠΈ Ρ‚.ΠΏ.), нСпосрСдствСнно относящиСся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ контСксту, Π° IDE, Π·Π° счёт Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² этой подструктурС.

ПослСсловиС

Π§Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ»ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, двухступСнчатоС созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, значСния ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Π΅ΡˆΠ°ΡŽΡ‚ΡΡ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для создания экзСмпляров класса:

Π­Ρ‚ΠΎ ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ потрСблСния памяти ΠΏΡ€ΠΈ массовом создании экзСмпляров.

Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² DTO Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ…:

НавСрноС, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΠ² этого Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π° такая информация показалась ΠΈΠΌ излишнСй ΠΈ ΠΏΡ€ΠΈ нСобходимости Π΅Ρ‘ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Π½Π° ΠΌΠΎΠΉ взгляд, Π²ΠΏΠΎΠ»Π½Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠ΅ совпадСниС ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π² ΠΌΠΎΠ΅ΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ (структура, конструктор, ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅) с ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ (структура, конструктор). Π§Ρ‚ΠΎ касаСтся статичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ‚ΠΎ Safary Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 26-Π³ΠΎ апрСля этого Π³ΠΎΠ΄Π° Π½Π°ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ статику (хотя Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ эффСкта ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π·Π° счёт прямого пСрСноса ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² класс: ConfigEmail.initialize = function(obj)<> ).

КоллСга @nin-jin Π² своём ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ справСдливо Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π±Ρ‹ «ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΠ»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… сохранСниСм«. Π― ΠΌΠΎΠ³Ρƒ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌ (Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅). ΠšΡΡ‚Π°Ρ‚ΠΈ, Ρ‚Π°ΠΊ ΠΈ дСлаСтся Π² OpenAPI-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π΅:

Насколько я понял, функция Rec ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для создания простых Π΄Π°Ρ‚Π°-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π±Π΅Π· Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ) «Π½Π° Π»Π΅Ρ‚Ρƒ». Π’ ΠΎΠ±Ρ‰Π΅ΠΌ-Ρ‚ΠΎ это ΠΈ Π΅ΡΡ‚ΡŒ DTO, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° runtime, Π° Π½Π΅ уровня ΠΊΠΎΠ΄Π° (Ρ‚Π΅ ΠΆΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΌΠΎΡ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ программисту «ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ» мСста использования соотв. DTO ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… Π±Π΅Π· запуска прилоТСния).

Π­Ρ‚ΠΎΡ‚ Π°Π±Π·Π°Ρ† я вставил Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ сохранСнии ΠΎΠ½ пСрСнСсся Π² ΠΊΠΎΠ½Π΅Ρ† тСкста, Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Π±Π·Π°Ρ† стал ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Π’ΠΎΡ‚ такая Π·Π°Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π±Π°Π³Π° Π΅ΡΡ‚ΡŒ сСгодня Π½Π° Π₯Π°Π±Ρ€Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

НС самыС ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ совСты ΠΏΠΎ написанию DTO Π½Π° Java

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

БСгодня прилоТСния Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΠΌΠ΅ΡŽΡ‚ распрСдСлСнный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€. Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ сСрвисам Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ большС ΠΊΠΎΠ΄Π° β€” ΠΈ ΠΏΡ€ΠΈ этом ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ простым.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· внСшнСй слуТбы, ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (Data Transfer Object, DTO). Код, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ DTO, быстро услоТняСтся, Π½ΠΎ с этим ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ нСсколько совСтов. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ DTO, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π»Π΅Π³Ρ‡Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ написаниС ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Если ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… вмСстС β€” ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ сСбС Ρ€Π°Π±ΠΎΡ‚Ρƒ.

БСриализация DTO β€œΠΏΠΎ учСбнику”

НачнСм с Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ способа Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON. Π’ΠΎΡ‚ структура JSON. Π­Ρ‚ΠΎΡ‚ JSON прСдставляСт ΠΏΠΈΡ†Ρ†Ρƒ β€œΠ Π΅Π΄ΠΆΠΈΠ½Π°β€.

PizzaDto β€” «старый Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ Java-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β», POJO: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ со свойствами, Π³Π΅Ρ‚Ρ‚Π΅Ρ€Π°ΠΌΠΈ, сСттСрами ΠΈ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ. Он ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ структуру JSON, поэтому ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ JSON Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго ΠΎΠ΄Π½Ρƒ строку. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ этого с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Jackson:

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ простоС ΠΈ прямолинСйноС. Π’ Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°?

Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ DTO Π±Ρ‹Π²Π°ΡŽΡ‚ довольно слоТными. Код для создания ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DTO ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ дСсятков строк. Иногда большС. Π­Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ слоТный ΠΊΠΎΠ΄ содСрТит большС ошибок ΠΈ ΠΌΠ΅Π½Π΅Π΅ чувствитСлСн ΠΊ измСнСниям.

Моя пСрвая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ созданиС DTO β€” Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСизмСняСмым DTO: Ρ‚Π°ΠΊΠΈΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСльзя ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ послС создания.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ странным, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с этой ΠΈΠ΄Π΅Π΅ΠΉ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ сосрСдоточимся Π½Π° Π½Π΅ΠΉ ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ нСизмСняСмых DTO

Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ просто, Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСизмСняСмый, Ссли Π΅Π³ΠΎ состояниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ послС сборки.

Π£ нСизмСняСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅Ρ‚ сСттСра. ВсС Π΅Π³ΠΎ свойства β€” ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΏΡ€ΠΈ построСнии.

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠΈΡ†Ρ†Π° β€œΠ Π΅Π΄ΠΆΠΈΠ½Π°β€ Π±Π΅Π· Π³Ρ€ΠΈΠ±ΠΎΠ² β€” ΡƒΠΆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΏΠΈΡ†Ρ†Π° β€œΠ Π΅Π΄ΠΆΠΈΠ½Π°β€.

Если ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Π΅Π΅, Ρ‚ΠΎ Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ…, Π°Π²Ρ‚ΠΎΡ€ ΠΊΠ½ΠΈΠ³ΠΈ β€œJava: эффСктивноС программированиС”, Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΡŽ для создания нСизмСняСмых классов:

β€œΠ•ΡΠ»ΠΈ Π² вашСм классС Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° измСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ класса Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ссылки Π½Π° эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹β€. β€” Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ…

Если ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ свойство вашСго DTO являСтся измСняСмым, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‚Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ вашСго DTO ΠΈΠ·Π²Π½Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: начиная с Java 16, сущСствуСт Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ способ создания нСизмСняСмых классов Ρ‡Π΅Ρ€Π΅Π· записи.

Π₯ΠΎΡ€ΠΎΡˆΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ нСизмСняСмый DTO. Но ΠΊΠ°ΠΊ это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄?

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° нСизмСняСмости

ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ приносит ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств, Π½ΠΎ Π²ΠΎΡ‚ ΠΌΠΎΠ΅ любимоС: нСизмСняСмыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π’ этом Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ошибка:

ПослС выполнСния этого ΠΊΠΎΠ΄Π° ΠΏΠΈΡ†Ρ†Π° Π½Π΅ содСрТит ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ состояния. Какая строка Π²Ρ‹Π·Π²Π°Π»Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ?

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄Π²Π° ΠΎΡ‚Π²Π΅Ρ‚Π°: сначала с измСняСмой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Π·Π°Ρ‚Π΅ΠΌ с нСизмСняСмой.

Π‘ нСизмСняСмыми ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΠ° становится ΠΏΡ€ΠΎΡ‰Π΅. Но это Π΅Ρ‰Π΅ Π½Π΅ всС.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ pizza β€” нСизмСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, verify() Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ просто ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ ΠΏΠΈΡ†Ρ†Ρƒ, Π° клиСнтский ΠΊΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

Π’ этой Π½ΠΎΠ²ΠΎΠΉ вСрсии ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ verify() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠΈΡ†Ρ†Ρƒ. ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ понятным. Π•Π³ΠΎ становится Π»Π΅Π³Ρ‡Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ Π»Π΅Π³Ρ‡Π΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ.

Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСимущСства Π’ своСй ΠΊΠ½ΠΈΠ³Π΅ Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ… просто Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ β€œΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒβ€.

β€œΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ классы ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ измСняСмыС классы. Они ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ошибкам ΠΈ Π±ΠΎΠ»Π΅Π΅ бСзопасны”. β€” Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ…

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ интСрСсный вопрос: ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ с DTO?

НСизмСняСмыС DTO… А это осмыслСнно?

ЦСль DTO β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ инициализируСтся, Π° Π·Π°Ρ‚Π΅ΠΌ Π΅Π³ΠΎ состояниС Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. Π›ΠΈΠ±ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ сСриализован Π² JSON, Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ. Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ СстСствСнной. НСизмСняСмый DTO Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами с Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠ΅ΠΉ.

Как оказалось, это Π½Π΅ соотвСтствуСт истинС.

НСизмСняСмыС DTO с Jackson

Jackson β€” самая распространСнная JSON-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Java.

Когда Ρƒ DTO Π΅ΡΡ‚ΡŒ Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹ ΠΈ сСттСры, Jackson ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с JSON Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ настройки. Но с нСизмСняСмыми ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Jackson нуТдаСтся Π² нСбольшой ΠΏΠΎΠΌΠΎΡ‰ΠΈ. Π•ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Π’ΠΎΡ‚ ΠΈ всС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ нас Π΅ΡΡ‚ΡŒ нСизмСняСмый DTO, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Jackson ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² JSON ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

НСизмСняСмыС DTO с Gson ΠΈ Moshi

Π•ΡΡ‚ΡŒ Π΄Π²Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Jackson: Gson ΠΈ Moshi.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ JSON Π² нСизмСняСмый DTO, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.

Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ Jackson Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Gson ΠΈ Moshi?

Никакой ΠΌΠ°Π³ΠΈΠΈ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ, ΠΊΠΎΠ³Π΄Π° Gson ΠΈ Moshi Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ· JSON, ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Π΅Π³ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ отраТСния. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ΠΈ Π½Π΅ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ конструкторы.

Π― Π½Π΅ большой ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Он Π²Π²ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² конструктор ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ вызываСтся. По ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с этим, Jackson прСдставляСтся Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ бСзопасным.

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π£ Jackson Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ прСимущСство. Если ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² конструктор Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ всСгда, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, создан Π»ΠΈ DTO ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния ΠΈΠ»ΠΈ сгСнСрирован ΠΈΠ· JSON.

МоТно Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим прСимущСством для избСгания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ null ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ конструктор для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ с Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° поля ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ пустыми значСниями, ΠΊΠΎΠ³Π΄Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π²Π½Ρ‹ Π½ΡƒΠ»ΡŽ.

Π’Π°ΠΊ Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ мСньшС ΠΊΠΎΠ΄Π° ΠΈ повыситС Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ. Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅?

И послСднСС ΠΏΠΎ счСту, Π½ΠΎ Π½Π΅ ΠΏΠΎ ваТности: создавайтС DTO со строитСлями

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ совСт, ΠΊΠ°ΠΊ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ DTO. Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ DTO я создаю Builder. Он прСдоставляСт свободный API для облСгчСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DTO.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания PizzaDto Ρ‡Π΅Ρ€Π΅Π· сборщик:

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ слоТных DTO Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π­Ρ‚ΠΎΡ‚ шаблон Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ΅Π½, Ρ‡Ρ‚ΠΎ Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ… ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ с Π½Π΅Π³ΠΎ свою ΠΊΠ½ΠΈΠ³Ρƒ β€œJava: эффСктивноС программированиС”.

β€œΠ’Π°ΠΊΠΎΠΉ клиСнтский ΠΊΠΎΠ΄ Π»Π΅Π³ΠΊΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒβ€. β€” Π”ΠΆΠΎΡˆΡƒΠ° Π‘Π»ΠΎΡ…

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для PizzaDto :

НСкоторыС ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Lombok для создания конструкторов Π²ΠΎ врСмя компиляции. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ DTO.

Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ конструктора с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ»Π°Π³ΠΈΠ½Π° Builder generator IntelliJ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π°. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ становится Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ, Π° клиСнтский ΠΊΠΎΠ΄ β€” Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ΠΎΡ‚ основныС совСты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π΄Π΅Ρ€ΠΆΡƒ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΠΏΡ€ΠΈ написании DTO. Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ вмСстС, ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ ваш ΠΊΠΎΠ΄. Кодовая Π±Π°Π·Π° становится Π»Π΅Π³Ρ‡Π΅ для чтСния, ΠΏΡ€ΠΎΡ‰Π΅ Π² обслуТивании ΠΈ, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, Ρ‚Π°ΠΊ ΠΏΡ€ΠΎΡ‰Π΅ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Сю с вашСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΠ΅Ρ€Π΅ΠΎΡΠΌΡ‹ΡΠ»Π΅Π½ΠΈΠ΅ DTO Π² Java

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию Π»ΡŽΠ±ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ β€œRethinking the Java DTO” Π‘Ρ‚ΠΈΠ²Π΅Π½Π° Π£ΠΎΡ‚Π΅Ρ€ΠΌΠ°Π½Π°, Π³Π΄Π΅ Π°Π²Ρ‚ΠΎΡ€ рассматриваСт интСрСсный ΠΈ нСстандартный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ использованию DTO Π² Java.

Π― ΠΏΡ€ΠΎΠ²Π΅Π» 12 нСдСль Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ выпускников Scott Logic, работая с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ выпускниками Π½Π°Π΄ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. И Π±Ρ‹Π» ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ застопорил мСня большС Π΄Ρ€ΡƒΠ³ΠΈΡ…: структура ΠΈ ΡΡ‚ΠΈΠ»ΡŒ написания Π½Π°ΡˆΠΈΡ… DTO. Π­Ρ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΠΎ массу споров ΠΈ обсуТдСний Π½Π° протяТСнии всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π½ΠΎ Π² ΠΈΡ‚ΠΎΠ³Π΅ я понял, Ρ‡Ρ‚ΠΎ ΠΌΠ½Π΅ нравится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DTO.

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ являСтся СдинствСнно Π²Π΅Ρ€Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ ΠΎΠ½ довольно интСрСсный ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с использованиСм соврСмСнных IDE. НадСюсь, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ шок ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ Π²Π°ΠΌ ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ понравится.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ DTO (Data Transfer Object)?

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрных прилоТСниях, Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (слой прСдставлСния) ΠΈ Π½Π° сСрвСрС (слой ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области) ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. На сторонС сСрвСра это Π΄Π°Π΅Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡƒΠ³ΠΎΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ β€œuser-friendly” ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, ΠΈ, для сСрвСрной части, Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ способ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΠΌΡ‹ остановимся Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π² качСствС упрощСния. DTO-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ двумя слоями прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ….

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

DTO β€” это Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ value-object Π½Π° сторонС сСрвСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² слоС прСдставлСния. ΠœΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ DTO Π½Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈ запросС (Request) ΠΈ Π½Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π² качСствС ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра (Response). Π’ нашСм случаС, ΠΎΠ½ΠΈ автоматичСски ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ ΠΈ Π΄Π΅ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ Spring.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ endpoint ΠΈ DTO для запроса ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°:

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ DTO?

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ обязаны ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DTO. Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ ΠΈ ваш ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ.

Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слой прСдставлСния Π² Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Π²ΠΈΠ΄Π΅. МнС нравится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ DTO ΠΈ, я Π΄ΡƒΠΌΠ°ΡŽ, Π²Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, вСдь это ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ способствуСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ зацСплСния (decoupling) ΠΌΠ΅ΠΆΠ΄Ρƒ слоСм прСдставлСния ΠΈ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ слоСм, позволяя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ дальнСйшСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π΅ всС DTO ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠ΅ DTO ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ API согласно Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°ΠΌ ΠΈ Π² соотвСтствии с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ чистого ΠΊΠΎΠ΄Π°.

Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ API, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ согласовано. ОписаниС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ (endpoint) Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΈ ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π° всСх связанных Ρ‚ΠΎΡ‡ΠΊΠ°Ρ…. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ Π²Ρ‹ΡˆΠ΅ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°. Если ΠΏΠΎΠ»Π΅ price ΠΏΡ€ΠΈ запросС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠ°ΠΊ β€œΡ†Π΅Π½Π° с НДБ”, Ρ‚ΠΎ ΠΈ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ поля price Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ. БогласованноС API ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, ΠΈ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.

DTO Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌΠΈ ΠΈ ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² написании шаблонного ΠΊΠΎΠ΄Π°. Если ΠΏΡ€ΠΈ написании DTO Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ усилия, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вашС API ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ согласованным. DTO Π΄ΠΎΠ»ΠΆΠ½Ρ‹ β€œΠ»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡβ€, вСдь Π΄Π°ΠΆΠ΅ Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ описаниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· слоя прСдставлСния β€” ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ бСсполСзно, Ссли Π΅Π³ΠΎ тяТСло Π½Π°ΠΉΡ‚ΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ DTO, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π»ΠΈ ΠΎΠ½ΠΈ нашим трСбованиям.

ПокаТи нам код!

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ довольно странным, Π½ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅. Π’ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части поста я объясню ΠΏΠΎΡ‡Π΅ΠΌΡƒ я остановился Π½Π° Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ прСимущСства ΠΎΠ½Π° Π΄Π°Π΅Ρ‚. НадСюсь, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ станСт всё понятно ΠΈ Π²Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Он частично основываСтся Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΠ· нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° для выпускников, ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² контСкст ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π°. Π’ Π½Ρ‘ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Ρ€ΠΎΠ·Π½ΠΈΡ‡Π½ΡƒΡŽ ΠΈ ΠΎΠΏΡ‚ΠΎΠ²ΡƒΡŽ Ρ†Π΅Π½Ρƒ. Для хранСния Ρ†Π΅Π½Ρ‹ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Double, Π½ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ BigDecimal.

ΠœΡ‹ создаСм ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ enum Π±Π΅Π· Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π² нашСм случаС это ProductDTO. Π’Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ, ΠΌΡ‹ раздСляСм DTO Π½Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ относятся ΠΊ запросам (Request) ΠΈ Π½Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ относятся ΠΊ ΠΎΡ‚Π²Π΅Ρ‚Ρƒ (Response). На ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ endpoint ΠΌΡ‹ создаСм ΠΏΠΎ Request DTO ΠΈ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Response DTO сколько Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’ нашСм случаС Ρƒ нас Π΄Π²Π° Response DTO, Π³Π΄Π΅ Public Ρ…Ρ€Π°Π½ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ для любого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Private ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ содСрТит ΠΎΠΏΡ‚ΠΎΠ²ΡƒΡŽ Ρ†Π΅Π½Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΡ‹ создаСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ интСрфСйс содСрТит ΠΎΠ΄ΠΈΠ½-СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ β€” Π³Π΅Ρ‚Ρ‚Π΅Ρ€ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ опрСдСляСт. Π›ΡŽΠ±Π°Ρ валидация осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ интСрфСйса. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, аннотация @NotBlank провСряСт Ρ‡Ρ‚ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π² DTO Π½Π΅ содСрТит ΠΏΡƒΡΡ‚ΡƒΡŽ строку.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поля ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² DTO ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ интСрфСйс. Π’ нашСм случаС аннотация @Value ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Lombok Π΄Π΅Π»Π°Π΅Ρ‚ это Π·Π° нас, автоматичСски гСнСрируя Π³Π΅Ρ‚Ρ‚Π΅Ρ€Ρ‹.

Для ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ сравнСния, с использованиСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎ ΠΈ послС. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это нСбольшиС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° становится Π±ΠΎΠ»Π΅Π΅ наглядной ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ большС DTO.

β€œΠ­Ρ‚ΠΎ уТасно!”

Π­Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ выглядит странно ΠΈ здСсь ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ обсудим нСсколько ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ слишком ΠΌΠ½ΠΎΠ³ΠΎ интСрфСйсов β€” ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€! ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ считаСм Π΄Π°Π½Π½Ρ‹Π΅ интСрфСйсы СдинствСнным источником ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½ опрСдСляСт. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± этом Ρ‡ΡƒΡ‚ΡŒ большС, Π½ΠΎ ΠΏΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΌΠ½Π΅, это принСсСт свои ΠΏΠ»ΠΎΠ΄Ρ‹.

ΠœΡ‹ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйсов. Π”Π°, выглядит Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ странно ΠΈ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅. БСйчас ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Π³Π΅Ρ‚Ρ‚Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Lombok для закрытия ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΈ это нСбольшой Ρ…Π°ΠΊ. ВыглядСло Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ поля сразу Π² интСрфСйсС, Ρ‡Ρ‚ΠΎ позволяло Π±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ DTO Π² ΠΎΠ΄Π½ΠΎΠΉ строчкС ΠΊΠΎΠ΄Π°. Однако, Π² java Π½Π΅Ρ‚ возмоТности интСрфСйсам ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ статичСскиС поля. Если Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ.

Π­Ρ‚ΠΎ (ΠΏΠΎΡ‡Ρ‚ΠΈ) идСально

Π”Π°Π²Π°ΠΉΡ‚Π΅ вСрнСмся ΠΊ нашим трСбованиям ΠΊ созданию Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ DTO. БоотвСствуСт Π»ΠΈ ΠΈΠΌ наш ΠΏΠΎΠ΄Ρ…ΠΎΠ΄?

Богласованный синтаксис

ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ синтаксиса ΠΈ это Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ API ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ свой синтаксис, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· интСрфСйс. Если DTO содСрТит ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΡƒ Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈΠ»ΠΈ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ β€” ΠΊΠΎΠ΄ просто Π½Π΅ скомпилируСтся ΠΈ IDE выдаст Π²Π°ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ интСрфСйса, ΠΌΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ endpoint ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΅Ρ‘ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ.

Богласованная сСмантика

Π’Π°ΠΊΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ написания DTO ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· наслСдованиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ свою сСмантику которая ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Π³Π΅Ρ‚Ρ‚Π΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ интСрфСйса. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² DTO ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ интСрфСйс, наша докумСнтация автоматичСски стала доступна Ρ‡Π΅Ρ€Π΅Π· Π³Π΅Ρ‚Ρ‚Π΅Ρ€.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π²ΠΎ всСх DTO, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ интСрфСйс. Π’ Ρ€Π΅Π΄ΠΊΠΈΡ… случаях, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ API, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ Ρ€Π°Π·Π½ΠΎΠΉ сСмантикой, Π²Π°ΠΌ придСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс. Π₯ΠΎΡ‚ΡŒ это ΠΈ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ заставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… ситуациях, Π° Π±ΡƒΠ΄ΡƒΡ‰ΠΈΠΌ читатСлям этого ΠΊΠΎΠ΄Π° ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ схоТими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

Π§ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ & ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒ

Π‘ΡƒΠ΄Π΅ΠΌ чСстны: Π² нашСм ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ достаточно ΠΌΠ½ΠΎΠ³ΠΎ шаблонного ΠΊΠΎΠ΄Π°. Π£ нас Π΅ΡΡ‚ΡŒ 4 интСрфСйса, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ DTO ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ строку с пСрСчислСниСм интСрфСйсов. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ вынСсти интСрфСйсы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΠΈΡˆΠ½ΠΈΡ… β€œΡˆΡƒΠΌΠΎΠ²β€ Π² ΠΊΠΎΠ΄Π΅ c описаниСм DTO. Но Π΄Π°ΠΆΠ΅ послС этого, Π±ΠΎΠΉΠ»Π΅Ρ€ΠΏΠ»Π΅ΠΉΡ‚ остаСтся Π³Π»Π°Π²Π½Ρ‹ΠΌ нСдостатком Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ вСской ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ. Для мСня, эти Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ всС Π΅Ρ‰Π΅ стоят Ρ‚ΠΎΠ³ΠΎ.

К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ всю структуру Π½Π°ΡˆΠΈΡ… DTO классов. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΠΊΠΎΠ΄ ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ всС Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΈΠ· сигнатуры класса. КаТдоС ΠΏΠΎΠ»Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² спискС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… интСрфСйсов. Достаточно Π½Π°ΠΆΠ°Ρ‚ΡŒ ctrl + q Π² IntelliJ ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ список ΠΏΠΎΠ»Π΅ΠΉ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ dto Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’ нашСм ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ пишСм Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Π΅Π΄ΠΈΠ½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎ, Ρ‚.ΠΊ. ΠΎΠ½Π° рСализуСтся Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйса. Π‘ΠΎΠ·Π΄Π°Π»ΠΈ Π½ΠΎΠ²ΠΎΠ΅ DTO β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ Π² ΠΏΠΎΠ΄Π°Ρ€ΠΎΠΊ, послС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса.

И Π² Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ, благодаря нашим интСрфСйсам, ΠΌΡ‹ способны ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, рассмотрим ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π°Ρ†Π΅Π½ΠΊΡƒ Π½Π° Ρ‚ΠΎΠ²Π°Ρ€:

Π’ java, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅:

Π’Ρ‹Π²ΠΎΠ΄

Π― Π½Π΅ ΠΆΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ сразу ΠΆΠ΅ ΠΏΠΎΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС ваши DTO. Но Π΅ΡΡ‚ΡŒ нСсколько Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ для сСбя:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² PHP. Data Transfer Object. ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Laravel

Π’ основС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π»Π΅ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ΠŸΠΎΡ‡Ρ‚ΠΈ каТдая Π·Π°Π΄Π°Ρ‡Π° прилоТСния ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π»ΡŽΠ±Ρ‹ΠΌ способом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ бизнСс.

Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΈ сами это Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ: Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Π½Π΅ с создания ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ², Π° с создания ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Laravel. ΠšΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡ‚ создания ERDs ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ для ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Волько ΠΊΠΎΠ³Π΄Π° это ясно, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с вашими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² структурированном Π²ΠΈΠ΄Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π² вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ этих Π΄Π°Π½Π½Ρ‹Ρ… прСдсказуСмым ΠΈ бСзопасным способом.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ сСйчас Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΎ модСлях, Π½ΠΎ это Π½Π΅ совсСм Ρ‚Π°ΠΊ. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ нСсколько шагов Π½Π°Π·Π°Π΄.

ВСория Ρ‚ΠΈΠΏΠΎΠ²

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… (DTO) Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ знания ΠΎ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΠΌ нСсколько Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я объясню, ΠΊΠ°ΠΊ я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π‘ΠΈΠ»Π° Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ – сильная ΠΈΠ»ΠΈ слабая типизация – опрСдСляСт, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ пСрСмСнная ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свой Ρ‚ΠΈΠΏ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°.

PHP – это слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык:

PHP ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π°Π±ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ. Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ языком, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² основном Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с HTTP-запросом, практичСски всС являСтся строкой.

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ систСма Ρ‚ΠΈΠΏΠΎΠ² PHP слаба. Подсказки Ρ‚ΠΈΠΏΠ° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π±Π΅Π· Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ любого Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ эта пСрСмСнная.

Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», PHP ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π°Π±ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ строка. Однако Ρƒ сильной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ интСрСсноС свойство: Π΄Π°Π½Π½Ρ‹Π΅ приходят с гарантиями качСства Π΄Π°Π½Π½Ρ‹Ρ…. Если пСрСмСнная ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ измСняСтся, Ρ‚ΠΎ Ρ†Π΅Π»Ρ‹ΠΉ ряд Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… дСйствий просто большС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ.

Π’ΠΈΠ΄ΠΈΡ‚Π΅ Π»ΠΈ, матСматичСски Π΄ΠΎΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎ, Ρ‡Ρ‚ΠΎ Ссли строго типизированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° компилируСтся, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π» Ρ†Π΅Π»Ρ‹ΠΉ ряд ошибок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² слабо Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, сильная типизация Π΄Π°Π΅Ρ‚ программисту Π»ΡƒΡ‡ΡˆΡƒΡŽ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Π΄Π΅Ρ‚ сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½.

Π’ качСствС примСчания: это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ошибок! Π’Ρ‹ прСкрасно ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π³Π»ΡŽΡ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Но ΠΊΠΎΠ³Π΄Π° строго типизированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ компилируСтся, Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ошибок Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

БтатичСскиС ΠΈ динамичСскиС Ρ‚ΠΈΠΏΡ‹

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° концСпция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ: статичСскиС ΠΈ динамичСскиС Ρ‚ΠΈΠΏΡ‹. И ΠΈΠΌΠ΅Π½Π½ΠΎ здСсь всС Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ интСрСсным.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, это ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… сторон PHP: просто написал скрипт, ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» страницу ΠΈ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π­Ρ‚ΠΎ большая Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с языком, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ скомпилирован, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ это, поэтому ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ являСтся Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½Ρ‹ΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ. Однако этого достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΡƒΡ‚ΡŒ дальшС.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π΅ΡΡ‚ΡŒ ΠΈ обратная сторона: ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ PHP провСряСт свои Ρ‚ΠΈΠΏΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²ΠΎ врСмя выполнСния, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ ΠΏΡ€ΠΈ запускС. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ чСткая ошибка для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π½ΠΎ всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Π»Π° ΠΊΡ€Π°Ρ….

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎ врСмя выполнСния Π΄Π΅Π»Π°Π΅Ρ‚ PHP динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком. ΠŸΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ всСх Ρ‚ΠΈΠΏΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΈ компиляции.

Π­Ρ‚ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ довольно ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ вашСм ΠΊΠΎΠ΄Π΅, Π±Π΅Π· нСобходимости Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, IDE, такая ΠΊΠ°ΠΊ PhpStorm, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство встроСнных статичСских ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

ИмСя Π² Π²ΠΈΠ΄Ρƒ всю эту ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ядру нашСго прилоТСния: Π΄Π°Π½Π½Ρ‹ΠΌ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ нСструктурированных Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π»ΠΈ Π²Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с β€œΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ данных”, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° самом Π΄Π΅Π»Π΅ Π±Ρ‹Π» большС, Ρ‡Π΅ΠΌ просто список? Π’Ρ‹ использовали ΠΊΠ»ΡŽΡ‡ΠΈ массива Π² качСствС ΠΏΠΎΠ»Π΅ΠΉ? И Π²Ρ‹ чувствовали боль ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ Π·Π½Π°Π»ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π² этом массивС? НС Π±ΡƒΠ΄ΡƒΡ‡ΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΌ Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊΠΈΠΌΠΈ Π²Ρ‹ ΠΈΡ… ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ поля доступны?

Π”Π°Π²Π°ΠΉΡ‚Π΅ прСдставим сСбС, ΠΎ Ρ‡Π΅ΠΌ я Π³ΠΎΠ²ΠΎΡ€ΡŽ: Ρ€Π°Π±ΠΎΡ‚Π° с запросами Laravel. Рассмотрим этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ CRUD для обновлСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ находится Π² этой свалкС:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС Π½Π° ΠΌΠΈΠ½ΡƒΡ‚Ρƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π°Π΄ этим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΈ Ρ‡Ρ‚ΠΎ ваш ΠΊΠΎΠ»Π»Π΅Π³Π° написал этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΏΡΡ‚ΡŒ мСсяцСв Π½Π°Π·Π°Π΄: я ΠΌΠΎΠ³Ρƒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, с ΠΊΠ°ΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅, Π½Π΅ дСлая Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ, пСрСчислСнных Π²Ρ‹ΡˆΠ΅.

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ систСмы Π² сочСтании со статичСским Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ большим ΠΏΠΎΠ΄ΡΠΏΠΎΡ€ΡŒΠ΅ΠΌ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, с Ρ‡Π΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ. Π’Π°ΠΊΠΈΠ΅ языки, ΠΊΠ°ΠΊ Rust, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅ΡˆΠ°ΡŽΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ просто:

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ! К соТалСнию, PHP Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ структур. Но Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ массивы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достаточно для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ нашСй ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹:

Π’ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ свойства доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с PHP 7.4. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… β€” Ρƒ мСня Π΅ΡΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для вас ΠΏΠΎΠ·ΠΆΠ΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ.

Для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PHP 7.4 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

БтатичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€, встроСнный Π² Π²Π°ΡˆΡƒ IDE, всСгда смоТСт ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π½Π°ΠΌ, с ΠΊΠ°ΠΊΠΈΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ.

Π­Ρ‚ΠΎΡ‚ шаблон ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ нСструктурированных Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΈΠΏΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наши Π΄Π°Π½Π½Ρ‹Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ способом, называСтся β€œΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ данных” ΠΈΠ»ΠΈ DTO (Data Transfer Object). Π­Ρ‚ΠΎΡ‚ шаблон я Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… большСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Для срСдних ΠΈ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹ΠΉ шаблон Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π΅Π½.

ΠžΠ±ΡΡƒΠΆΠ΄Π°Ρ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ, Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ ΠΈΠ»ΠΈ Π² сообщСствС Laravel, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с людьми, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ сильной Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. На самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΈ ΡΠ»Π°Π±ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ PHP. И Ρ‚ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π² своС ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΈΠ΅.

По ΠΌΠΎΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΡ‚ΡŒ большС прСимущСств Π² строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠ³ΠΎ количСства Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ³Π½ΠΈΡ‚ΠΈΠ²Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. Π’Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ своСго ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ хотят Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ находится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ прямо ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ: создании прилоТСния.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, использованиС DTO ΠΈΠΌΠ΅Π΅Ρ‚ свою Ρ†Π΅Π½Ρƒ: ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ этих классов; Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запрос Π΄Π°Π½Π½Ρ‹Ρ… с DTO.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° использования DTO ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅ΡˆΠΈΠ²Π°ΡŽΡ‚. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ потСряСтС, написав этот ΠΊΠΎΠ΄, Π²Ρ‹ компСнсируСтС Π΅Π³ΠΎ Π² долгосрочной пСрспСктивС.

Однако вопрос ΠΎ построСнии DTO ΠΈΠ· β€œΠ²Π½Π΅ΡˆΠ½ΠΈΡ…β€ Π΄Π°Π½Π½Ρ‹Ρ… всС Π΅Ρ‰Π΅ нуТдаСтся Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅.

Π€Π°Π±Ρ€ΠΈΠΊΠΈ DTO

Как ΠΌΡ‹ строим DTO? Π― подСлюсь с Π²Π°ΠΌΠΈ двумя возмоТностями, Π° Ρ‚Π°ΠΊΠΆΠ΅ объясню, какая ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΅ Π»ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ-самый ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ: использованиС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.

НаличиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ сохраняСт ваш ΠΊΠΎΠ΄ чистым Π½Π° протяТСнии всСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. Π­Ρ‚Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΆΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ слоС.

Π§Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅? Ну, Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…: ΠΎΠ½ добавляСт ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΡƒΡŽ для прилоТСния Π»ΠΎΠ³ΠΈΠΊΡƒ Π² Π΄ΠΎΠΌΠ΅Π½. DTO, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΠΈΠ²Π΅Ρ‚ Π² Π΄ΠΎΠΌΠ΅Π½Π΅, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ ΠΎ CustomerRequest классС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΠΈΠ²Π΅Ρ‚ Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ слоС.

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ смСшиваниС ΠΊΠΎΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ прилоТСния Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄ΠΎΠΌΠ΅Π½Π°-Π½Π΅ самая Π»ΡƒΡ‡ΡˆΠ°Ρ идСя. Однако Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅. На Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΈ это Π±ΠΎΠ»Π΅Π΅ ваТная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°; я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· собствСнных ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ PHP: ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π’ΠΈΠ΄ΠΈΡ‚Π΅ Π»ΠΈ, Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши DTO Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΈΠΌΠ΅Π»ΠΈ конструктор с ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ свойства: это Π½Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ ΠΈ ΠΎΡ‡Π΅Π½ΡŒ сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со свойствами nullable ΠΈΠ»ΠΈ default-value. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ я ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ массива Π² DTO, ΠΈ ΠΏΡƒΡΡ‚ΡŒ ΠΎΠ½ строит сСбя Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ… Π² этом массивС.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, статичСский Π°Π½Π°Π»ΠΈΠ· Ρ‚Π°ΠΊΠΆΠ΅ нСдоступСн, Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ΡΡŒ Π² Π½Π΅Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΏΡ€ΠΈ построСнии DTO. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ это β€œΠΏΡ€Π΅Π±Ρ‹Π²Π°Π½ΠΈΠ΅ Π² тСмнотС” Π² классС DTO, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… мыслСй ΠΈΠ·Π²Π½Π΅.

Если Π±Ρ‹ PHP ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², я Π±Ρ‹ использовал Ρ‚Π°ΠΊΠΎΠΉ шаблон:

Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° PHP Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΡ‚ это, я Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π» прагматичСскоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ тСорСтичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ. Но это зависит ΠΎΡ‚ тСбя. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π»ΡƒΡ‡ΡˆΠ΅ всСго.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ свойствам

Как я ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ€Π°Π½Π΅Π΅, сущСствуСт Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° использованию Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… свойств для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ DTO: docblocks. ΠŸΠ°ΠΊΠ΅Ρ‚ DTO ΠΎΡ‚ Spatie, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ примСняли, Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ….

Однако ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ docblocks Π½Π΅ Π΄Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ относятся ΠΊ Ρ‚ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ говорят. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, PHP ΠΈΠΌΠ΅Π΅Ρ‚ свой API рСфлСксии, ΠΈ с Π½ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС.

РСшСниС, прСдоставляСмоС этим ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ систСмы Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ PHP. Если Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PHP 7.4 ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС увСрСнности Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ваши Ρ‚ΠΈΠΏΡ‹ docblock Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°ΡŽΡ‚ΡΡ, этот ΠΏΠ°ΠΊΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Π»Π΅ΠΆΠ°Ρ‚ Π² основС ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых Π²Π°ΠΆΠ½Ρ‹Ρ… ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ². ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π²Π°ΠΌ способ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ структурированным, бСзопасным ΠΈ прСдсказуСмым способом.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *