рдбреЗрд╡рд▓рдкрд░ рдХреБрдХрдмреБрдХ: рдбреАрдбреАрдбреА рд░реЗрд╕рд┐рдкреА (рднрд╛рдЧ 4, рд╕рдВрд░рдЪрдирд╛рдПрдВ)

рдкрд░рд┐рдЪрдп


рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреБрдВрдЬрд╛рдЗрд╢ , рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рд▓рд┐рдПред рдореИрдВ рдРрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ - рд╕реЗрд╡рд╛ рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрдкрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкреИрдЯрд░реНрди - ValueObject рдФрд░ Entity рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ ред рд╣рдо рдорд╛рдгрд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЖрдЧреЗ рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рд╣рдо рд╡рд┐рдпрд░реЗрдмрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдкреИрдЯрд░реНрдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд┐рдХрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред


рдмреНрд▓реЗрдХрдЬреИрдХ рдФрд░ рд╣реЙрдХрд░реНрд╕


рдФрд░ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдЙрдкрдпреБрдХреНрдд рдирд╛рдо рдЪреБрди рд▓рд┐рдпрд╛ рд╣реИ - рд▓реВрдирд╛рдкрд╛рд░реНрдХ ред
рд╡рд░реНрддрдорд╛рди рдШрдЯрдирд╛рдХреНрд░рдо рдЧрд┐рддреБрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ ред
рд╕рднреА рдЯреЗрдореНрдкреНрд▓реЗрдЯреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдорд╛рдЗрдХреНрд░реЛ-рд╕рд░реНрд╡рд┐рд╕ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗред


рдЗрд╕рд▓рд┐рдП рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ


рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдПрдХ рдЬрдЯрд┐рд▓ рдЙрджреНрдпрдо рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдорд╛рдгрд┐рдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдПрдХ рддреИрдпрд╛рд░ рдЯреАрдо рдереАред рдбреЛрдореЗрди рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд┐рдХрд╛рд╕ рдкрджреНрдзрддрд┐ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рдереА, рд▓реЗрдХрд┐рди рдкреНрд░рдпреБрдХреНрдд рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рдЯрд░реНрдирдХреА рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдерд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рднрд╛рд╖рд╛ рдХреА рдкрд╕рдВрдж рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реА рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЧрдИ рдереА, рдпрд╣ рдХрд╛рдлреА рд╕рдлрд▓ рд░рд╣реАред рдЙрди рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВ, рдорд╛рдгрд┐рдХ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХред рдпрд╣ рдХреЗрд╡рд▓ рдореЗрд░реА рд░рд╛рдп рдирд╣реАрдВ рд╣реИред


рд╡рд╣ рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рд╣реИред рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд░реВрдмреА рдЬреИрд╕реЗ рдирдП-рдирдП рдХреЙрдорд░реНрд╕ рд╣реИрдВред рд░реВрдмреА рдХреЗ рдкрд╛рд╕ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░ рдпрд╣ рдбреАрдбреАрдбреА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рднрд╛рд╖рд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЙрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИ)ред рд░реЗрд▓реЛрдВ рдиреЗ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣ рдкреИрджрд╛ рдХрд┐рдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдВрддрддрдГ рд╡реЗрдм рдпреВрдЖрдИ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреВрдЖрдИ 1990 рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рдордп рдореЗрдВ рд╡реЗрдм рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рдереЗред рдЕрднреА, рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдкреАрдЫреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЛрдореЗрди рд╕рдореГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдЕрддреАрдд рдореЗрдВ рднреА рджрд░реНрджрдирд╛рдХ рд░реВрдк рд╕реЗ рдХрдард┐рди рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореЗрд░реА рдЙрдореНрдореАрдж рдпрд╣ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЗ UI рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрд╛рдЧ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЛрдЧ рдЗрд╕реЗ рдбреЛрдореЗрди рдкрд░ рдЕрдкрдирд╛ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред рдЕрдЧрд░ рд░реВрдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╣реЛрдиреЗ рд▓рдЧрд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ DDD рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдордВрдЪ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред (рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪреЗ рдХреЗ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд╢рд╛рдпрдж рднрд░рдирд╛ рд╣реЛрдЧрд╛ред)

рдПрд░рд┐рдХ рдЗрд╡рд╛рдВрд╕ 2006

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдкрд┐рдЫрд▓реЗ 13 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рднрдпрд╛рдирдХ рджрд┐рдЦрддреЗ рд╣реИрдВред рд░реЗрд▓ рдврд╛рдВрдЪрд╛ рднрд╛рд░реА, рдзреАрдорд╛ рдФрд░ рдареЛрд╕ рдирд╣реАрдВ рд╣реИред ActiveRecord рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреИрдЯрд░реНрди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдХреИрд╕реЗ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдмрд┐рдирд╛ рдЖрдБрд╕реВ рдХреЗ рджреЗрдЦрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╣рдордиреЗ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдлреНрд░рд╛рдорд╡рд░реНрдХ рдХреЛ рдЕрдкрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╣рдордиреЗ рдЧреНрд░реЗрдк рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдСрдЯреЛ-рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рд╡рд╛рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рд╕рдлрд▓ рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЬрд▓реНрджреА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рдФрд░ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рдФрд░ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ - рд╕рд┐рдирд╛рддреНрд░рд╛ ред рд╣рдо рдЕрднреА рднреА рдЗрд╕реЗ REST рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред


рдмрд╛рдХреА?

рдпрджрд┐ рдЖрдкрдиреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддрдХрдиреАрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рд╣реИ, рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЙрджреНрдпрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрд░рдИрдПрд╕рдЯреА (рдпрд╣ рдирд╛рдо рд╕реЗ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ) рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдФрд░ рд▓рд╛рдн рдЗрд╕рдХреА рд╕рдордЭ рд╣реИ - рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдмреИрдХ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИред
рд▓реЗрдХрд┐рди рддрдм рд╢рд╛рдпрдж REST рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ http + json рд╕рдорд╛рдзрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ? рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдПрдкреАрдЖрдИ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЛ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдХрдИ рдкреНрд░рд╢реНрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдкрд░рд┐рдЪрд┐рдд REST рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХред
рд╣рдо REST рдПрдХ рд╕рдордЭреМрддрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╣рдо JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реБрдЧрдорддрд╛ рдФрд░ jsonapi рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╡рд┐рддреНрд░ рдпреБрджреНрдзреЛрдВ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдирд╛ рдкрдбрд╝реЗ ред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЬрдм рд╣рдо рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрд░рд╛рдо рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рддреЛ REST рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИред


рдХрдИ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд▓рд┐рдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди, рд╣рдордиреЗ рдЧреНрд░рд╛рдЙрдВрдбрд╡рд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ - рдЕрдореВрд░реНрдд рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реЗ рд╡рд░реНрдЧ рдХреЛ рдЖрдзреЗ рдШрдВрдЯреЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдХреЛрдб рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреНрдпрд╛ рд╣реИред


рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдХрдард┐рдирд╛рдЗрдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реБрдИрдВред рдирдП рдХрд░реНрдордЪрд╛рд░реА рдЬреЛ рдбреАрдбреАрдбреА рдкреНрд░рдерд╛рдУрдВ рдФрд░ рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рд╡реЗ рдХреЛрдб рдФрд░ рдЗрд╕рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрддреЗ рдереЗред рдпрджрд┐ рдореИрдВ рдЦреБрдж рдЗрд╡рд╛рдВрд╕ рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд, рдУрд╡рд░-рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рдЬрд╛рдКрдВрдЧрд╛ред


рдЗрд╕ рдмрд╛рдзрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рд▓реЗрдЦрди (рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢) рд▓рд┐рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рджрд░реНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рд░реВрдкрд░реЗрдЦрд╛рдПрдБ рд╕рдлрд▓ рд▓рдЧреАрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣реИрдмрд░ рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рд╕рд╛рд░ рдХрдХреНрд╖рд╛рдПрдВ рдЬреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рджреЛрд╣рд░рд╛рдИ рдЧрдИ рдереАрдВ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдордгрд┐ рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рджрд░реНрд╢рди


рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рд░рд╛рд╕реНрддрд╛
рдпрджрд┐ рдЖрдк рдорд╛рд░реНрд╢рд▓ рдЖрд░реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХреНрд▓рд╛рд╕рд┐рдХ рдлрд┐рд▓реНрдо рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдХрдард┐рди рд▓рдбрд╝рдХрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдмрд╣реБрдд рдЪрддреБрд░рд╛рдИ рд╕реЗ рдПрдХ рдкреЛрд▓ рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдПрдХ рдЫрдард╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рдЫрдбрд╝реА рд╣реИ, рдПрдХ рдмрд╣реБрдд рд╣реА рдЖрджрд┐рдо рдЙрдкрдХрд░рдг рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдорд╛рдирд╡ рд╣рд╛рдереЛрдВ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдЧреБрд░реБ рдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ, рд╡рд╣ рдПрдХ рджреБрд░реНрдЬреЗрдп рд╣рдерд┐рдпрд╛рд░ рдмрди рдЬрд╛рддрд╛ рд╣реИред
рдЖрдк рдПрдХ рдкрд┐рд╕реНрддреМрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдкреИрд░ рдореЗрдВ рдЧреЛрд▓реА рдирд╣реАрдВ рдорд╛рд░рддреА рд╣реИ, рдпрд╛ рдЖрдк рд╢реВрдЯрд┐рдВрдЧ рддрдХрдиреАрдХ рд╕реАрдЦрдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдордиреЗ 4 рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ:


  • рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  • рддрдХрдиреАрдХ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЬрд░реВрд░реА рд╣реИ рдЬреНрдЮрд╛рдиред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдПрдХ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛ рдХреБрддреНрддреЗрд╡рд╛рдж рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдорд╛рдирдХреЛрдВ рдХреЛ рдорд╛рд░реНрдЧ рдХрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдмреЙрдХреНрд╕ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛, рд╕рдорд╛рдзрд╛рди рдХреА рдкрд╕рдВрдж рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрдиред

рдПрдХ рд╕рдорд╛рди рджрд░реНрд╢рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд░реНрдХрд▓рд┐рдирдХреНрд╕ рдУрдПрд╕ - рдж рдЖрд░реНрдХ рд╡реЗ рдореЗрдВ ред рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░, рд▓рд┐рдирдХреНрд╕ рдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░реВрдЯ рдирд╣реАрдВ рд▓рд┐рдпрд╛, рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдпрд╣ рдЯреВрдЯ рдЧрдпрд╛ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕рдиреЗ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛, рдХрднреА-рдХрднреА рдЧрдВрднреАрд░ рдЬреИрд╕реЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ рдХрд╛ рд╡рд┐рдШрдЯрдиред рд▓реЗрдХрд┐рди рдЖрд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж 2-3 рджрд┐рди рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░рд╛ рдУрдПрд╕ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡рд╣ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛, рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдореЗрд░реЗ рдиреЛрдЯреНрд╕ рдиреЗ рдореБрдЭреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдирдП рдкреАрд╕реА рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдПрдХ рднрд░рдкреВрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдиреЗ рдореБрдЭреЗ рдирдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреАред


рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдЪрд░рд┐рддреНрд░ рд╣реИред рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдЖрд╡реЗрджрди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ, http рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдЕрдиреНрдп рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХреЛрдб рдореЗрдВ рдЭрд╛рдВрдХрдирд╛ рдФрд░ рд╕рдордЭрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрдВрдЬрди рдбрд┐рдЬрд╛рдЗрди рдХреЛ рд╕рдордЭрдирд╛ рдЖрдкрдХреЛ рдХрд╛рд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ред


рдврд╛рдВрдЪрд╛


рд▓реВрдирд╛рдкрд╛рд░реНрдХ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рдПрдХ рдврд╛рдВрдЪрд╛ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдлреНрд░реЗрдо - рдлреНрд░реЗрдо, рд╡рд░реНрдХ - рд╡рд░реНрдХред рд╣рдо рдЦреБрдж рдХреЛ рдЧреБрдВрдЬрд╛рдЗрд╢ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд░рдЦрдиреЗ рдХрд╛ рдЖрдЧреНрд░рд╣ рдХрд░рддреЗ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдлреНрд░реЗрдо рдЬрд┐рд╕реЗ рд╣рдо рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдЙрд╕ рд╡рд░реНрдЧ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдпрд╛ рдЙрд╕ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдкрдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рд╕рд╛рд░ рд╣реИ рдФрд░ рддреАрди рд╕реНрддрд░ рд╣реИрдВ:


module LunaPark #  module Forms #  class Single # / end end end 

рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕рд╛ рдлреЙрд░реНрдо рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдПрдХрд▓ рддрддреНрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ:


 module Forms class Create < LunaPark::Forms::Single 

рдпрджрд┐ рдХрдИ рддрддреНрд╡ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред


 module Forms class Create < LunaPark::Forms::Multiple 

рдлрд┐рд▓рд╣рд╛рд▓, рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдордгрд┐ рдЕрд▓реНрдлрд╛ рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рд╣реИред рд╣рдо рдЗрд╕реЗ рд▓реЗрдЦреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЪрд░рдгреЛрдВ рдореЗрдВ рдЙрджреНрдзреГрдд рдХрд░реЗрдВрдЧреЗред рдпрд╛рдиреА рдпрджрд┐ рдЖрдк ValueObject рдФрд░ Entity рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд▓реЗрдЦ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рджреЛрдиреЛрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВред рдЪрдХреНрд░ рдХреЗ рдЕрдВрдд рддрдХ, рд╡реЗ рд╕рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реНрд╡рдпрдВ sinatra \ roda рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдХрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА рдЬреЛ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕рдм рдХреБрдЫ рдкреЗрдВрдЪ" рдХреИрд╕реЗ рдХрд░реЗрдВред


рд░реВрдкрд░реЗрдЦрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рд╣реИред рдЗрди рд▓реЗрдЦреЛрдВ рдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд░реВрдк рдореЗрдВ рди рджреЗрдЦреЗрдВред


рддреЛ, рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред


рдорд╛рди рд╡рд╕реНрддреБ


- рдЖрдкрдХреА рдкреНрд░реЗрдорд┐рдХрд╛ рдХрд┐рддрдиреА рд▓рдВрдмреА рд╣реИ?
- 151
- рдЖрдк рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреА рдкреНрд░рддрд┐рдорд╛ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдиреЗ рд▓рдЧреЗ?

рдЗрдВрдбрд┐рдпрд╛рдирд╛ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рд╣реЛ рд╕рдХрддрд╛ рдерд╛ред рдорд╛рдирд╡ рд╡рд┐рдХрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдорд╛рдк рдХреА рдПрдХ рдЗрдХрд╛рдИ рднреА рд╣реИред рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд╕реНрддреБ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдЖрджрд┐рдо (рдкреВрд░реНрдгрд╛рдВрдХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдмреВрд▓рд┐рдпрди, рдЖрджрд┐) рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрднреА-рдХрднреА рдЙрдирдореЗрдВ рд╕реЗ рд╕рдВрдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:


  • рдзрди рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рд╕рдВрдЦреНрдпрд╛ (рд░рд╛рд╢рд┐) + рдореБрджреНрд░рд╛ рд╣реИред
  • рдПрдХ рддрд┐рдерд┐ рдореЗрдВ рдПрдХ рджрд┐рди, рдорд╣реАрдирд╛ рдФрд░ рд╡рд░реНрд╖ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред
  • рд╡рдЬрди рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рднреА рд╕рдВрдЦреНрдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдк рдХреА рдПрдХ рдЗрдХрд╛рдИ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рдкрд╛рд╕рдкреЛрд░реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реЛрддреА рд╣реИ рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛ рдХреАред

рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ рдЖрджрд┐рдо рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИред
рдПрдХ рдлреЛрди рдирдВрдмрд░ рдХреЛ рдЕрдХреНрд╕рд░ рдирдВрдмрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЬреЛрдбрд╝ рдпрд╛ рд╡рд┐рднрд╛рдЬрди рдХреА рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рджреЗрд╢ рдХреЛрдб рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдЬрд╛рд░реА рдХрд░реЗрдЧреА рдЬреЛ рдПрдХ рд╢рд╣рд░ рдХреЛрдб рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдЬрд╛рд╡рдЯреА рд╡рд┐рдзрд┐ рд╣реЛрдЧреА рдЬреЛ рдЗрд╕реЗ рди рдХреЗрд╡рд▓ 79001231212 рдирдВрдмрд░ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ 79001231212 , рдмрд▓реНрдХрд┐ рдПрдХ рдкрдардиреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ: 7-900-123-12-12 ред


рд╢рд╛рдпрдж рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░?

рд╣рдардзрд░реНрдорд┐рддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рд╣реИ - рд╣рд╛рдБред рдпрджрд┐ рд╣рдо рдЗрд╕ рджреБрд╡рд┐рдзрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рд╣рдо рдЗрд╕ рдирдВрдмрд░ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡рдпрдВ рдлреЛрди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдВрдЧреЗ:


 phone.call Values::PhoneNumber.new(79001231212) 

рдФрд░ рдЕрдЧрд░ рд╣рдордиреЗ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддреЛ рдХреНрдпреЛрдВ рди рд╣рдо рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рддреБрд░рдВрдд рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛ рджреЗрдВ?


 Values::PhoneNumber.new(79001231212).to_s 

рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рд╣рдо рдереНрд░реА рдПрдХреНрд╕рд┐рд╕ рдСрдирд▓рд╛рдЗрди рдХреИрд╕реАрдиреЛ рд╕рд╛рдЗрдЯ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдб рдЧреЗрдо рдмреЗрдЪ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ 'рдкреНрд▓реЗрдЗрдВрдЧ рдХрд╛рд░реНрдб' рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред


 module Values class PlayingCard < Lunapark::Values::Compound attr_reader :suit, :rank end end 

рддреЛ, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ:


  • рд╕реВрдЯ - рдХрд╛рд░реНрдб рд╕реВрдЯ
  • рд░реИрдВрдХ - рдХрд╛рд░реНрдб рдХреА рдЧрд░рд┐рдорд╛

рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рддреЗ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреА рд╣реИрдВред рдмреЗрд╢рдХ рдЖрдк рдПрдХ рдкреНрд▓реЗрдЗрдВрдЧ рдХрд╛рд░реНрдб рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ 8 рдХреЛ рдкрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рдПрдХ рд╕рднреНрдп рд╕рдорд╛рдЬ рдореЗрдВ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЧреЛрд▓реА рдорд╛рд░ рджреА рдЬрд╛рдПрдЧреАред рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдореВрд▓реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкрд╣рд▓реА рд╕рдВрдкрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ - рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ред
рд╡реИрд▓реНрдпреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рджреВрд╕рд░реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рд╣рдо рдЙрдирдХреА рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред


 module Values RSpec.describe PlayingCard do let(:card) { described_class.new suit: :clubs, rank: 10 } let(:other) { described_class.new suit: :clubs, rank: 10 } it 'should be eql' do expect(card).to eq other end end end 

рдРрд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрддреЗ рдкрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рдПрдЧреАред рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдореВрд▓реНрдп-рдорд╛рдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореВрд▓реНрдп рд╕реЗ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВрдЧреЗ:


 def ==(other) suit == other.suit && rank == other.rank end 

рдЕрдм рд╣рдорд╛рд░рд╛ рдЯреЗрд╕реНрдЯ рдкрд╛рд╕ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЙрди рддрд░реАрдХреЛрдВ рдХреЛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо 10 рдФрд░ K рдХреА рддреБрд▓рдирд╛ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореВрд▓реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗред рдареАрдХ рд╣реИ, рддреЛ рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢реАрд░реНрд╖ рджрд╕ рдХреНрд▓рдм рд╢реБрд░реВ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:


 ten = Values::Rank.new('10') clubs = Values::Suits.new(:clubs) ten_clubs = Values::PlayingCards.new(rank: ten, clubs: clubs) 

рдорд╛рдгрд┐рдХ рдХреЗ рд▓рд┐рдП рддреАрди рд▓рд╛рдЗрдиреЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ-рд╡реИрд▓реНрдпреВ - рдЯрд░реНрдирдУрд╡рд░ рдХреА рддреАрд╕рд░реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ .wrap рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реЗ рд╕рдХрддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рдореЗрдВ рдмрджрд▓ рд╕рдХрддреА рд╣реИред


 class PlayingCard < Lunapark::Values::Compound def self.wrap(obj) case obj.is_a? self.class #      PlayingCard obj #      case obj.is_a? Hash #    ,      new(obj) #    case obj.is_a String #    ,     new rank: obj[0..-2], suit:[-1] # ,  -  . else #       raise ArgumentError #  . end end def initialize(suit:, rank:) #     @suit = Suit.wrap(suit) #      @rank = Rank.wrap(rank) end end 

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рдн рджреЗрддрд╛ рд╣реИ:


 ten = Values::Rank.new('10') clubs = Values::Suits.new(:clubs) from_values = Values::PlayingCard.wrap rank: ten, suit: clubs from_hash = Values::PlayingCard.wrap rank: '10', suit: :clubs from_obj = Values::PlayingCard.wrap from_values from_str = Values::PlayingCard.wrap '10C' #        utf ,  ,  . 

рдпреЗ рд╕рднреА рдХрд╛рд░реНрдб рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдВрдЧреЗред рдпрджрд┐ wrap рд╡рд┐рдзрд┐ рдЕрдЪреНрдЫреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдлреИрд▓рддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдХрдХреНрд╖рд╛ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдардзрд░реНрдорд┐рддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рднреА рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реЛрдЧрд╛ред
рд╣рдореНрдо, рдбреЗрдХ рдореЗрдВ рдЬрдЧрд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдХреИрд╕реЗ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдб рдЯреНрд░рдореНрдк рдХрд╛рд░реНрдб рд╣реИ? рдпрд╣ рдХреЛрдИ рдкреНрд▓реЗрдЗрдВрдЧ рдХрд╛рд░реНрдб рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкреНрд▓реЗрдЗрдВрдЧ рдХрд╛рд░реНрдб рдХрд╛ рдореВрд▓реНрдп рд╣реИ ред рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╢рд┐рд▓рд╛рд▓реЗрдЦ 10 рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдХрд╛рд░реНрдбрдмреЛрд░реНрдб рдХреЗ рдХреЛрдиреЗ рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдСрдмреНрдЬреЗрдХреНрдЯ-рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЖрджрд┐рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдорд╛рдгрд┐рдХ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рд╕реЗ рдЕрдВрддрд┐рдо рд╕рдВрдкрддреНрддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ - рдСрдмреНрдЬреЗрдХреНрдЯ-рд╡реИрд▓реНрдпреВ рдХрд┐рд╕реА рднреА рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рд╣реИред


рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ


рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдкреВрд░реА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рдмреАрдЪ, рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд┐рдзрд┐ рдФрд░ рдЙрдкрдХрд░рдг рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдФрд░ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдлреНрд░реЗрдбрд░рд┐рдХ рдЯреЗрд▓рд░ 1914

рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП

 # GOOD class Money < LunaPark::Values::Compound def +(other) other = self.class.wrap(other) raise ArgumentError unless same_currency? other self.class.new( amount: amount + other.amount, currency: currency ) end end 

рдПрдХ рд╡реИрд▓реНрдпреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдг рдХреЗрд╡рд▓ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдпрд╛ рдЕрдиреНрдп рд╡реИрд▓реНрдпреВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

 # GOOD class Weight < LunaPark::Values::Compound def intialize(value:, unit:) @value = value @unit = Unit.wrap(unit) end end # BAD class PlaingCard < LunaPark::Value def initialize(rank:, suit:, deck:) ... @deck = Entity::Deck.wrap(deck) #    end end 

рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рд╕рд░рд▓ рд╕рдВрдЪрд╛рд▓рди рд░рдЦреЗрдВ

 # GOOD class Weight < LunaPark::Values::Compound def >(other) value > other.convert_to(unit).value end end 

рдпрджрд┐ "рд░реВрдкрд╛рдВрддрд░рдг" рдСрдкрд░реЗрд╢рди рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ

 # UGLY class Weight < LunaPark::Values::Compound def convert_to(unit) unit = Unit.wrap(unit) case { self.unit.to_sym => unit.to_sym } when { :kg => :ft } Weight.new(value: 2.2046 * value, unit.to_sym) when # ... end end end # GOOD #./lib/values/weight/converter.rb class Weight class Converter < LunaPark::Services::Simple def initialize(weight, to:) ... end end end #./lib/values/weight.rb class Weight < LunaPark::Values::Compound def convert_to(unit) Converter.call! self, to: unit end end 

рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдореЗрдВ рддрд░реНрдХ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЗрд╕ рд╢рд░реНрдд рдкрд░ рд╣реА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИ: рдпрд╣ рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реЗрд╡рд╛ рдореВрд▓реНрдп рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


рдбреЛрдореЗрди рд▓реЙрдЬрд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реИрд▓реНрдпреВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреА

рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕реНрдЯреЛрд░ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд╛рд▓ рдХреА рдПрдХ рд░реЗрдЯрд┐рдВрдЧ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 # DEADLY BAD class Rate < LunaPark::Values::Single def top?(10) Repository::Rates.top(first: 10).include? self end end 

рд╕рд╛рд░рд╛рдВрд╢ (рдЗрдХрд╛рдИ)


рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХрд┐рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдиреБрдмрдВрдз, рдПрдХ рдХреБрд░реНрд╕реА, рдПрдХ рд░рд┐рдпрд▓ рдПрд╕реНрдЯреЗрдЯ рдПрдЬреЗрдВрдЯ, рдПрдХ рдкрд╛рдИ, рдПрдХ рд▓реЛрд╣рд╛, рдПрдХ рдмрд┐рд▓реНрд▓реА, рдПрдХ рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ - рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рднреА рд╡рд╕реНрддреБ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡реНрдпрд╛рдкрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдореЙрдбрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рд╡рд╣ рдЗрдХрд╛рдИ рд╣реИ ред
рдПрдВрдЯрд┐рдЯреА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдЗрд╡рд╛рдВрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдорд╛рд░реНрдЯрд┐рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╣реИред рдЗрд╡рд╛рдВрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдЗрдХрд╛рдИ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдРрд╕реА рдЪреАрдЬ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕рдХреЗ рд╡реНрдпрдХреНрддрд┐рддреНрд╡ рдкрд░ рдЬреЛрд░ рджреЗрддреА рд╣реИред


Zvans рджреНрд╡рд╛рд░рд╛ рд╕рд╛рд░
рдпрджрд┐ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрд╕реНрддрд┐рддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рддреЛ рдХрд┐рд╕реА рдореЙрдбрд▓ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдореБрдЦреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рд░рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╕реНрддреБ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдЪрдХреНрд░ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдирд┐рд░реНрдорд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдкрдиреЗ рдЖрдХрд╛рд░ рдпрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬреЗрдВред рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реА рддрдХрдиреАрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджреЗрдВред рдПрдХ рдРрд╕реЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЬрд░реВрд░реА рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдРрд╕реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреВрдард╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рддреАрдХ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рдЪрд╛рди рдХреЗ рдРрд╕реЗ рд╕рд╛рдзрдиреЛрдВ рдХреА рдПрдХ рдмрд╛рд╣рд░реА рдЙрддреНрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдПрдХ рдордирдорд╛рдирд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдг рдХреЛ рдореЙрдбрд▓ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЙрдбрд▓ рдХреЛ рдПрдХ рд╕рдЯреАрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рдорд╛рди рд╡рд╕реНрддреБрдПрдВ рдХреНрдпрд╛ рд╣реИрдВред

рдорд╛рд░реНрдЯрд┐рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдВрдЯрд┐рдЯреА рдПрдХ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдкрд░рдд рд╣реИред рдпрд╣ рдкрд░рдд рд╡рд╕реНрддреБ рдФрд░ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рджреЛрдиреЛрдВ рдХреЛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдЧреАред


рдорд╛рд░реНрдЯрд┐рди рд╕реЗ рд╕рд╛рдВрддреНрд╡рдирд╛
рдПрдВрдЯрд┐рдЯреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдмрд┐рдЬрдиреЗрд╕ рдирд┐рдпрдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╡реЗ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ; рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЧреЗрдЯрд╡реЗ рдПрдВрдЯреНрд░реАрдЬ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рд▓рд╛рдЗрди рдХреЗ рдиреАрдЪреЗ) рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрдм рдПрдВрдЯрд┐рдЯреАрдЬ рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдпрд╛ рддреЛ рд░реЛрдХрдерд╛рдо рдпрд╛ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ MyEntity {рдирд┐рдЬреА MyDataStructure рдбреЗрдЯрд╛ ;;

рдпрд╛

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ MyEntity MyDataStructure {...} рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ

рдФрд░ рдпрд╛рдж рд░рдЦрдирд╛, рд╣рдо рд╕рднреА рд╕реНрд╡рднрд╛рд╡ рд╕реЗ рд╕рдореБрджреНрд░реА рдбрд╛рдХреВ рд╣реИрдВ; рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ рдЬрд┐рди рдирд┐рдпрдореЛрдВ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рддрд░рд╣ рд╣реИрдВ ...

рд╕рд╛рд░ рд╕реЗ рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рд╣реЛрдЧрд╛ред рдЕрдкрдиреЗ рд╕рд░рд▓рддрдо рд░реВрдк рдореЗрдВ, рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:


 module Entities class MeatBag < LunaPark::Entities::Simple attr_accessor :id, :name, :hegiht, :weight, :birthday end end 

рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╡рд╕реНрддреБ рдЬреЛ рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдореЙрдбрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
LunaPark::Entites::Simple рд╡рд░реНрдЧ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рд╕рд░рд▓ рд╣реИ, рдЖрдк рдЗрд╕рдХрд╛ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рджреЗрддрд╛ рд╣реИ - рдЖрд╕рд╛рди рдЖрд░рдВрднреАрдХрд░рдгред


LunaPark :: рд╕рдВрдкреВрд░реНрдг :: рд╕рд░рд▓
 module LunaPark module Entities class Simple def initialize(params) set_attributes params end private def set_attributes(hash) hash.each { |k, v| send(:"#{k}=", v) } end end end end 

рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 john_doe = Entity::MeatBag.new( id: 42, name: 'John Doe', height: '180cm', weight: '80kg', birthday: '01-01-1970' ) 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рдЪреБрдХреЗ рд╣реИрдВ, рд╣рдо рдореВрд▓реНрдп рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╡рдЬрди, рдКрдВрдЪрд╛рдИ рдФрд░ рдЬрдиреНрдо рдХреА рддрд╛рд░реАрдЦ рдХреЛ рд▓рдкреЗрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


 module Entities class MeatBag < LunaPark::Entites::Simple attr_accessor :id, :name attr_reader :heiht, :wight, :birthday def height=(height) @height = Values::Height.wrap(height) end def weight=(height) @height = Values::Weight.wrap(weight) end def birthday=(day) @birthday = Date.parse(day) end end end 

рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ LunaPark::Entites::Nested рдХрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ:


 module Entities class MeatBag < LunaPark::Entities::Nested attr :id attr :name attr :heiht, Values::Height, :wrap attr :weight, Values::Weight, :wrap attr :birthday, Values::Date, :parse end end 

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЛ рд╡реГрдХреНрд╖ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдЪрд▓реЛ рднрд╛рд░реА рдШрд░реЗрд▓реВ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдЬреБрдиреВрди рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд╡рд╛рд╢рд┐рдВрдЧ рдорд╢реАрди рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ "рдЯреНрд╡рд┐рд╕реНрдЯ" рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рджреГрд╢реНрдп рдмрдирд╛рдпрд╛ред рдФрд░ рдЕрдм рд╣рдо рдПрдХ рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реНрдпрд╛рдкрд╛рд░рд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ:


refregerator


 class Refregerator < LunaPark::Entites::Nested attr :id, attr :brand attr :title namespace :fridge do namespace :door do attr :upper, Shelf, :wrap attr :lower, Shelf, :wrap end attr :upper, Shelf, :wrap attr :lower, Shelf, :wrap end namespace :main do namespace :door do attr :first, Shelf, :wrap attr :second, Shelf, :wrap attr :third, Shelf, :wrap end namespace :boxes do attr :left, Box, :wrap attr :right, Box, :wrap end attr :first, Shelf, :wrap attr :second, Shelf, :wrap attr :third, Shelf, :wrap attr :fourth, Shelf, :wrap end attr :last_open_at, comparable: false end 

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ рдХрд╛ рджрд░рд╡рд╛рдЬрд╛ред рдПрдХ рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛, рдпрд╣ рд░реЗрдлреНрд░рд┐рдЬрд░реЗрдЯрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрдбрд╝реЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреАрдорд╛ рдХреА рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрдиред


LunaPark::Entites::Nested рдХреНрд▓рд╛рд╕ рдореЗрдВ 2 рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдг рд╣реИрдВ:


рддреБрд▓рдиреАрдпрддрд╛:


 module Entites class User < LunaPark::Entites::Nested attr :email attr :registred_at end end u1 = Entites::User.new(email: 'john.doe@mail.com', registred_at: Time.now) u2 = Entites::User.new(email: 'john.doe@mail.com', registred_at: Time.now) u1 == u2 # => false 

рджреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдорддреБрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдкрд░ рдмрдирд╛рдП рдЧрдП рдереЗ рдФрд░ рдЗрд╕рд▓рд┐рдП registred_at рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдореВрд▓реНрдп рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рддреБрд▓рдирд╛ рдХреА рд╕реВрдЪреА рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:


 module Entites class User < LunaPark::Entites::Nested attr :email attr :registred_at, comparable: false end end 

рддрдм рд╣рдореЗрдВ рджреЛ рддреБрд▓рдиреАрдп рд╡рд╕реНрддреБрдПрдВ рдорд┐рд▓рддреА рд╣реИрдВред


рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЯрд░реНрдирдУрд╡рд░ рдХреА рд╕рдВрдкрддреНрддрд┐ рднреА рд╣реИ - рд╣рдо рд╡рд░реНрдЧ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


 Entites::User.wrap(email: 'john.doe@mail.com', registred_at: Time.now) 

рдЖрдк рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрд╢, рдУрдкрдирд╕реНрдЯреНрд░рдХреНрдЯ рдпрд╛ рдХрд┐рд╕реА рднреА рдордгрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рдЗрдХрд╛рдИ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред


рдПрдХ рдЗрдХрд╛рдИ рдПрдХ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдореЙрдбрд▓ рд╣реИ, рдЗрд╕реЗ рд╕рд░рд▓ рдЫреЛрдбрд╝ рджреЗрдВред рдпрджрд┐ рдЖрдкрдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди рди рдХрд░реЗрдВред


рдЗрдХрд╛рдИ рдкрд░рд┐рд╡рд░реНрддрди


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, рдПрдВрдЯрд┐рдЯреА рд╡рд░реНрдЧ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рдмрд╛рд╣рд░ рд╕реЗ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдорд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИред рд╡реЗ рд╕рднреА рдХрд╛рд░реНрдп рдЬреЛ рдЗрд╕рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рджреНрд╡рд╛рд░рд╛ рдФрд░ рдмрдбрд╝реЗ, рд╕рд╛рд░ рдХреЛ рд╕рдЬрд╛рдиреЗ рдпрд╛ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рд╛рд░ рд╣реА рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИред рд░реЗрд▓ рдбреЗрд╡рд▓рдкрд░ рдкрд░ рдПрдХ рд░реВрдмреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред рдмрд╛рд╣рд░ рд╕реЗ рдпрд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЖрдорддреМрд░ рдкрд░ OOP рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдереЛрдбрд╝рд╛ рдЧрд╣рд░реЗ рджреЗрдЦреЗрдВ - рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдПрдХ рдЦрд┐рдбрд╝рдХреА рдЕрдкрдиреЗ рдЖрдк рдЦреБрд▓ рд╕рдХрддреА рд╣реИ? рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдПрдХ рд╣реЛрдЯрд▓ рдмреБрдХ рдХрд░реЗрдВ, рдкреНрдпрд╛рд░реА рдмрд┐рд▓реНрд▓реА рдХреЛ рдПрдХ рдирдпрд╛ рдЧреНрд░рд╛рд╣рдХ рдорд┐рд▓ рдЬрд╛рдП? рдпреЗ рд╕рднреА рдмрд╛рд╣рд░реА рдкреНрд░рднрд╛рд╡ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЗрд╕реЗ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдореЙрдбрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдЕрджреНрдпрддрд┐рдд рд░рдЦрддреЗ рд╣реИрдВред рдореЙрдбрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЗрд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рд╣рдо рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

Source: https://habr.com/ru/post/hi435920/


All Articles