ValueObject
(рдпрд╛ рдХреЗрд╕ рдХреНрд▓рд╛рд╕реЗрд╕) рдХреЛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рд╕реА рднреА рдЗрдХрд╛рдИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ
case class Person(name: String, address: Address)
рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рдЗрд╕ рддрд░реАрдХреЗ рдореЗрдВ рджреЛрдиреЛрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЧреБрдг рд╣реИрдВ:
- рдЬрд╝реЛрд░ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдПрдХреНрд╕реЗрд╕
- рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрд╛рдБрдзрдиреЗ рдХреА рдХреНрд╖рдорддрд╛,
рд╕рд╛рде рд╣реА рдХреБрдЫ рдиреБрдХрд╕рд╛рди:
- рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЛрдб (рдХреЙрдкреА-рдкреЗрд╕реНрдЯ) рдХреА рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ;
- рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдо рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рддреЛрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдЗрд╕ рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдиреЛрдЯреЗрд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╕реАрдорд┐рдд рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ;
- рдпрджрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдкрд░ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдмрдирд╛рдИ рдЧрдИ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ;
- рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп (рдбреЗрд▓реНрдЯрд╛) рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рд╣рдо рдПрдХ рдРрд╕реА рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдирдИ "рдХрдХреНрд╖рд╛рдПрдВ" (рдкреНрд░рдХрд╛рд░, рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛, рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА "рдИрдВрдЯреЛрдВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рд╕реЗ, рдЗрд╕ рддрдереНрдп рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдЦреБрдж "рдИрдВрдЯ" рдмрдирд╛рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧреА рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдФрд░ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ);
- рдЬреЛрд░рджрд╛рд░ рддрд░реАрдХреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде);
- рдШреЛрд╖рд┐рдд рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдХрд╛рдИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдВрд╢рд┐рдХ / рдЕрдзреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рдирд╛;
- рдПрдХ рдЗрдХрд╛рдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдВрд╢рд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпреБрдХреНрдд рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВред рдФрд░ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ (рд╡рд░реНрдЧ, рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░, рдЖрджрд┐) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдордореВрд▓реНрдп рдкрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдПрдХ рдирдП рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк
Person
рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рдШрдЯрдХреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
- рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ / рд╕реНрд▓реЙрдЯреНрд╕ (рд╕реНрд▓реЙрдЯ рдЕрдиреБрдХреНрд░рдо) рдХреА рдЖрджреЗрд╢рд┐рдд рд╕реВрдЪреА,
- рд╕рдВрдкрддреНрддрд┐ / рд╕реНрд▓реЙрдЯ рдирд╛рдо (рд╕реНрд▓реЙрдЯ рдЖрдИрдбреА),
- рд╕рдВрдкрддреНрддрд┐ / рд╕реНрд▓реЙрдЯ рдкреНрд░рдХрд╛рд░ред
Person
рд╡рд░реНрдЧ рдФрд░ рдЙрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ -
- рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкреНрд░реЙрдкрд░реНрдЯреА рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (example.name)
- рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рдЪреВрдВрдХрд┐
Person
рд╡рд░реНрдЧ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ, рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд╛рджреГрд╢реНрдп рдПрдХ рд╡рд╕реНрддреБ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓ рд░рд╣рд╛ рд╣реИ)
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдкреНрд░рдердо рд╢реНрд░реЗрдгреА" рдХрд╛ рд╕рд╛рд░
Person
рд╡рд░реНрдЧ
Person
, рдФрд░ рдЗрд╕рдХреЗ рдЧреБрдг "рджреНрд╡рд┐рддреАрдп рд╢реНрд░реЗрдгреА" рдХрд╛ рд╕рд╛рд░ рд╣реИрдВред рд╡реЗ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣рдо "рдкреНрд░рдердо рд╢реНрд░реЗрдгреА" рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдирдП "рд╡рд░реНрдЧ" рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП,
name
рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
trait SlotId[T] case class SlotIdImpl[T](slotId:String, ...) extends SlotId[T] def slot[T](slotId:String, ...) = SlotIdImpl[T](slotId, ...) val name = slot[String]("name", ...)
рдЗрд╕ рддрд░рд╣ рдХреА рдШреЛрд╖рдгрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЦреБрдж рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореЗрдЯрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдмрд╛рд╣рд░реА рдорд╛рдирдЪрд┐рддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдЗрд╕реЗ рд╕реАрдзреЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреБрдЫ рд╕рд░рд▓реАрдХреГрдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рд╕реНрд▓реЙрдЯ рдХреНрд░рдо
рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдСрд░реНрдбрд░ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдХрдИ рдЧреБрдг рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реЛрдВ рд╕реЗ рдмрдирд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬреИрд╕реЗ рдХрд┐ HList рдкреНрд░рдХрд╛рд░ (рдЕрджреНрднреБрдд рдЖрдХрд╛рд░рд╣реАрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред
sealed trait SlotSeq { type ValueType <: HList } case object SNil extends SlotSeq { type ValueType = HNil } case class ::[H<:SlotId, T<:SlotSeq](head:H, tail : T) extends SlotSeq { type ValueType = H :: T#ValueType }
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рдЧреБрдгреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди (
ValueType
) рднреА
ValueType
рд╣реИрдВред
рд╕рдВрдкрддреНрддрд┐ рд╕рдореВрд╣рди
рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд╕ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдХрд░ред рд╣рд╛рд▓рд╛рдВрдХрд┐, "рд╕рдореВрд╣реЛрдВ" рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ - рдПрдХ рд╣реА рд╡рд░реНрдЧ / рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдгреЛрдВ рдХреЗ рд╕реЗрдЯред
object PersonType { val name = slot[String]("name", ...) val address ... ... }
рдпрд╣ рд╕рдореВрд╣реАрдХрд░рдг рд▓рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ "рдХреНрд▓рд╕реНрдЯрд░реНрд╕" рдореЗрдВ рд╕рдорд╛рди рдЧреБрдгреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
trait Identifiable { val id = slot[Long]("id") } object Employee extends Identifiable
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдХреНрд▓рд╕реНрдЯрд░" рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рдореЗрдЯрд╛-рд╕реВрдЪрдирд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрд╡рд░рд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдореЗрдЯрд╛-рд╕реВрдЪрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдмрджрд▓реЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐
рджрд░рдЕрд╕рд▓, рдПрдХ рдЗрдХрд╛рдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдбреЗрдЯрд╛ рдХреЛ рджреЛ рдореБрдЦреНрдп рд░реВрдкреЛрдВ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
Map
рдпрд╛
RecordSet
ред
Map
- рдореЗрдВ рд╕рдВрдкрддреНрддрд┐-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрдмрдХрд┐
RecordSet
рдореЗрдВ рдЧреБрдгреЛрдВ рдХреА рдПрдХ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдФрд░ рд╕рдорд╛рди рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред
RecordSet
рдЖрдкрдХреЛ рдЖрд░реНрдерд┐рдХ рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░
Map
рдЖрдкрдХреЛ "рд╕реНрд╡рдпрдВ рдореЗрдВ рдПрдХ рдЪреАрдЬрд╝" рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдПрдХ рдЕрд▓рдЧ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред рдЗрди рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЛ рд╡рд░реНрддрдорд╛рди рдЬрд░реВрд░рддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
RecordSet
рдХреЗ рддрд╛рд░ рдХреЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрджреНрднреБрдд
HList
рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЖрдХрд╛рд░рд╣реАрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕реБрд╕рдВрдЧрдд
HList
рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрд░реНрдбрд░ рдХрд┐рдП рдЧрдП рд╕реНрд▓реЙрдЯ рдЕрдиреБрдХреНрд░рдо рдХреЛ
HList
ред
type ValueType = head.Type :: tail.ValueType
рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛
Map
рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП
Map
рд╣рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп
Entry
рдХреНрд▓рд╛рд╕ рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реЗ
SlotValue
рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛,
case class SlotValue[T](slot:SlotId[T], value:T)
рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рд╕рдВрдЧрдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред
Map
рд╕реНрд╡рдпрдВ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╕рд░рд▓рддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк
SlotValue
рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдирд┐рдпрдорд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреБрдирд┐рдпрд╛рджреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдЙрдкрдпреЛрдЧреА рд╣реЛрддреЗ рд╣реИрдВред
-
Map
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдХреНрд░рдорд┐рдХ рдирд┐рд░реНрдорд╛рдг (рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛MapBuilder
); - рд╕рдВрд▓рдЧреНрди рдЧреБрдгреЛрдВ рдХреА рдкрд╣реБрдВрдЪ рдФрд░ рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рд▓реЗрдВрд╕;
-
Map
рд░реВрдкрд╛рдВрддрд░рдг -RecordSet
рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд
рдРрд╕реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╖рдо рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
- рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ:
- рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ред
рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдХрд╛рд░рдг, рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рднреА рдкрд╣рд▓реБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рд╡рд░реНрдгрд┐рдд рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб ред
UPD: рд╡рд┐рд╖рдп рдХреА рдирд┐рд░рдВрддрд░рддрд╛: рдЕрдзреВрд░реЗ рдбреЗрдЯрд╛ рдХреЗ рдХрдбрд╝рд╛рдИ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡