
рд▓рдВрджрди рдореЗрдВ рджреВрд╕рд░реЗ рджрд┐рди, рдбреНрд░реЙрдиреНрдбрдХреЙрди рд╕рдореНрдореЗрд▓рди рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред Redux, MVI, рдмрд┐рд▓реНрдб рд╕реНрдкреАрдб рдФрд░ рдЧреНрд░реИрдбрд▓ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдЬреИрд╕реЗ рдлреИрд╢рдиреЗрдмрд▓ рд╡рд┐рд╖рдп рдкрд╛рд╕ рдирд╣реАрдВ рд╣реБрдПред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдЪреЗрдд рд╣рд╛рд╕реЗ рдФрд░ рд░реЛрдореЗрди рдЧрд╛рдЗ рдиреЗ рд╕реНрдореГрддрд┐ рд╡рд┐рдЦрдВрдбрди рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдЧрд╛рд░рдмреЗрдЬ рдХрд▓реЗрдХреНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреЗ рдорддрднреЗрджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛, рдФрд░ рдЬреЗрдХ рд╡реНрд╣рд╛рд░реНрдЯрди рдиреЗ рдбреИрдЧрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рджреАред
рдЗрд╕ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ, рдореИрдВ рд╕рдореНрдореЗрд▓рди рдХреЗ рдЕрдкрдиреЗ рдЫрд╛рдкреЛрдВ рдФрд░ рдЗрди рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рд▓рдВрджрди рдХреЗ рдбреНрд░реЛрдирдХреЙрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реБрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЙрд╕реНрдХреЛ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреНрд░реЙрдпрдбреЛрди рдмрд░реНрд▓рд┐рди рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рд░реВрд╕реА рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рд╕реНрддрд░, рдЬреИрд╕реЗ рдХрд┐ рдбреНрд░реЙрдпрдбрдХреЙрди, рдореЛрдмрд┐рдпрд╕, рдПрдкреНрд╕рдХреЛрдирдл, рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдХрд╛рдлреА рдмрдврд╝ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рд╡рд╛рддрд╛рд╡рд░рдг, рд╕рдВрдЧрдарди рдХреЗ рд╕реНрддрд░ рдФрд░ рд╡рд┐рджреЗрд╢реА рд╕рдордХрдХреНрд╖реЛрдВ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЛрд░реНрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдмрд╛рддреЗрдВ рдкрд╣рд▓реЗред
рдЯрд┐рдХрдЯ
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдЯрд┐рдХрдЯ рдЦрд░реАрджрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ 230 рдкрд╛рдЙрдВрдб + рд╡реИрдЯ рдХреЗ рд▓рд┐рдП рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдХреАрдордд рд╡реИрдЯ рд╕рд╣рд┐рдд рд▓рдЧрднрдЧ 700 рдкрд╛рдЙрдВрдб рдереАред рд░реВрд╕реА рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдХрд╛рдлреА рдорд╣рдВрдЧрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдФрд╕рддрди рдпрд╣ рдпреВрд░реЛрдк рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХреАрдордд рд╣реИред рдПрдХ рдЙрдбрд╝рд╛рди рдореЗрдВ рд▓рдЧрднрдЧ 30 рд╣рдЬрд╛рд░ рд░реВрдмрд▓ рдХрд╛ рдЦрд░реНрдЪ рдЖрдПрдЧрд╛, рд▓реЗрдХрд┐рди рдкреИрд╕реЗ рдмрдЪрд╛рдиреЗ рдХрд╛ рдПрдХ рдореМрдХрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдХреНрдЯрд░реА рд╡рд╣рд╛рдВ рдЙрдбрд╝ рд░рд╣реА рд╣реИ, рдФрд░ рдЖрдк рдПрдХ рддрд░рд╣ рд╕реЗ рд▓рдЧрднрдЧ 6,000 рд░реВрдмрд▓ рдХреЗ рд▓рд┐рдП рдЯрд┐рдХрдЯ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВред
рдЖрд╡рд╛рд╕
рд╣рдо рдЖрдпреЛрдЬрди рд╕реНрдерд▓ рд╕реЗ 15 рдорд┐рдирдЯ рдХреА рдкреИрджрд▓ рджреВрд░реА рдкрд░ рд░рд╣рддреЗ рдереЗред рд╣реЛрдЯрд▓ рдФрд╕рдд рд╣реИ, рдПрдХ рджрд┐рди рдореЗрдВ рд▓рдЧрднрдЧ 150 рдкрд╛рдЙрдВрдбред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╛рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкреНрд░рддрд┐ рджрд┐рди 20 рдкрд╛рдЙрдВрдб рдХреЗ рд▓рд┐рдП рд╢рд╣рд░ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдХреБрдЫ рдЫрд╛рддреНрд░рд╛рд╡рд╛рд╕ рдореЗрдВ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдЧрдардирд╕рдВрдЧрдарди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╕рдореНрдореЗрд▓рди рдХрд╛рдлреА рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдерд╛ред рдореБрдЭреЗ рд╕реНрд╡рдпрдВ рд╕рд╛рдЗрдЯ рдкрд╕рдВрдж рдЖрдИ: рд╕рдВрдЪрд╛рд░ рдФрд░ рдиреИрддрд┐рдХ рд╡рд┐рд╢реНрд░рд╛рдо, рдЖрд░рд╛рдорджрд╛рдпрдХ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╣реЙрд▓ рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдкрдврд╝реА рдЧрдИ рдереАрдВред рд╣реЙрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдХрдИ рд╕реНрдЯреИрдВрдб рдереЗ рдЬрд╣рд╛рдБ рдЖрдк рдПрдХ рдЬреЛрдбрд╝реА рдкреЗрди рдФрд░ рдЯреА-рд╢рд░реНрдЯ рд▓реЗ рд╕рдХрддреЗ рдереЗред рдкрд╣рд▓реЗ рджрд┐рди рдХреА рд╢рд╛рдо рдХреЛ, рдЖрдпреЛрдЬрдХреЛрдВ рдиреЗ рдПрдХ рдкрд╛рд░реНрдЯреА рдХреАред рдореБрдлреНрдд рдкреЗрдп рдФрд░ рд╕рдВрдЧреАрдд рдереЗ, рд▓реЗрдХрд┐рди рд╣рдо рд▓рдВрджрди рдШреВрдордиреЗ рдЧрдПред

рд░рд┐рдкреЛрд░реНрдЯрдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рджрд┐рд▓рдЪрд╕реНрдк рдЦрдмрд░реЗрдВ рдереАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛рдПрдВ рд▓рдЧрд╛рддрд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЧрдИрдВред
рд▓реЗрдХрд┐рди рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЗ рд╕реНрддрд░ рд╕реЗ рдореБрдЭреЗ рдЕрдзрд┐рдХ рдЙрдореНрдореАрдж рдереАред рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХрд┐рд╕реА рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдШрдЯрдХ рдХреЗ рдмрд┐рдирд╛ рдереЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХреБрдЫ рдПрдкреАрдЖрдИ рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд░реНрдгрдиред рдорд╛рд╕реНрдХреЛ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд╕реНрддрд░ рдХрдо рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИред рдХрдИ рдмрд╣реБрдд рдордЬрдмреВрдд рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдереЗред рдЖрдЧреЗ, рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд░рд╣реЗ рдереЗред
рд░рд┐рдкреЛрд░реНрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХрдХреАрдиреЛрдЯ - рдЯреНрд░реИрд╢ рдЯреЙрдХ: Android рдкрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рд╡рд┐рдХрд╛рд╕
рдЪреЗрдд рд╣рд╛рд╕реЗ рдФрд░ рд░реЛрдореЗрди рдЧрд╛рдЗ, GoogleрдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдореЗрдореЛрд░реА рдореЙрдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕рдореНрдореЗрд▓рди рд╢реБрд░реВ рд╣реБрдЖред рд▓реЛрдЧреЛрдВ рдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рд╡рд┐рд╡рд░рдг рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ
рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рд╕рдВрд╢реЛрдзрди - рдпрд╣ рдХрд┐рддрдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рдПрд▓рд┐рди рдирд┐рд▓реНрд╕рди, рд╕реНрдкреЙрдЯрд┐рдлрд╝рдХрд╛рдлреА рддрдХрдиреАрдХреА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рдкреНрд░реЗрд░рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рд╣реИред рдПрд▓рд┐рди рдиреЗ рдЙрди рдХрд╛рд░рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЕрдЦрдВрдб рдЖрд╡реЗрджрди рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рдпрд╣ рдХрд┐рддрдирд╛ рдХрдард┐рди рдерд╛ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдирд┐рд░реНрдорд╛рдг рдХреА рдЧрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдЖрдпрд╛ред
рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд▓рд┐рдВрдХред
Android рдкрд░ Redux
рдирд┐рд╢ рддрд╛рд╣рд┐рд░, рд╡рд┐рд▓реЛрдЯреНрд░реАрдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдиреЗ рдХрд┐рд╕реА рддрд░рд╣ рдореЗрд░реА рдЖрдБрдЦреЗрдВ Redux рдХреЗ рд▓рд┐рдП рдЦреЛрд▓ рджреАрдВ, рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд▓реЗрдЦрдХ рдиреЗ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рд╛рд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрддрд╛рдпрд╛, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдФрд░ рдХреНрдпрд╛ рдпрд╣ Redux рдХреЛ рдореБрдЦреНрдп рд╡рд╛рд╕реНрддреБ рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдирдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдХрд┐рди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЙрдЪрд┐рдд рд╣реИред
рд░рд┐рдкреЛрд░реНрдЯ рд▓рд┐рдВрдХ
рдЖрдзреБрдирд┐рдХ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ
рдпрдЬреАрдд рдмреЛрдпрд╛рд░ рдФрд░ рдЬреЛрд╕ рдЕрд▓реНрд╕реЗрд░реЗрдХрд╛, рдЧреВрдЧрд▓рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╣реЛрдВрда рд╕реЗ Google рдХреЗ рдЯреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рд╕реБрдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рдХрд╣рд╛, рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рднреА рдкреНрд░рдХрдЯ рдирд╣реАрдВ рд╣реБрдИ, рд▓реЗрдХрд┐рди рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд░рд┐рдкреЛрд░реНрдЯ рд▓рд┐рдВрдХ
рдПрдВрдбреНрд░реЙрдЗрдб рдЧреНрд░реИрдбрд▓ рдкреНрд▓рдЧрд┐рди рдореЗрдВ рдбреАрдк рдбрд╛рдЗрд╡ рдХрд░реЗрдВ
рдЬреЙрди рд░реЛрдбреНрд░рд┐рдЧреЗрдЬ, рд╕реНрдХреНрд╡рд╛рдпрд░ рдХреИрд╢рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рд╕рдореНрдореЗрд▓рди рдореЗрдВ рдЕрдВрддрд┐рдо рдереА, рдФрд░ рдореИрдВ рджрд┐рд▓рдЪрд╕реНрдк рдФрд░ рд╕реВрдЪрдирд╛рддреНрдордХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЬреЙрди рдиреЗ рдмрд╛рд╣рд░ рдЖрдХрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдЧреНрд░реИрдЧрд▓ рдкреНрд▓рдЧрд┐рди рдХреА рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдФрд░ рдХрдЯреНрдЯрд░ рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдИред рдореИрдВ рдЗрд╕реЗ
рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдбреИрдЧрд░ рд╣реЗрд▓реНрдкрд┐рдВрдЧ рд╣реЗрд▓реНрдк рдпреВ
рдЬреЗрдХ рд╡реНрд╣рд╛рд░реНрдЯрди, GoogleрдЬреИрдХ рд╡реНрд╣рд╛рд░реНрдЯрди рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд░рд┐рдкреЛрд░реНрдЯ рдЖрдИред рд╕реНрдХреНрд╡рд╛рдпрд░ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░, рдЙрдиреНрд╣реЛрдВрдиреЗ рдбреИрдЧрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдЖрд╕рд╛рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдП рдЬреЛ рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдм рдмрд┐рд▓реНрдб рд╕реНрдкреАрдб рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдмрд╣реБрдд рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбреИрдЧрд░ рдФрд░ рдмрдЯрд░рдХрд╛рдЗрдлрд╝ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдХреЗрдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдХреНрд╡рд╛рдпрд░ рдиреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдбреИрдЧрд░ рдФрд░ рдмрдЯрд░рдХрд╛рдЗрдиреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐рдмрд┐рдВрдм рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЧрддрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╕рдордп рдмрдЪрд╛рддрд╛ рд╣реИ, рдФрд░ рджреЗрд╡ рдмрд┐рд▓реНрдб рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдпрд╣ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд╡реАрдирддрдо рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рд╕реИрдорд╕рдВрдЧ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдпрд╣ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХрд╛рдо рд╣реИред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╛рдЗрдВрдбрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде рдмрдЯрд░рдХрдиреАрдлрд╝ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ@NonNull @UiThread public static Unbinder bind(@NonNull Object target, @NonNull View source) { List<Unbinder> unbinders = new ArrayList<>(); Class<?> targetClass = target.getClass(); if ((targetClass.getModifiers() & PRIVATE) != 0) { throw new IllegalArgumentException(targetClass.getName() + " must not be private."); } while (true) { for (Field field : targetClass.getDeclaredFields()) { int unbinderStartingSize = unbinders.size(); Unbinder unbinder; unbinder = parseBindView(target, field, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseBindViews(target, field, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseBindDrawable(target, field, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseBindString(target, field, source); if (unbinder != null) unbinders.add(unbinder); ... } for (Method method : targetClass.getDeclaredMethods()) { Unbinder unbinder; unbinder = parseOnCheckedChanged(target, method, source); if (unbinder != null) unbinders.add(unbinder); unbinder = parseOnClick(target, method, source); if (unbinder != null) unbinders.add(unbinder); ... } targetClass = targetClass.getSuperclass(); } return new CompositeUnbinder(unbinders); }
ButterKnife рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдбреИрдЧрд░ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдпрд╣рд╛рдБ рд╣реИ ред
рджреВрд╕рд░реЗ, рдХрднреА-рдХрднреА XML рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд╕реНрдЯрдо рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реЗрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рдерд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХрдирд╛ рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдореЗрдВ, рдЬрдм рдпрд╣ рдПрдХ рджреГрд╢реНрдп рд╕реЗ рдЦреБрдж рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдм рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ: рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд╕реНрдЯрдо рд▓реЗрдЖрдЙрдЯрдЗрдиреНрдлреИрдЯрд░ рдЗрди рдЬрдЯрд┐рд▓ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рджреГрд╢реНрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдХреЛрдб рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
MainActivity.java public final class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MainComponent component = DaggerMainActivity_MainComponent.create(); InflationInjectFactory factory = component.getInjectFactory(); getLayoutInflater().setFactory(factory); setContentView(R.layout.main_activity); GalleryPresenter presenter = component.getGalleryPresenter(); GalleryView view = findViewById(R.id.gallery); presenter.attach(view); } @Component(modules = ViewModule.class) interface MainComponent { InflationInjectFactory getInjectFactory(); GalleryPresenter getGalleryPresenter(); } }
GalleryView рдХреЛ xml рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
GalleryView public final class GalleryView extends LinearLayout { private final ViewUpdater mViewUpdater; @InflationInject public GalleryView(@Assisted Context context, @Assisted AttributeSet attrs, ViewUpdater viewUpdater) { super(context, attrs); mViewUpdater = viewUpdater; } }
рддреАрд╕рд░рд╛, рд╕реНрдХреНрд╡рд╛рдпрд░ рдиреЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдХрд┐ рдСрдЯреЛрд╡реИрд▓реНрдпреВ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рднрд╛рд░реА рдмрд┐рд▓реНрдбрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рдХреЗрд╡рд▓ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЕрдзрд┐рдХрддрдо рд░реВрдк рд╕реЗ рдбреИрдЧрд░ рддрд░реНрдХ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
UserPresenter.java public final class UserPresenter { private final LoadUserInteractor mLoadUserInteractor; private final String mUserId; @AssistedInject UserPresenter(@Assisted LoadUserInteractor loadUserInteractor, @Exclamation String userid) { mLoadUserInteractor = loadUserInteractor; mUserId = userid; } @AssistedInject.Factory public interface Factory { UserPresenter create(String greeting); } ... }
UserActivity.java public final class UserActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_view); UserPresenter.Factory factory = DaggerUserActivity_ UserComponent.create().getUserPresenterFctory(); UserPresenter presenter = factory.create(getIntent().getStringExtra("user_id")); presenter.attach(); ... } @Component(modules = UserModule.class) interface UserComponent { UserPresenter.Factory getUserPresenterFctory(); } }
рдореБрдЭреЗ рдкрд╕рдВрдж рдЖрдпрд╛ рдХрд┐ рдЗрди рд╕рд╛рдордпрд┐рдХ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рднреА рджреЗрдВред
рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рдореИрдВрдиреЗ рд╕рдореНрдореЗрд▓рди рдХреА рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рд╕реЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╕реАрдЦрд╛, рд╡рд┐рднрд┐рдиреНрди рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХреА, рдЬреЛ рдПрдХ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдп рд╕рдореНрдореЗрд▓рди рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдкреНрд▓рд╕ рд╣реИ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдкрд╛рд╕ рдЬрд╛рдирд╛ рд╕рд╛рд░реНрдердХ рд╣реИред рдЗрд╕ рдмрд╛рд░ рдПрдХ рдмреЛрдирд╕ рд▓рдВрджрди рдХреА рдпрд╛рддреНрд░рд╛ рдереАред рдпрджрд┐ рд╣рдо рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдСрдирд▓рд╛рдЗрди рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдпрд╛ рдХрдИ рд░реВрд╕реА рд╕рдореНрдореЗрд▓рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ред