CodeGym/Java Blog/рдпрд╛рджреГрдЪреНрдЫрд┐рдХ/рдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо: рдпреЛрдЧреНрдп рдирд╛рд╡рд╛рдВрдЪреА рд╢рдХреНрддреА, рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЖрдгрд┐ рд╡рд╛рдИрдЯ рдЯрд┐рдкреНрдк...
John Squirrels
рдкрд╛рддрд│реА 41
San Francisco

рдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо: рдпреЛрдЧреНрдп рдирд╛рд╡рд╛рдВрдЪреА рд╢рдХреНрддреА, рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЖрдгрд┐ рд╡рд╛рдИрдЯ рдЯрд┐рдкреНрдкрдгреНрдпрд╛

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛ рдЧреНрд░реБрдкрдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ
рд╕рджрд╕реНрдп
рдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо: рдпреЛрдЧреНрдп рдирд╛рд╡рд╛рдВрдЪреА рд╢рдХреНрддреА, рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЖрдгрд┐ рд╡рд╛рдИрдЯ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ - 1рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд┐рддреА рд╡реЗрд│рд╛ рджреБрд╕рд▒реНрдпрд╛рдЪреНрдпрд╛ рдХреЛрдбрдордзреНрдпреЗ рдЬрд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ рдЖрд╣реЗ? рджреЛрди рддрд╛рд╕рд╛рдВрдРрд╡рдЬреА, рдХрд╛рдп рдШрдбрдд рдЖрд╣реЗ рдпрд╛рдЪреЗ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рджреЛрди рджрд┐рд╡рд╕ рдШрд╛рд▓рд╡реВ рд╢рдХрддрд╛. рдордЬреЗрджрд╛рд░ рдЧреЛрд╖реНрдЯ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЬреНрдпрд╛ рд╡реНрдпрдХреНрддреАрдиреЗ рдХреЛрдб рд▓рд┐рд╣рд┐рд▓рд╛ рдЖрд╣реЗ рддреНрдпрд╛рдЪреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реНрдкрд╖реНрдЯ рдЖрдгрд┐ рдкрд╛рд░рджрд░реНрд╢рдХ рдЖрд╣реЗ. рд╣реЗ рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХ рдирд╛рд╣реА: рд╕рд░реНрд╡ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдкрд░рд┐рдкреВрд░реНрдг рдХреЛрдб рд╣реА рдПрдХ рдЕрддрд┐рд╢рдп рдЕрд╕реНрдкрд╖реНрдЯ рд╕рдВрдХрд▓реНрдкрдирд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд╕рдХрд╛рдЪреА рдЬрдЧрд╛рдЪреА рдЖрдгрд┐ рдХреЛрдбрдЪреА рд╕реНрд╡рддрдГрдЪреА рджреГрд╖реНрдЯреА рдЕрд╕рддреЗ. рдореА рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│рд╛ рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рд╣реЛрддреЛ рдЬреЗрд╡реНрд╣рд╛ рдореА рдЖрдгрд┐ рд╕рд╣рдХрд░реНрдореА рдПрдХрд╛рдЪ рдХреЛрдбрдХрдбреЗ рдкрд╛рд╣рд┐рд▓реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рд╢реБрджреНрдзрддреЗрдмрджреНрджрд▓ рдЖрдгрд┐ рд╢реБрджреНрдзрддреЗрдмрджреНрджрд▓ рднрд┐рдиреНрди рдорддреЗ рд╣реЛрддреА.рдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо: рдпреЛрдЧреНрдп рдирд╛рд╡рд╛рдВрдЪреА рд╢рдХреНрддреА, рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЖрдгрд┐ рд╡рд╛рдИрдЯ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ - 2рдУрд│рдЦреАрдЪреЗ рд╡рд╛рдЯрддреЗ, рдирд╛рд╣реА рдХрд╛? рддрд░реАрд╣реА, рдХрд╛рд╣реА рд╡реЗрд│-рдЪрд╛рдЪрдгреА рддрддреНрддреНрд╡реЗ рдЖрд╣реЗрдд рдЬреНрдпрд╛рдВрдЪреЗ рдкрд╛рд▓рди рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рд╕рд░рддреЗрд╢реЗрд╡рдЯреА, рддреЗ рдЖрдкрд▓реНрдпрд╛рд╕рд╛рдареА рдлрд╛рдпрджреЗрд╢реАрд░ рдард░рддреАрд▓, рдХрд╛рд░рдг рдЬрд░ рддреБрдореНрд╣реА рддреБрдордЪрд╛ рдХреЛрдб рддреНрдпрд╛ рд░рд╛рдЬреНрдпрд╛рдд рд╕реЛрдбрд▓рд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рддреБрдореНрд╣реА рд╕реНрд╡рддрдГ рддреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реВ рдЗрдЪреНрдЫрд┐рддрд╛, рддрд░ рдЬрдЧ рдереЛрдбреЗ рдЖрдирдВрджреА рдЖрдгрд┐ рд╕реНрд╡рдЪреНрдЫ рд╣реЛрдИрд▓. рдЖрдордЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рд▓реЗрдЦрд╛рдд(рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдРрд╡рдЬреА, рд▓рд╣рд╛рди рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ) рдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдорд╛рдВрдмрджреНрджрд▓, рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдШрдЯрдХ рднрд╛рдЧ, рдЬрд╕реЗ рдХреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЗрдВрдЯрд░рдлреЗрд╕, рд╡рд░реНрдЧ, рдкрджреНрдзрддреА рдЖрдгрд┐ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд╣реА рд╢рд┐рдлрд╛рд░рд╕реА рдорд┐рд│рд╛рд▓реНрдпрд╛. рддреНрдпрд╛рдЪ рд▓реЗрдЦрд╛рдд, рдореА рдХрд╛рд╣реА рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рдЕрдЪреВрдХ рдирд╛рд╡рд╛рдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдорд▓рд╛ рдЖрдЬ рдпрд╛рдмрджреНрджрд▓ рдмреЛрд▓рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдХрд╛рд░рдг рдпреЛрдЧреНрдп рдирд╛рд╡рд╛рдВрдореБрд│реЗ рдХреЛрдб рд╡рд╛рдЪрдгреЗ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рд╕реЛрдкреЗ рд╣реЛрддреЗ. рдЖрдореНрд╣реА рдХрд╛рд╣реА рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдВрд╕рд╣, рдХреЛрдбрдордзреАрд▓ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреА рдЫреЛрдЯреА рдЙрджрд╛рд╣рд░рдгреЗ рдЖрдгрд┐ рд╣реЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрди рдпреЛрдЧреНрдп рдХреЛрдбрдЪрд╛ рд╡рд┐рд╖рдп рдмрдВрдж рдХрд░реВ. рдмрд░рдВ, рдЪрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛.

рдмрд░реЛрдмрд░ рдирд╛рд╡реЗ

рдпреЛрдЧреНрдп рдирд╛рд╡реЗ рдХреЛрдб рд╡рд╛рдЪрдиреАрдпрддрд╛ рд╕реБрдзрд╛рд░рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рдХреЛрдбрд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рд▓рд╛рдЧрдгрд╛рд░рд╛ рд╡реЗрд│ рдХрдореА рд╣реЛрддреЛ, рдХрд╛рд░рдг рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреНрдпрд╛ рдкрджреНрдзрддреАрдЪреЗ рдирд╛рд╡ рддреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреЗ рдЕрдВрджрд╛рдЬреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ рддреЗрд╡реНрд╣рд╛ рдкрджреНрдзрдд рд╡рд╛рдкрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЕрд╕рддреЗ. рдХреЛрдбрдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдордзреНрдпреЗ рдирд╛рд╡реЗ рдЕрд╕рддрд╛рдд (рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕, рдкрджреНрдзрддреА, рд╡рд░реНрдЧ, рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдлрд╛рдЗрд▓реНрд╕ рдЗ.), рддреНрдпрд╛рдореБрд│реЗ рдпреЛрдЧреНрдп, рд╕реНрд╡рдЪреНрдЫ рдХреЛрдб рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рд╣рд╛ рдореБрджреНрджрд╛ рдЦреВрдк рдорд╣рддреНрддреНрд╡рд╛рдЪрд╛ рдард░рддреЛ. рд╡рд░реАрд▓ рдЖрдзрд╛рд░рд╛рд╡рд░, рдирд╛рд╡рд╛рдиреЗ рдЕрд░реНрде рд╡реНрдпрдХреНрдд рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ, рддреЗ рдХрд╛рдп рдХрд░рддреЗ рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдореА рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│рд╛ рд▓рдХреНрд╖рд╛рдд рдШреЗрдИрди рдХреА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд╕рд╛рдареА рд╕рд░реНрд╡реЛрддреНрддрдо рдЯрд┐рдкреНрдкрдгреА рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рд▓рд╛ рдЪрд╛рдВрдЧрд▓реЗ рдирд╛рд╡ рджреЗрдгреЗ.рдХреЛрдбрд┐рдВрдЧ рдирд┐рдпрдо: рдпреЛрдЧреНрдп рдирд╛рд╡рд╛рдВрдЪреА рд╢рдХреНрддреА, рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЖрдгрд┐ рд╡рд╛рдИрдЯ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ - 3

рдЯреАрд╡реНрд╣реА рдорд╛рд▓рд┐рдХрд╛ "рд╢реЗрд░рд▓реЙрдХ" (2010-2017) рдордзреВрди

рдирд╛рдордХрд░рдг рдЗрдВрдЯрд░рдлреЗрд╕

рдЗрдВрдЯрд░рдлреЗрд╕рдордзреНрдпреЗ рд╕рд╣рд╕рд╛ рдХреЕрдкрд┐рдЯрд▓ рдЕрдХреНрд╖рд░рд╛рдиреЗ рд╕реБрд░реВ рд╣реЛрдгрд╛рд░реА рдирд╛рд╡реЗ рдЕрд╕рддрд╛рдд рдЖрдгрд┐ CamelCase рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реА рдЕрд╕рддрд╛рдд. рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд┐рд╣рд┐рддрд╛рдирд╛, рддреНрдпрд╛рд▓рд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдореНрд╣рдгреВрди рдирд┐рдпреБрдХреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА "I" рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╕рд░рд╛рд╡ рдорд╛рдирд▓реЗ рдЬрд╛рдд рдЕрд╕реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, IUserService), рдкрд░рдВрддреБ рддреЗ рдЦреВрдкрдЪ рдХреБрд░реВрдк рдЖрдгрд┐ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдгрд╛рд░реЗ рджрд┐рд╕рддреЗ. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рдЙрдкрд╕рд░реНрдЧ (UserService) рд╡рдЧрд│рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рдирд╛рд╡рд╛рд▓рд╛ (рдЙрджрд╛. UserServiceImpl) рдкреНрд░рддреНрдпрдп рдореНрд╣рдгреВрди "Impl" рдЬреЛрдбрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ. рдХрд┐рдВрд╡рд╛ рд╢рдХреНрдпрддреЛ, рд╢реЗрд╡рдЯрдЪрд╛ рдЙрдкрд╛рдп рдореНрд╣рдгреВрди, рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░ "C" рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбрд╛ (рдЙрджрд╛. CUserService).

рд╡рд░реНрдЧрд╛рдВрдЪреА рдирд╛рд╡реЗ

рдЗрдВрдЯрд░рдлреЗрд╕рдкреНрд░рдорд╛рдгреЗрдЪ, рд╡рд░реНрдЧрд╛рдЪреА рдирд╛рд╡реЗ рдХреЕрдкрд┐рдЯрд▓ рдХреЗрд▓реЗрд▓реА рдЖрд╣реЗрдд рдЖрдгрд┐ CamelCase рд╡рд╛рдкрд░рддрд╛рдд. рдЖрдкрдг рдПрдЦрд╛рджреНрдпрд╛ рдЭреЛрдореНрдмреА рд╕рд░реНрд╡рдирд╛рд╢рд╛рдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рдд рдЕрд╕рд▓реЛ рддрд░реА рдХрд╛рд╣реА рдлрд░рдХ рдкрдбрдд рдирд╛рд╣реА, рд╢реЗрд╡рдЯ рдЬрд╡рд│ рдЖрд▓рд╛ рдЕрд╕рд▓рд╛ рддрд░реА рдХрд╛рд╣реА рдлрд░рдХ рдкрдбрдд рдирд╛рд╣реА тАФ рдХрдзреАрд╣реА, рдХрдзреАрд╣реА, рдХрдзреАрд╣реА рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ рдХреНрд░рд┐рдпрд╛рдкрдж рдЕрд╕реВ рдирдпреЗ! рд╡рд░реНрдЧ рдЖрдгрд┐ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреА рдирд╛рд╡реЗ рд╕рдВрдЬреНрдЮрд╛ рдХрд┐рдВрд╡рд╛ рд╕рдВрдпреБрдЧ рд╕рдВрдЬреНрдЮрд╛ (UserController, UserDetails, UserAccount рдЗ.) рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреБрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреЗ рд╕рдВрдХреНрд╖реЗрдк рдЯрд╛рдХреВ рдирдпреЗ, рдХрд╛рд░рдг рддреНрдпрд╛рдореБрд│реЗ рдХреЗрд╡рд│ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧреБрдВрддрд╛рдЧреБрдВрдд рдирд┐рд░реНрдорд╛рдг рд╣реЛрдИрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдорд╛рдпрдЧреНрд░реЗрд╢рди рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреГрдкрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧрд╛рдд "UDM" рдЬреЛрдбреВ рдирдХрд╛, рдореНрд╣рдгрдЬреЗ UDMUserDetails, UDMUserAccount, UDMUserController.

рдкрджреНрдзрддреАрдВрдЪреА рдирд╛рд╡реЗ

рд╕рд╣рд╕рд╛, рдкрджреНрдзрддреАрдЪреА рдирд╛рд╡реЗ рд▓рд╣рд╛рди рдЕрдХреНрд╖рд░рд╛рдиреЗ рд╕реБрд░реВ рд╣реЛрддрд╛рдд, рдкрд░рдВрддреБ рддреЗ рдЙрдВрдЯ рдХреЗрд╕ рд╢реИрд▓реА (camelCase) рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рддрд╛рдд. рд╡рд░, рдЖрдореНрд╣реА рдореНрд╣рдЯрд▓реЗ рдЖрд╣реЗ рдХреА рд╡рд░реНрдЧрд╛рдЪреА рдирд╛рд╡реЗ рдХрдзреАрд╣реА рдХреНрд░рд┐рдпрд╛рдкрдж рдЕрд╕реВ рдирдпреЗрдд. рдпреЗрдереЗ рдкрд░рд┐рд╕реНрдерд┐рддреА рдЕрдЧрджреА рдЙрд▓рдЯ рдЖрд╣реЗ: рдкрджреНрдзрддреАрдВрдЪреА рдирд╛рд╡реЗ рдХреНрд░рд┐рдпрд╛рдкрджреЗ рдХрд┐рдВрд╡рд╛ рдХреНрд░рд┐рдпрд╛рдкрдж рд╡рд╛рдХреНрдпреЗ рдЕрд╕рд╛рд╡реАрдд: findUserById, findAllUsers, createUser рдЗ. рдПрдХ рдкрджреНрдзрдд (рддрд╕реЗрдЪ рдЪрд▓ рдЖрдгрд┐ рд╡рд░реНрдЧ) рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдЧреЛрдВрдзрд│ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╕реБрд╕рдВрдЧрдд рдирд╛рдордХрд░рдг рдкрджреНрдзрддреА рд╡рд╛рдкрд░рд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рдПрдЦрд╛рджреНрдпрд╛ рдкрджреНрдзрддреАрд▓рд╛ getUserById рдХрд┐рдВрд╡рд╛ findUserById рдЕрд╕реЗ рдирд╛рд╡ рджрд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдЖрдгрд┐ рдЖрдгрдЦреА рдПрдХ рдЧреЛрд╖реНрдЯ: рдкрджреНрдзрддреАрдВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рдВрдордзреНрдпреЗ рд╡рд┐рдиреЛрдж рд╡рд╛рдкрд░реВ рдирдХрд╛, рдХрд╛рд░рдг рдЗрддрд░рд╛рдВрдирд╛ рд╡рд┐рдиреЛрдж рд╕рдордЬреВ рд╢рдХрдд рдирд╛рд╣реА. рдкрд░рд┐рдгрд╛рдореА, рдкрджреНрдзрдд рдХрд╛рдп рдХрд░рддреЗ рд╣реЗ рд╕рдордЬрдгреНрдпрд╛рдд рддреЗ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдК рд╢рдХрддрд╛рдд.

рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рд╡реЗ

рдмрд░реНтАНрдпрд╛рдЪ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреА рдирд╛рд╡реЗ рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░рд╛рдиреЗ рд╕реБрд░реВ рд╣реЛрддрд╛рдд рдЖрдгрд┐ рдХреЕрдорд▓рдХреЗрд╕ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рддрд╛рдд, рдЬреЗрд╡реНрд╣рд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЬрд╛рдЧрддрд┐рдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЕрд╕рддреЛ. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рдирд╛рд╡рд╛рдЪреА рд╕рд░реНрд╡ рдЕрдХреНрд╖рд░реЗ рдореЛрдареНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рдд рд▓рд┐рд╣рд┐рд▓реА рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рд╢рдмреНрдж рдЕрдВрдбрд░рд╕реНрдХреЛрд░ ("_") рджреНрд╡рд╛рд░реЗ рд╡реЗрдЧрд│реЗ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рд╕реЛрдпреАрд╕рд╛рдареА, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪреЗ рдирд╛рд╡ рджреЗрддрд╛рдирд╛ рддреБрдореНрд╣реА рдЕрд░реНрдердкреВрд░реНрдг рд╕рдВрджрд░реНрдн рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рдЬреЗрд╡реНрд╣рд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдореЛрдареНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдЪрд╛ рднрд╛рдЧ рдореНрд╣рдгреВрди рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рддреЗ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, firstName, lastName, рдХрд┐рдВрд╡рд╛ status. рдЕрд╢рд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рддреБрдореНрд╣реА рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдЬреЛрдбреВ рд╢рдХрддрд╛ рдЬреЗ рд╣реЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдХреЛрдгрддреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ рд╣реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде: userFirstName, userLastName, userStatus. рдЬреЗрд╡реНрд╣рд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪрд╛ рдЕрд░реНрде рдкреВрд░реНрдгрдкрдгреЗ рднрд┐рдиреНрди рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рд╕рдорд╛рди рдирд╛рд╡реЗ рдЯрд╛рд│рд▓реА рдкрд╛рд╣рд┐рдЬреЗрдд. рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдирд╛рд╡рд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдгрд╛рд░реЗ рдХрд╛рд╣реА рд╡рд╛рд░рдВрд╡рд╛рд░ рд╕рдореЛрд░ рдпреЗрдгрд╛рд░реЗ рд╡рд┐рд░реБрджреНрдзрд╛рд░реНрдереА рд╢рдмреНрдж рдпреЗрдереЗ рдЖрд╣реЗрдд:
  • рд╕реБрд░реВ/рд╕рдорд╛рдкреНрдд
  • рдкрд╣рд┐рд▓рд╛/рд╢реЗрд╡рдЯрдЪрд╛
  • рд▓реЙрдХ/рдЕрдирд▓реЙрдХ
  • рдХрд┐рдорд╛рди/рдХрдорд╛рд▓
  • рдкреБрдвреАрд▓/рдорд╛рдЧреАрд▓
  • рдЬреВрдиреЗ рдирд╡реЗ
  • рдЙрдШрдбрд▓реЗрд▓реЗ/рдмрдВрдж
  • рджреГрд╢реНрдпрдорд╛рди/рдЕрджреГрд╢реНрдп
  • рд╕реНрд░реЛрдд/рд▓рдХреНрд╖реНрдп
  • рд╕реНрд░реЛрдд/рдЧрдВрддрд╡реНрдп
  • рд╡рд░ рдЦрд╛рд▓реА

рд▓рд╣рд╛рди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдирд╛рд╡реЗ

рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ x рдХрд┐рдВрд╡рд╛ n рдХрд┐рдВрд╡рд╛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЕрд╕рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЛрдб рд▓рд┐рд╣рд┐рдгрд╛рд▒реНрдпрд╛ рд╡реНрдпрдХреНрддреАрдЪрд╛ рд╣реЗрддреВ рд▓рдЧреЗрдЪ рджрд┐рд╕рдд рдирд╛рд╣реА. n рдХрд╛рдп рдХрд░рддреЗ рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдирд╛рд╣реА. рд╣реЗ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рдЪрд┐рдВрддрди рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рдЖрдгрд┐ рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╡реЗрд│, рд╡реЗрд│, рд╡реЗрд│). рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рдордЬрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдПрдЦрд╛рджреЗ рдлреАрд▓реНрдб рдЖрд╣реЗ рдЬреЗ рдЬрдмрд╛рдмрджрд╛рд░ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреНрдпрд╛ рдЖрдпрдбреАрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ. x рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд id рд╕рд╛рд░рдЦреНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдРрд╡рдЬреА, рдЖрдореНрд╣реА рдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд▓рд╛ "responsibleUserId" рдЕрд╕реЗ рдирд╛рд╡ рджреЗрдК, рдЬреЗ рд╡рд╛рдЪрдиреАрдпрддрд╛ рдЖрдгрд┐ рдорд╛рд╣рд┐рддреА рд╕рд╛рдордЧреНрд░реА рддреНрд╡рд░рд┐рдд рд╕реБрдзрд╛рд░рддреЗ. рдЕрд╕реЗ рдореНрд╣рдЯрд▓реЗ рдЖрд╣реЗ рдХреА, n рд╕рд╛рд░рдЦреНрдпрд╛ рд▓рд╣рд╛рди рдирд╛рд╡рд╛рдВрдирд╛ рдЫреЛрдЯреНрдпрд╛ рдкрджреНрдзрддреАрдВрдордзреНрдпреЗ рд╕реНрдерд╛рдирд┐рдХ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдореНрд╣рдгреВрди рд╕реНрдерд╛рди рдЕрд╕рддреЗ, рдЬреЗрдереЗ рдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓рд╛ рдХреЛрдбрдЪрд╛ рдмреНрд▓реЙрдХ рдлрдХреНрдд рджреЛрди рдУрд│реАрдВрдЪрд╛ рдЕрд╕рддреЛ рдЖрдгрд┐ рдкрджреНрдзрддреАрдЪреЗ рдирд╛рд╡ рддреЗрдереЗ рдХрд╛рдп рдШрдбрддреЗ рдпрд╛рдЪреЗ рдЕрдЪреВрдХ рд╡рд░реНрдгрди рдХрд░рддреЗ. рдЕрд╕рд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкрд╛рд╣реВрди, рд╡рд┐рдХрд╕рдХрд╛рд▓рд╛ рд╕рдордЬрддреЗ рдХреА рддреЗ рджреБрдпреНрдпрдо рдорд╣рддреНрддреНрд╡ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдЦреВрдк рдорд░реНрдпрд╛рджрд┐рдд рд╡реНрдпрд╛рдкреНрддреА рдЖрд╣реЗ. рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реБрдк, рд╕реНрдХреЛрдкрдЪреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрд╡рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╡рд▓рдВрдмрди рдЕрд╕рддреЗ: рдирд╛рд╡ рдЬрд┐рддрдХреЗ рдореЛрдареЗ, рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЕрдзрд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЖрдгрд┐ рддреНрдпрд╛рдЙрд▓рдЯ. рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, рддрд╛рд░рдЦреЗрдиреБрд╕рд╛рд░ рд╢реЗрд╡рдЯрдЪрд╛ рдЬрддрди рдХреЗрд▓реЗрд▓рд╛ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рдкрджреНрдзрдд рдпреЗрдереЗ рдЖрд╣реЗ:
public User findLastUser() {
   return findAllUsers().stream()
           .sorted((x, y) -> -x.getCreatedDate().compareTo(y.getCreatedDate()))
           .findFirst()
           .orElseThrow(() -> new ResourceNotFoundException("No user exists"));
}
рдпреЗрдереЗ рдЖрдкрдг рд╕реНрдЯреНрд░реАрдордЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА x рдЖрдгрд┐ y рд╣реА рд╢реЙрд░реНрдЯ-рдирд╛рд╡рд╛рдЪреА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рдкрд░рддреЛ рдЖрдгрд┐ рдирдВрддрд░ рдЖрдкрдг рддреНрдпрд╛рдмрджреНрджрд▓ рд╡рд┐рд╕рд░реВрди рдЬрд╛рддреЛ.

рдЗрд╖реНрдЯрддрдо рд▓рд╛рдВрдмреА

рдЪрд▓рд╛ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╕рд╣ рдкреБрдвреЗ рдЬрд╛рдКрдпрд╛. рдЗрд╖реНрдЯрддрдо рдирд╛рд╡рд╛рдЪреА рд▓рд╛рдВрдмреА n рдЖрдгрд┐ MaximumNumberOfUsersInTheCurrentGroup рдордзреАрд▓ рдХреБрдареЗрддрд░реА рдЖрд╣реЗ. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рд▓рд╣рд╛рди рдирд╛рд╡рд╛рдВрдирд╛ рдЕрд░реНрде рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ рддреНрд░рд╛рд╕ рд╣реЛрддреЛ, рддрд░ рдЦреВрдк рд▓рд╛рдВрдм рдЕрд╕рд▓реЗрд▓реА рдирд╛рд╡реЗ рд╡рд╛рдЪрдиреАрдпрддрд╛ рди рдЬреЛрдбрддрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡рд╛рдврд╡рддрд╛рдд рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рддреЗ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдд рдЖрдореНрд╣реА рдЦреВрдк рдЖрд│рд╢реА рдЕрд╕рддреЛ. n рд╕рд╛рд░рдЦреНрдпрд╛ рд▓рд╣рд╛рди рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рд╕рд╛рдареА рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЗрд╕рд╢рд┐рд╡рд╛рдп, рддреБрдореНрд╣реА рд╕реБрдорд╛рд░реЗ 8-16 рд╡рд░реНрдгрд╛рдВрдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрд▓рд╛ рдЪрд┐рдХрдЯреВрди рд░рд╛рд╣рд╛рд╡реЗ. рд╣рд╛ рдПрдХ рдХрдареЛрд░ рдирд┐рдпрдо рдирд╛рд╣реА, рдлрдХреНрдд рдПрдХ рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рддрддреНрддреНрд╡ рдЖрд╣реЗ.

рд▓рд╣рд╛рди рдлрд░рдХ

рдирд╛рд╡рд╛рдВрдордзреАрд▓ рд╕реВрдХреНрд╖реНрдо рдлрд░рдХ рдирдореВрдж рдХрд░рдгреНрдпрд╛рдд рдореА рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдК рд╢рдХрдд рдирд╛рд╣реА. рд╣реА рджреЗрдЦреАрд▓ рдПрдХ рд╡рд╛рдИрдЯ рдкреНрд░рдерд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рд╣реЗ рдлрд░рдХ рдлрдХреНрдд рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХрдгрд╛рд░реЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдВрдирд╛ рд▓рдХреНрд╖рд╛рдд рдпреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЦреВрдк рдЬрд╛рд╕реНрдд рд╡реЗрд│ рдШрд╛рд▓рд╡рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, InvalidDataAccessApiUsageException рдЖрдгрд┐ InvalidDataAccessResourceUsageException рдордзреАрд▓ рдлрд░рдХ рдПрдХрд╛ рджреГрд╖реНрдЯреАрдХреНрд╖реЗрдкрд╛рдд рд╢реЛрдзрдгреЗ рдХрдареАрдг рдЖрд╣реЗ. рд▓реЛрдЕрд░рдХреЗрд╕ L рдЖрдгрд┐ O рд╡рд╛рдкрд░рддрд╛рдирд╛ рдЕрдиреЗрдХрджрд╛ рдЧреЛрдВрдзрд│ рджреЗрдЦреАрд▓ рд╣реЛрдК рд╢рдХрддреЛ, рдХрд╛рд░рдг рддреЗ 1 рдЖрдгрд┐ 0 рд╕рд╛рдареА рд╕рд╣рдЬ рдЪреБрдХрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдХрд╛рд╣реА рдлреЙрдиреНрдЯрдордзреНрдпреЗ рдлрд░рдХ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ, рдХрд╛рд╣реАрдВрдордзреНрдпреЗ рддреЛ рдХрдореА рдЖрд╣реЗ.

рдЕрд░реНрде

рдЖрдореНрд╣рд╛рд▓рд╛ рдирд╛рд╡реЗ рдЕрд░реНрдердкреВрд░реНрдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрджрд╛рдВрджреНрд╡рд╛рд░реЗ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реВ рдирдпреЗ, рдХрд╛рд░рдг, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, UserData рдЖрдгрд┐ UserInfo рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рд╕рдорд╛рди рдЕрд░реНрде рдЖрд╣реЗрдд. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЛрдбрдордзреНрдпреЗ рдЦреЛрд▓рд╡рд░ рдЬрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдЙрдкрдпреБрдХреНрдд рдорд╛рд╣рд┐рддреА рди рджреЗрдгрд╛рд░реЗ рд╢рдмреНрдж рдЯрд╛рд│рд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, firstNameString рдордзреНрдпреЗ, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ String рдпрд╛ рд╢рдмреНрджрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЖрд╣реЗ? рд╣реЗ рдЦрд░реЛрдЦрд░ рдПрдХ рддрд╛рд░реАрдЦ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрд╕реВ рд╢рдХрддреЗ? рдирдХреНрдХреАрдЪ рдирд╛рд╣реА. рддрд░, рдЖрдореНрд╣реА рдлрдХреНрдд firstName рд╡рд╛рдкрд░рддреЛ. рдорд▓рд╛ рдмреБрд▓рд┐рдпрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪрд╛ рджреЗрдЦреАрд▓ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, flagDeleted рдирд╛рд╡рд╛рдЪреЗ рдмреБрд▓рд┐рдпрди рдШреНрдпрд╛. рдзреНрд╡рдЬ рдпрд╛ рд╢рдмреНрджрд╛рд▓рд╛ рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА. рддреНрдпрд╛рд▓рд╛ isDeleted рдореНрд╣рдгрдгреЗ рдЕрдзрд┐рдХ рд╡рд╛рдЬрд╡реА рдЖрд╣реЗ.

рдбрд┐рд╕рдЗрдиреНрдлреЙрд░реНрдореЗрд╢рди

рдореА рдЪреБрдХреАрдЪреНрдпрд╛ рдирд╛рдордХрд░рдг рдкрджреНрдзрддреАрдВрдмрджреНрджрд▓ рдХрд╛рд╣реА рд╢рдмреНрдж рд╕рд╛рдВрдЧреВ рдЗрдЪреНрдЫрд┐рддреЛ. рд╕рдордЬрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ userActivityList рдирд╛рд╡рд╛рдЪреЗ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЖрд╣реЗ, рдкрдг рд▓рд┐рд╕реНрдЯ рд╣реЛрдгреНрдпрд╛рдРрд╡рдЬреА, рд╣рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛рд╣реА рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ рдкреНрд░рдХрд╛рд░ рдХрд┐рдВрд╡рд╛ рдХрд╕реНрдЯрдо рд╕реНрдЯреЛрд░реЗрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд╣реЗ. рд╣реЗ рд╕рд░рд╛рд╕рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд▓рд╛ рдЧреЛрдВрдзрд│рд╛рдд рдЯрд╛рдХреВ рд╢рдХрддреЗ: рддреНрдпрд╛рд▓рд╛ userActivityGroup рдХрд┐рдВрд╡рд╛ userActivities рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдореНрд╣рдгрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ.

рд╢реЛрдзрд╛

рд▓рд╣рд╛рди рдЖрдгрд┐ рд╕рд╛рдзреНрдпрд╛ рдирд╛рд╡рд╛рдВрдЪрд╛ рдПрдХ рджреЛрд╖ рдореНрд╣рдгрдЬреЗ рддреЗ рдХреЛрдбрдЪреНрдпрд╛ рдореЛрдареНрдпрд╛ рднрд╛рдЧрд╛рдордзреНрдпреЗ рд╢реЛрдзрдгреЗ рдХрдареАрдг рдЖрд╣реЗ тАФ рдХреЛрдгрддреЗ рд╢реЛрдзрдгреЗ рд╕реЛрдкреЗ рд╣реЛрдИрд▓: "рдирд╛рд╡" рдХрд┐рдВрд╡рд╛ "NAME_FOR_DEFAULT_USER"? рджреБрд╕рд░рд╛ рдкрд░реНрдпрд╛рдп, рдЕрд░реНрдерд╛рддрдЪ. рдирд╛рд╡рд╛рдВрдордзреНрдпреЗ рд╡рд╛рд░рдВрд╡рд╛рд░ рдпреЗрдгрд╛рд░реЗ рд╢рдмреНрдж (рдЕрдХреНрд╖рд░реЗ) рдЖрдкрдг рдЯрд╛рд│рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ, рдХрд╛рд░рдг рддреЗ рд╢реЛрдз рджрд░рдореНрдпрд╛рди рдХреЗрд╡рд│ рдЬреБрд│рдгрд╛рд░реНтАНрдпрд╛ рдлрд╛рдпрд▓реАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡рддреАрд▓, рдЬреЗ рдЪрд╛рдВрдЧрд▓реЗ рдирд╛рд╣реА. рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛрдб рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рд╡рд╛рдЪрдгреНрдпрд╛рдд рдЬрд╛рд╕реНрдд рд╡реЗрд│ рдШрд╛рд▓рд╡рддрд╛рдд, рдореНрд╣рдгреВрди рддреБрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреНрдпрд╛ рдШрдЯрдХрд╛рдВрдирд╛ рдирд╛рд╡ рджреЗрдгреНрдпрд╛рдмрд╛рдмрдд рд╣реБрд╢рд╛рд░ рд╡реНрд╣рд╛. рдкрдг рдПрдЦрд╛рджрдВ рдЪрд╛рдВрдЧрд▓рдВ рдирд╛рд╡ рд╕рд╛рдкрдбрд▓рдВ рдирд╛рд╣реА рддрд░? рдЬрд░ рдПрдЦрд╛рджреНрдпрд╛ рдкрджреНрдзрддреАрдЪреЗ рдирд╛рд╡ рддреНрдпрд╛рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╡рд░реНрдгрди рдХрд░рдд рдирд╕реЗрд▓ рддрд░? рдпреЗрдереЗ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд╕реНрдЯреЗрдЬрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛рдд.

рдЯрд┐рдкреНрдкрдгреНрдпрд╛

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

рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреЗ рдкреНрд░рдХрд╛рд░

  • рдХрд╛рдпрджреЗрд╢реАрд░ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рдХрд╛рдпрджреЗрд╢реАрд░ рдХрд╛рд░рдгрд╛рдВрд╕рд╛рдареА рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддреНрд░реЛрдд рдлрд╛рдЗрд▓рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

    * Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
    * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

  • рдорд╛рд╣рд┐рддреАрдкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рдХреЛрдбрдЪреНрдпрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгрд╛рд▒реНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ (рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рд╣рд┐рддреА рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рдХреЛрдбрдЪреНрдпрд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╣реЗрддреВрд╡рд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрдгреЗ).

    рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

    /*
    * Combines the user from the database with the one passed for updating
    * When a field in requestUser is empty, it is filled with old data from foundUser
    */
    private User mergeUser(User requestUser, User foundUser) {
           return new User(
           foundUser.getId(),
           requestUser.getFirstName() == null ? requestUser.getFirstName() : foundUser.getFirstName(),
           requestUser.getMiddleName() == null ? requestUser.getMiddleName() : foundUser.getMiddleName(),
           requestUser.getLastName() == null ? requestUser.getLastName() : foundUser.getLastName(),
           requestUser.getAge() == null ? requestUser.getAge() : foundUser.getAge()
           );
           }

    рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдкрдг рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп рдХрд░реВ рд╢рдХрддрд╛, рдХрд╛рд░рдг рдкрджреНрдзрддреАрдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕, рдЕрддрд┐рд╢рдп рдкрд╛рд░рджрд░реНрд╢рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╣, рд╕реНрд╡рддрдГрдЪреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд.

  • рдЪреЗрддрд╛рд╡рдгреА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рдПрдЦрд╛рджреНрдпрд╛ рдХреГрддреАрдЪреНрдпрд╛ рдЕрдирд┐рд╖реНрдЯ рдкрд░рд┐рдгрд╛рдорд╛рдВрдмрджреНрджрд▓ рдЗрддрд░ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдирд╛ рдЪреЗрддрд╛рд╡рдгреА рджреЗрдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рдЯрд┐рдкреНрдкрдгреА (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЪрд╛рдЪрдгреА @Ignore рдореНрд╣рдгреВрди рдХрд╛ рдЪрд┐рдиреНрд╣рд╛рдВрдХрд┐рдд рдХреЗрд▓реА рдЧреЗрд▓реА рдпрд╛рдмрджреНрджрд▓ рддреНрдпрд╛рдВрдирд╛ рдЪреЗрддрд╛рд╡рдгреА):

    // Takes too long to run
    // Don't run if you don't have a lot of time
    @Ignore
    @Test
    public void someIntegrationTest() {
           тАжтАж
           }

  • TODO - рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЬреНрдпрд╛ рднрд╡рд┐рд╖реНрдпрд╛рдд рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрдгрд╛рд▒реНрдпрд╛ рдПрдЦрд╛рджреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдмрджреНрджрд▓рдЪреА рдиреЛрдВрдж рдЖрд╣реЗ рдЬреА рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ рдЖрддрд╛ рдХрд░рддрд╛ рдпреЗрдд рдирд╛рд╣реА. рд╣реА рдПрдХ рдЪрд╛рдВрдЧрд▓реА рд╕рд░рд╛рд╡ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЧреЛрдВрдзрд│ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдЕрд╢рд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪреЗ рдирд┐рдпрдорд┐рддрдкрдгреЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

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

    // TODO: Add a check for the current user ID (when the security context is created)
    
    @Override
    public Resource downloadFile(File file) {
           return fileManager.download(file);
           }

    рдпреЗрдереЗ рдЖрдореНрд╣реА рд╣реЗ рддрдереНрдп рд▓рдХреНрд╖рд╛рдд рдШреЗрддреЛ рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдСрдкрд░реЗрд╢рди рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреА рддреБрд▓рдирд╛ (рдЬреНрдпрд╛рдЪрд╛ рдЖрдпрдбреА рдЖрдореНрд╣реА рд╕реБрд░рдХреНрд╖рд┐рддрддрд╛ рд╕рдВрджрд░реНрднрд╛рддреВрди рдХрд╛рдвреВ) рдЬреНрдпрд╛рдиреЗ рд╕реЗрд╡реНрд╣ рдСрдкрд░реЗрд╢рди рдХреЗрд▓реЗ рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

  • рдордЬрдмреБрддреАрдХрд░рдг рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рдкрд╣рд┐рд▓реНрдпрд╛ рджреГрд╖реНрдЯреАрдХреНрд╖реЗрдкрд╛рдд рдХреНрд╖реБрд▓реНрд▓рдХ рд╡рд╛рдЯреВ рд╢рдХрддреАрд▓ рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдЪреНрдпрд╛ рдорд╣рддреНрддреНрд╡рд╛рд╡рд░ рдЬреЛрд░ рджреЗрдгрд╛рд▒реНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛.

    рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, рдХрд╛рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕рд╕рд╣ рдЪрд╛рдЪрдгреА рдбреЗрдЯрд╛рдмреЗрд╕ рднрд░рдгрд╛рд▒реНрдпрд╛ рдкрджреНрдзрддреАрдЪрд╛ рдПрдХ рднрд╛рдЧ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреНрдпрд╛:

    Stream.of(IOUtils.resourceToString("/fill-scripts/" + x, StandardCharsets.UTF_8)
           .trim()
           .split(";"))
           .forEach(jdbcTemplate::update);
    // The trim() call is very important. It removes possible spaces at the end of the script
    // so that when we read and split into separate requests, we don't end up with empty ones

  • Javadoc рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╛рдареА API рдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгрд╛рд▒реНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛. рдХрджрд╛рдЪрд┐рдд рд╕рд░реНрд╡рд╛рдд рдЙрдкрдпреБрдХреНрдд рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЖрд╣реЗрдд, рдХрд╛рд░рдг рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг API рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ. рддреЗ рдореНрд╣рдгрд╛рд▓реЗ, рддреЗ рдЗрддрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреАрдкреНрд░рдорд╛рдгреЗ рдЬреБрдиреЗ рджреЗрдЦреАрд▓ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдореНрд╣рдгреВрди, рд╣реЗ рдХрдзреАрд╣реА рд╡рд┐рд╕рд░реВ рдирдХрд╛ рдХреА рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдгрд╛рддреАрд▓ рдореБрдЦреНрдп рдпреЛрдЧрджрд╛рди рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рдирд╛рд╣реА рддрд░ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдХреЛрдбрджреНрд╡рд╛рд░реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ.

    рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдмрд░реНтАНрдпрд╛рдкреИрдХреА рд╕рд╛рдорд╛рдиреНрдп рдкрджреНрдзрддреАрдЪреЗ рдпреЗрдереЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ:

    /**
    * Updates the passed fields for a user based on its id.
         *
    * @param id id of the user to be updated
    * @param user user with populated fields for updating
    * @return updated user
    */
           User update(Long id, User user);

рд╡рд╛рдИрдЯ рдЯрд┐рдкреНрдкрдгреНрдпрд╛

  • рдЧреБрд│рдЧреБрд│реАрдд рдЯрд┐рдкреНрдкрдгреА тАФ рдЬреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдШрд╛рдИрдд рд▓рд┐рд╣рд┐рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдЬреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдХреЗрд╡рд│ рддреНрдпрд╛ рд▓рд┐рд╣рд┐рдгрд╛рд▒реНрдпрд╛ рд╡рд┐рдХрд╕рдХрд╛рд▓рд╛рдЪ рд╕рдордЬрддреЛ, рдХрд╛рд░рдг рдЯрд┐рдкреНрдкрдгреА рдЬреНрдпрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рддреА рд╕реВрдХреНрд╖реНрдо рдкрд░рд┐рд╕реНрдерд┐рддреА рдХреЗрд╡рд│ рддреНрдпрд╛рд▓рд╛рдЪ рдХрд│рддреЗ.

    рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛:

    public void configureSomeSystem() {
           try{
           String configPath = filesLocation.concat("/").concat(CONFIGURATION_FILE);
           FileInputStream stream = new FileInputStream(configPath);
           } catch (FileNotFoundException e) {
           // If there is no configuration file, the default configuration is loaded
          }
    }

    рдпрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХреЛрдг рд▓реЛрдб рдХрд░рддрд╛рдд? рддреЗ рдЖрдзреАрдЪ рд▓реЛрдб рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд? рдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдЕрдкрд╡рд╛рдж рдкрдХрдбрдгреЗ рдЖрдгрд┐ рдбреАрдлреЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рд▓реЛрдб рдХрд░рдгреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрд╣реЗ рдХрд╛? рдмрд░реЗрдЪ рдкреНрд░рд╢реНрди рдЙрджреНрднрд╡рддрд╛рдд рдЬреНрдпрд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рдХреЗрд╡рд│ рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рдЗрддрд░ рднрд╛рдЧрд╛рдВрдЪреНрдпрд╛ рддрдкрд╛рд╕рдгреАрджреНрд╡рд╛рд░реЗ рджрд┐рд▓реА рдЬрд╛рдК рд╢рдХрддрд╛рдд.

  • рд░рд┐рдбрдВрдбрдВрдЯ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ - рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЬреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╢рдмреНрджрд╛рд░реНрдерд╛рдЪрд╛ рднрд╛рд░ рдШреЗрдд рдирд╛рд╣реАрдд, рдХрд╛рд░рдг рдХреЛрдбрдЪреНрдпрд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдд рдХрд╛рдп рдШрдбрдд рдЖрд╣реЗ рддреЗ рд╡рд┐рдкреБрд▓рдкрдгреЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рдЯрд┐рдкреНрдкрдгреА рд╡рд╛рдЪрдгреЗ рдХреЛрдбрдкреЗрдХреНрд╖рд╛ рд╕реЛрдкреЗ рдирд╛рд╣реА.

    рдЪрд▓рд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ:

    public class JdbcConnection{
    public class JdbcConnection{
       /**
        * The logger associated with the current class
        */
       private Logger log = Logger.getLogger(JdbcConnection.class.getName());
    
       /**
        * Creates and returns a connection using the input parameters
        */
       public static Connection buildConnection(String url, String login, String password, String driver) throws Exception {
           Class.forName(driver);
           connection = DriverManager.getConnection(url, login, password);
           log.info("Created connection with db");
           return connection;
       }

    рдЕрд╢рд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪрд╛ рдЕрд░реНрде рдХрд╛рдп рдЖрд╣реЗ? рддреЗ рдЬреЗ рдХрд╛рд╣реА рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛рдд рддреЗ рдЖрдзреАрдЪ рдкреВрд░реНрдгрдкрдгреЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ.

  • рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЯрд┐рдкреНрдкрдгреНрдпрд╛ - рдЦреЛрдЯреНрдпрд╛ рдЖрдгрд┐ рдХреЗрд╡рд│ рджрд┐рд╢рд╛рднреВрд▓ рдХрд░рдгрд╛рд▒реНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ (рдЕрд╕рддреНрдп). рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпреЗрдереЗ рдПрдХ рдЖрд╣реЗ.

    /**
    * Helper method. Closes the connection with the scanner if isNotUsing is true
    */
    private void scanClose(Scanner scan, boolean isNotUsing) throws Exception {
       if (!isNotUsing) {
           throw new Exception("The scanner is still in use");
       } scan.close();
    }

    рдпрд╛ рдЯрд┐рдкреНрдкрдгреАрдд рдХрд╛рдп рдЪреВрдХ рдЖрд╣реЗ? рд╣реЗ рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдереЛрдбреЗ рдЦреЛрдЯреЗ рдЖрд╣реЗ, рдХреА рдЬрд░ isNotUsing рдЦреЛрдЯреЗ рдЕрд╕реЗрд▓ рддрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЙрд▓рдЯ рдирд╛рд╣реА, рдЬрд╕реЗ рдХреА рдЯрд┐рдкреНрдкрдгреА рдЖрдореНрд╣рд╛рд▓рд╛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ.

  • рдЕрдирд┐рд╡рд╛рд░реНрдп рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рдЬреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рдорд╛рдирд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд (рдЙрджрд╛. Javadoc рдЯрд┐рдкреНрдкрдгреНрдпрд╛), рдкрд░рдВрддреБ рддреНрдпрд╛ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдЬрд╛рд╕реНрдд рдкреНрд░рдорд╛рдгрд╛рдд рдЬрдорд╛ рд╣реЛрддрд╛рдд рдЖрдгрд┐ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЖрдгрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрд╕рддрд╛рдд (рдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд рдХрд╛ рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ).

  • рдЙрджрд╛рд╣рд░рдг:

    /**
    * Create a user based on the parameters
    * @param firstName first name of the created user
    * @param middleName middle name of the created user
    * @param lastName last name of the created user
    * @param age age of the created user
    * @param address address of the created user
    * @return user that was created
    */
    User createNewUser(String firstName, String middleName, String lastName, String age, String address);

    рдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрд╢рд┐рд╡рд╛рдп рдкрджреНрдзрдд рдХрд╛рдп рдХрд░рддреЗ рд╣реЗ рддреБрдореНрд╣реА рд╕рдордЬреВ рд╢рдХрд╛рд▓ рдХрд╛? рдмрд╣реБрдзрд╛, рд╣реЛрдп, рдореНрд╣рдгреВрди рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдпреЗрдереЗ рдирд┐рд░рд░реНрдердХ рдард░рддрд╛рдд.

  • рд▓реЙрдЧ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЬреНрдпрд╛ рдХрд╛рд╣реА рд╡реЗрд│рд╛ рдореЙрдбреНрдпреВрд▓рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рддреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рддреЗрд╡реНрд╣рд╛ рдЬреЛрдбрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд (рдмрджрд▓ рд▓реЙрдЧ рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА).

    /**
    * Records kept since January 9, 2020;
    **********************************************************************
    * 9 Jan 2020: Providing a database connection using JDBC Connection;
    * 15 Jan 2020: Adding DAO-level interfaces for working with the database;
    * 23 Jan 2020: Adding integration tests for the database;
    * 28 Jan 2020: Implementation of DAO-level interfaces;
    * 1 Feb 2020: Development of interfaces for services,
    * in accordance with the requirements specified in user stories;
    * 16 Feb 2020: Implementation of service interfaces
    * (implementation of business logic related to the work of the database);
    * 25 Feb 2020: Adding tests for services;
    * 8 Mar 2020: Celebration of International Women's Day (Terry is drunk again);
    * 21 Mar 2020: Refactoring the service layer;
    */

    рд╣рд╛ рджреГрд╖реНрдЯреАрдХреЛрди рдПрдХрджрд╛ рдиреНрдпрд╛рдпреНрдп рд╣реЛрддрд╛, рдкрд░рдВрддреБ рдЖрд╡реГрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, Git) рдЪреНрдпрд╛ рдЖрдЧрдордирд╛рдиреЗ, рддреЛ рдХреЛрдбрдЪрд╛ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЧреЛрдВрдзрд│ рдЖрдгрд┐ рдЧреБрдВрддрд╛рдЧреБрдВрдд рдмрдирд▓рд╛.

  • рд▓реЗрдЦрдХрддреНрд╡ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ тАФ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЬреНрдпрд╛рдВрдЪрд╛ рдЙрджреНрджреЗрд╢ рдХреЛрдб рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рд╡реНрдпрдХреНрддреАрд▓рд╛ рд╕реВрдЪрд┐рдд рдХрд░рдгреЗ рдЖрд╣реЗ, рдЬреЗрдгреЗрдХрд░реВрди рддреБрдореНрд╣реА рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА/рддрд┐рдЪреНрдпрд╛рд╢реА рд╕рдВрдкрд░реНрдХ рд╕рд╛рдзреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдХрд╕реЗ, рдХрд╛рдп рдЖрдгрд┐ рдХрд╛ рдЪрд░реНрдЪрд╛ рдХрд░реВ рд╢рдХрддрд╛, рдЙрджрд╛:

    * @author Bender Bending

    рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛, рдЖрд╡реГрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЗ рдХреА рдХреЛрдбрдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдмрд┐рдЯ рдХреЛрдгреА рдЖрдгрд┐ рдХрдзреА рдЬреЛрдбрд▓рд╛, рдореНрд╣рдгреВрди рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

  • рдХреЙрдореЗрдВрдЯ-рдЖрдЙрдЯ рдХреЛрдб тАФ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреБрд╕рд░реНтАНрдпрд╛ рдХрд╛рд░рдгрд╛рд╕реНрддрд╡ рдЯрд┐рдкреНрдкрдгреА рдХреЗрд▓реЗрд▓рд╛ рдХреЛрдб. рд╣реА рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рд╕рд╡рдпреАрдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг рдХрд╛рдп рд╣реЛрддреЗ рдХреА рддреБрдореНрд╣реА рдПрдЦрд╛рджреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрд╡рд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рддрд╛ рдЖрдгрд┐ рддреА рд╡рд┐рд╕рд░рддрд╛, рдЖрдгрд┐ рдирдВрддрд░ рдЗрддрд░ рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рддреА рд╣рдЯрд╡рдгреНрдпрд╛рдЪреЗ рдзреИрд░реНрдп рдирд╕рддреЗ (рдЕрдЦреЗрд░, рддреЗ рдХрд╛рд╣реАрддрд░реА рдореМрд▓реНрдпрд╡рд╛рди рдЕрд╕рд▓реНрдпрд╛рд╕ рдХрд╛рдп?).

    //    public void someMethod(SomeObject obj) {
    //    .....
    //    }

    рдкрд░рд┐рдгрд╛рдореА, рдЯрд┐рдкреНрдкрдгреА рдХреЗрд▓реЗрд▓рд╛ рдХреЛрдб рдХрдЪрд▒реНрдпрд╛рд╕рд╛рд░рдЦрд╛ рдЬрдорд╛ рд╣реЛрддреЛ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЖрдкрдг рдЕрд╕рд╛ рдХреЛрдб рд╕реЛрдбреВ рдирдпреЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЦрд░реЛрдЦрд░ рдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрд╡реГрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реАрдмрджреНрджрд▓ рд╡рд┐рд╕рд░реВ рдирдХрд╛.

  • рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ - рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдЬреНрдпрд╛ рдПрдЦрд╛рджреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдЪреЗ рдЕрддреНрдпрдВрдд рдХреНрд▓рд┐рд╖реНрдЯ рдкрджреНрдзрддреАрдиреЗ рд╡рд░реНрдгрди рдХрд░рддрд╛рдд.

    /*
        * Start with an array large enough to store
        * all the data bytes (plus filter bytes) with a cushion, plus 300 bytes
        * for header data
        */
    this.dataBytes = new byte[(this.size * (this.deep + 1) * 2)+300];

    рдЯрд┐рдкреНрдкрдгреАрдиреЗ рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рдХреЗрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ. рддреНрдпрд╛рд▓рд╛ рд╕реНрд╡рддрдГрдЪ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╛рдЪреА рдЧрд░рдЬ рдирд╕рд╛рд╡реА. рдордЧ рдЗрдереЗ рдХрд╛рдп рдЪреВрдХ рдЖрд╣реЗ? "рдлрд┐рд▓реНрдЯрд░ рдмрд╛рдЗрдЯреНрд╕" рдореНрд╣рдгрдЬреЗ рдХрд╛рдп? рддреЗ "+1" рдХрд╢рд╛рдмрджреНрджрд▓ рдЖрд╣реЗ? рдирдХреНрдХреА 300 рдХрд╛?

рдЖрдкрдг рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреЗ рдЖрдзреАрдЪ рдард░рд╡рд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдпреЗрдереЗ рдХрд╛рд╣реА рдЯрд┐рдкрд╛ рдЖрд╣реЗрдд:
  1. рджреЗрдЦрд░реЗрдЦреАрд╕рд╛рдареА рд╕реЛрдкреНрдпрд╛ рд╢реИрд▓реАрдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рд╛: рдЕрддрд┐рд╢рдп рдлреЕрдиреНрд╕реА рдЖрдгрд┐ рд╡рд┐рджреЗрд╢реА рд╢реИрд▓реАрдЪреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдгреЗ рддреНрд░рд╛рд╕рджрд╛рдпрдХ рдЖрдгрд┐ рд╡реЗрд│рдЦрд╛рдК рдЖрд╣реЗ.
  2. рдПрдХрд▓ рдУрд│реАрдВрдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрдгрд╛рд▒реНрдпрд╛ рдУрд│реАрдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд╡рд╛рдкрд░реВ рдирдХрд╛: рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгрдЬреЗ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдЪрд╛ рдореЛрдард╛ рдвреАрдЧ. рдЗрддрдХреЗрдЪ рдХрд╛рдп, рдкреНрд░рддреНрдпреЗрдХ рдУрд│реАрд╕рд╛рдареА рдЕрд░реНрдердкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреЗ рдХрдареАрдг рдЖрд╣реЗ.
  3. рддреБрдореНрд╣реА рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рд╣рд┐рддрд╛ рддреЗрд╡реНрд╣рд╛, "рдХрд╕реЗ" рдирд╛рд╣реА рддрд░ "рдХрд╛" рдкреНрд░рд╢реНрдирд╛рдЪреЗ рдЙрддреНрддрд░ рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛.
  4. рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдорд╛рд╣рд┐рддреА рдЯрд╛рд│рд╛. рдореА рд╡рд░ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЯрд┐рдкреНрдкрдгреАрд╕рд╛рдареА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА: рдЯрд┐рдкреНрдкрдгреА рд╕реНрд╡рддрдГрдЪ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдЖрд╣реЗ.
  5. рддреБрдореНрд╣реА рдПрдХрдХ рдЖрдгрд┐ рдореВрд▓реНрдп рд╢реНрд░реЗрдгреА рдЯрд┐рдкрдгреНрдпрд╛рд╕рд╛рдареА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.
  6. рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рддреНрдпрд╛рдВрдиреА рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЛрдбрдЪреНрдпрд╛ рдЬрд╡рд│ рдареЗрд╡рд╛.
рд╢реЗрд╡рдЯреА, рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдЬреВрдирд╣реА рдЖрдард╡рдг рдХрд░реВрди рджреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рдЯрд┐рдкреНрдкрдгреА рд╣реА рдХреЛрдгрддреАрд╣реА рдЯрд┐рдкреНрдкрдгреА рдирд╛рд╣реА, рддрд░ рддреБрдордЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдордзреНрдпреЗ рдХреБрд╢рд▓ рдирд╛рдордХрд░рдгрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЖрд╣реЗ. рдирд┐рдпрдорд╛рдиреБрд╕рд╛рд░, рдмрд╣реБрддреЗрдХ рд╡реЗрд│рд╛ рдЖрдореНрд╣реА рд╡рд┐рджреНрдпрдорд╛рди рдХреЛрдбрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ, рддреНрдпрд╛рдЪреА рджреЗрдЦрднрд╛рд▓ рдЖрдгрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реВ. рдЬреЗрд╡реНрд╣рд╛ рд╣рд╛ рдХреЛрдб рд╡рд╛рдЪрдгреНрдпрд╛рд╕ рдЖрдгрд┐ рд╕рдордЬрдгреНрдпрд╛рд╕ рд╕реЛрдкрд╛ рдЕрд╕рддреЛ рддреЗрд╡реНрд╣рд╛ рддреЗ рдЕрдзрд┐рдХ рд╕реЛрдпреАрдЪреЗ рдЕрд╕рддреЗ, рдХрд╛рд░рдг рдЦрд░рд╛рдм рдХреЛрдб рдПрдХ рдЕрдбрдерд│рд╛ рдЖрд╣реЗ. рд╣реЗ рдХрд╛рдорд╛рдд рдкрд╛рдирд╛ рдЯрд╛рдХрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдШрд╛рдИ рд╣рд╛ рддреНрдпрд╛рдЪрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕реВ рд╕рд╛рдереАрджрд╛рд░ рдЖрд╣реЗ. рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЬрд┐рддрдХрд╛ рд╡рд╛рдИрдЯ рдХреЛрдб рдЕрд╕реЗрд▓ рддрд┐рддрдХреА рдХрд╛рдордЧрд┐рд░реА рдХрдореА рд╣реЛрддреЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡реЗрд│реЛрд╡реЗрд│реА рд░рд┐рдлреЕрдХреНрдЯрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдкрд░рдВрддреБ рдЬрд░ рддреБрдореНрд╣реА рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрдирдЪ рдХреЛрдб рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛ рдЬреНрдпрд╛рдореБрд│реЗ рдкреБрдвреАрд▓ рдбреЗрд╡реНрд╣рд▓рдкрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╢реЛрдзреВрди рдорд╛рд░реВрди рдЯрд╛рдХреВ рдЗрдЪреНрдЫрд┐рдд рдирд╕рддреАрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╡рд╛рд░рдВрд╡рд╛рд░ рд░рд┐рдлреЕрдХреНрдЯрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рднрд╛рд╕рдгрд╛рд░ рдирд╛рд╣реА. рдкрд░рдВрддреБ рддрд░реАрд╣реА рддреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓, рдХрд╛рд░рдг рдирд╡реАрди рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЖрдгрд┐ рдХрдиреЗрдХреНрд╢рдирдЪреНрдпрд╛ рдЬреЛрдбрдгреАрд╕рд╣ рдЙрддреНрдкрд╛рджрдирд╛рдЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕рддрдд рдмрджрд▓рдд рдЕрд╕рддрд╛рдд. рдмрд░рдВ, рдорд▓рд╛ рд╡рд╛рдЯрддрдВ рдЖрдЬ рдорд╛рдЭреНрдпрд╛рд╕рд╛рдареА рдПрд╡рдврдВрдЪ рдЖрд╣реЗ. рдЖрддрд╛рдкрд░реНрдпрдВрдд рд╡рд╛рдЪрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдЪреЗ рдЖрднрд╛рд░ :)
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд