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

рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ, VIPER рдХреА рддрд░рд╣ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓, рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░, рдЗрдВрдЯрд░реЗрдХреНрдЯрд░, рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рд╣реИрдВред

рдЙрдирдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдЪрдХреНрд░реЛрдВ рдореЗрдВ рд╣реЛрддреА рд╣реИред рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ (рдлрд┐рд░ рд╕реЗ, VIPER рдХреЗ рд╕рдорд╛рди), рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рддрдЪреАрдд рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рджреЗрдЦреЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдПрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЗрдВрдЯрд░реЗрдХреНрдЯрд░, рдПрдХ рдкрд░рд┐рдгрд╛рдо рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕реНрд╡рд░реВрдкрд┐рдд рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВред
рджреЗрдЦреЗрдВ (рдирд┐рдпрдВрддреНрд░рдХ рджреЗрдЦреЗрдВ)
рджреЗрдЦреЗрдВ рдирд┐рдпрдВрддреНрд░рдХ, рдЬреИрд╕рд╛ рдХрд┐ VIPER рдореЗрдВ рд╣реИ, рд╕рднреА VIew рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд░рдВрдЧ, UILabel рдпрд╛ рд▓реЗрдЖрдЙрдЯ рдлрд╝реЙрдиреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ UIViewController рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдирдкреБрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
Interactor
рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдореЗрдВ рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдЗрдирдкреБрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдкрд╛рда, рдПрдХ рдмрдЯрди рджрдмрд╛рдиреЗ) рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд▓реЙрдЬрд┐рдХ рдХреЛ рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрдВрдЯрд░рдПрдХреНрдЯрд░, рд╡реНрдпреВрдСрди рдХрдВрдЯреНрд░реЛрд▓рд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рдХреА рддреИрдпрд╛рд░реА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд╣рднрд╛рдЧрд┐рддрд╛рдХрд░реНрддрд╛ рдХреЗрд╡рд▓ VIP рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдп рд╕реЗ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпреЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛
рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо ViewController рдХреЗ рдЗрдирдкреБрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдпрд╣рд╛рдВ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд░рдВрдЧ рдорд╛рди рдХреЛ рдПрдирдо рд╕реЗ рдЖрд░рдЬреАрдмреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред
рдордЬрд╝рджреВрд░
рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рди рдХрд░рдиреЗ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рдирдХрд▓ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд░реНрдХрд░ рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд░рд▓ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ, рдЗрд╕рдХреА рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдпрд╣ рдЖрдкрдХреЛ рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд╛ рддрд░реНрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдПрдХ рд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд░реВрдЯрд░
рд░рд╛рдЙрдЯрд░ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓реЛрдВ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдИрдУрдПрд╕ рдореЗрдВ, рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, рдирд┐рдпрдВрддреНрд░рдХ, рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред рд╕реЗрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреИрдпрд╛рд░реА рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдЯрд░ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╕реЗрдЧ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрдЬрд╝рд┐рд╢рди рдХреЗ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд░рд╛рдЙрдЯрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдирд╛ рдЬрд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ / рдкреНрд░реЗрдЬреЗрдВрдЯрд░ рд╕реЗ рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд▓реВрдк рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ред рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд░рд╛рдЙрдЯрд░ рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рднреА рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдореЙрдбрд▓
рдореЙрдбрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реИред рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдореЙрдбрд▓реЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред
- рдЕрдиреБрд░реЛрдз - рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рддрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред
- рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ - рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ред
- ViewModel - рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдПрдХ рдлреЙрд░реНрдо рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдПред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрджрд╛рд╣рд░рдг
рдЖрдЗрдП рдПрдХ рд╕рд░рд▓
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрд░реНрдХрдкреБрд╕реНрддрд┐рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕рд░рд▓реАрдХреГрдд рд░реВрдк рдореЗрдВ рдкрд░реЛрд╕рд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд░реВрдк рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рд╕рд╛рде рд╣реА рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЗрдирдкреБрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
protocol ContactListDisplayLogic: class { func displayContacts(viewModel: ContactList.ShowContacts.ViewModel) }
рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
var interactor: ContactListBusinessLogic?
рд╕рд╛рде рд╣реА рд░рд╛рдЙрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ рдореЙрдбреНрдпреВрд▓ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
var router: (NSObjectProtocol & ContactListRoutingLogic & ContactListDataPassing)?
рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рдирд┐рдЬреА рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
private func setup() { let viewController = self let interactor = ContactListInteractor() let presenter = ContactListPresenter() let router = ContactListRouter() viewController.interactor = interactor viewController.router = router interactor.presenter = presenter presenter.viewController = viewController router.viewController = viewController router.dataStore = interactor }
рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕рдХрд░реНрддрд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдПрдВ (рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рд▓реБрднрд╛рдПрдВ рдирд╣реАрдВред рдЕрдВрдХрд▓ рдмреЙрдм рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдХреНрд▓рд╛рд╕рд┐рдХ VIPER рдореЗрдВ рдХреЛрдИ рд╡рд┐рдиреНрдпрд╛рд╕рдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИред рдРрдб рд╕рдВрдкрд░реНрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕рдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
override func awakeFromNib() { super.awakeFromNib() AddContactConfigurator.sharedInstance.configure(self) }
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕реЗрдЯрдЕрдк рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ:
final class AddContactConfigurator { static let sharedInstance = AddContactConfigurator() private init() {} func configure(_ control: AddContactViewController) { let viewController = control let interactor = AddContactInteractor() let presenter = AddContactPresenter() let router = AddContactRouter() viewController.interactor = interactor viewController.router = router interactor.presenter = presenter presenter.viewController = viewController router.viewController = viewController router.dataStore = interactor } }
рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рдФрд░ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╕реЗрдЧ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддреИрдпрд╛рд░ рдореЗрдВ рдХреЛрдб рд╣реИ:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let scene = segue.identifier { let selector = NSSelectorFromString("routeTo\(scene)WithSegue:") if let router = router, router.responds(to: selector) { router.perform(selector, with: segue) } } }
рдПрдХ рдЪреМрдХрд╕ рдкрд╛рдардХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд░рд╛рдЙрдЯрд░ рднреА NSObjectProtocol рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд░рд╛рдЙрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХреЗрдВред рдЗрд╕ рд╕рд░рд▓ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реЗрдЧ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдордХрд░рдг рд░рд╛рдЙрдЯрд░ рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдЕрдВрдд рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╕рдВрдкрд░реНрдХ рдХреЛ рджреЗрдЦрдиреЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реЗрдЧ рд╣реИ, рдЬреЛ рд╕рдВрдкрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд▓ рдХреА рдкрд╕рдВрдж рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ "ViewContact" рд╣реИ, рдпрд╣рд╛рдБ рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдЗрд╕реА рд╡рд┐рдзрд┐ рд╣реИ:
func routeToViewContact(segue: UIStoryboardSegue?)
рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рднреА рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ:
private func fetchContacts() { let request = ContactList.ShowContacts.Request() interactor?.showContacts(request: request) }
рдЖрдЗрдП рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдкрд░ рдЬрд╛рдПрдВред рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ ContactListDataStore рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд / рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ рд░рд╛рдЙрдЯрд░ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ, рд░рд╛рдЙрдЯрд░ рдХреЛ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЕрдХреНрд╖рдорддрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдорд╛рд░реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
func showContacts(request: ContactList.ShowContacts.Request) { let contacts = worker.getContacts() self.contacts = contacts let response = ContactList.ShowContacts.Response(contacts: contacts) presenter?.presentContacts(response: response) }
рдпрд╣ ContactListWorker рд╕реЗ рд╕рдВрдкрд░реНрдХ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╡рд╣ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрдиреЗ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдВрдЯрд░рдПрдХреНрдЯрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯрд░ рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИ:
var presenter: ContactListPresentationLogic?
рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ - ContactListPresentationLogic, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрдкрд░реНрдХ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдЕрдВрддрд┐рдо рдирд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдЬрдмрд░рди рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╕реЗ DisplayContact рдкреНрд░рд╕реНрддреБрддрд┐ рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдкрд╛рд╕ рдЬрд╛рддрд╛ рд╣реИ:
func presentContacts(response: ContactList.ShowContacts.Response) { let mapped = response.contacts.map { ContactList .ShowContacts .ViewModel .DisplayedContact(firstName: $0.firstName.uppercaseFirst, lastName: $0.lastName.uppercaseFirst) } let viewModel = ContactList.ShowContacts.ViewModel(displayedContacts: mapped) viewController?.displayContacts(viewModel: viewModel) }
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЪрдХреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓рд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреЙрдиреНрдЯреИрдХреНрдЯрд▓рд┐рд╕реНрдЯрдкреНрд▓реЗрдкреНрд▓реЗрдЬрд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ:
func displayContacts(viewModel: ContactList.ShowContacts.ViewModel) { displayedContacts = viewModel.displayedContacts tableView.reloadData() }
рд╕рдВрдкрд░реНрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
enum ShowContacts { struct Request { } struct Response { var contacts: [Contact] } struct ViewModel { struct DisplayedContact { let firstName: String let lastName: String var fullName: String { return firstName + " " + lastName } } var displayedContacts: [DisplayedContact] } }
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдореЗрдВ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рд╕реНрдХреНрд░реАрди рдореЗрдВ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реЛрдЧрд╛, рддреЛ рдЗрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдВрдЯреНрд░реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЙрдбрд▓ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рд╢рд╛рдорд┐рд▓ рд╣реИ, ViewModel рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ - DisplayCContactред
рдХреНрдпреЛрдВ рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ
рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдХреЛрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред рдпреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдИ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм рд╡реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрддреЗ рд╣реИрдВ - рддреЛ рдпрд╣ рдХрдо рд╕реЗ рдХрдо рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рдХрдИ рдШрдВрдЯреЗ рдмрдЪрд╛рддрд╛ рд╣реИред
рджреВрд╕рд░реЗ, рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рдЬреИрд╕реЗ VIPER, рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЪреВрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рд╕реНрдЯрдм рд╕реЗ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдирд╛ рдЖрдкрдХреЛ рд╕рд┐рд░рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдПрдХ рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реАрдХреНрд╖рдг (рдЗрдВрдЯрд░реЗрдХреНрдЯрд░, рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ рдкрд░реАрдХреНрд╖рдг) рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЯреАрдбреАрдбреА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рддрд░реНрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдЗрдирдкреБрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реАрдзреЗ рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
рддреАрд╕рд░рд╛, рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ (VIPER рдХреЗ рд╡рд┐рдкрд░реАрдд) рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рдПрдХ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪрдХреНрд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рджреЗрдЦреЗрдВ - рдЗрдВрдЯрд░реЗрдХреНрдЯрд░ - рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ - рджреЗрдЦреЗрдВ, рдЬреЛ рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЛ рднреА рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрдо рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рд▓реЙрдЬрд┐рдХ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдЬреЛ рдЕрдХреНрд╕рд░ рдмрджрд▓рддреА рд╣реИрдВ рдпрд╛ рдкреВрд░рдХ рд╣реЛрддреА рд╣реИрдВ, рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддреА рд╣реИрдВред рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ:
- рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ
- рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдзреЛрдВ / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ / рдпреВрдЖрдИ рдореЙрдбрд▓ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЕрдкрдирд╛ рддрд░реНрдХ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд┐рдП рдмрд┐рдирд╛ред
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреЗ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕реНрд╡рдЪреНрдЫ рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрд╡рд▓рдкрд░ рд╕рдореНрдореЗрд▓рди рдХреА рдЕрдиреБрд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ, рдХрдИ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рд╣реЛрддреА рд╣реИрдВред рдХреНрд▓реАрди рд╕реНрд╡рд┐рдлреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреЛ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ - рдореИрдХ рдУрдПрд╕ рдФрд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╛ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред