рдПрдорд╡реАрдкреА рдФрд░ рдбреИрдЧрд░ 2 - рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрдВрдХрд╛рд▓ - рднрд╛рдЧ 2

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

рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рдПрдорд╡реАрдкреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдХрдВрдХрд╛рд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ред рдЕрдм рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Dagger 2 рдкреЗрдВрдЪ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

2.1ред рдкреНрд░реАрд╕реЗрдЯ

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, build.gradle рдлрд╝рд╛рдЗрд▓ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ: mymvcapp) рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдХреЛ рдмрд┐рд▓реНрдбрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рдЗрдЯ рдкрд░ рдЬреЛрдбрд╝реЗрдВ:

ext.dagger2_version = "2.8" 

рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдпрд╣ рдбреИрдЧрд░ 2 рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдмрд┐рд▓реНрдб.рдЧреНрд░реЗрдб рдлрд╝рд╛рдЗрд▓ (рдореЙрдбреНрдпреВрд▓: рдРрдк) рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд▓рд╛рдЗрди рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 apply plugin: 'kotlin-kapt' 

рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдбреИрдЧрд░ 2 рдореЗрдВ рдпрд╣ рд╕рдВрдХрд▓рди рдкрд░ рдЕрдкрдирд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗред рдмрд╛рдж рдореЗрдВ рдЖрдк рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпреЛрдВред

рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдЬреЛрдбрд╝реЗрдВ:

 implementation "com.google.dagger:dagger:$dagger2_version" kapt "com.google.dagger:dagger-compiler:$dagger2_version" 

2.2ред рдЗрдВрдЬреЗрдХреНрд╢рди рдХреА рддреИрдпрд╛рд░реА

рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдореЗрдирд╕реНрдХреНрд░реАрди рдШрдЯрдХ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВрдЧреЗред рдмреИрдХрд╕реНрдЯреЗрдЬ рдкреИрдХреЗрдЬ рдореЗрдВ рдПрдХ рдХреНрд▓рд╛рд╕ di.MainScreenModule рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред рдирдИ рдХрдХреНрд╖рд╛ рдореЗрдВ, рд╣рдо рдкреНрд░реЛрд╕реНрдкреЗрдиреНрд╕реЗрдиреНрдЯ () рд╡рд┐рдзрд┐ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдкрд░ рдЕрдорд▓ рдХрд░рддреЗ рд╣реИрдВ: MainScreenPresenter = MainScreenPresenter рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрд╡рд╛рдЗрдбреНрд╕ рдФрд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред рддреЛ рдЕрдм рд╣рдорд╛рд░рд╛ рд╡рд░реНрдЧ рджрд┐рдЦреЗрдЧрд╛:

 @Module class MainScreenModule { @Provides @Singleton fun providesPresenter(): MainScreenPresenter = MainScreenPresenter() } 

рдЕрдм рд╣рдо MainScreenCompatActivity рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬрд╛рдПрдБрдЧреЗ рдФрд░ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдЪрд░ рдХреЗ рдореЙрдбрд┐рдлрд╝рд╛рдпрд░реНрд╕ рдХреЛ рд▓реЗрдЯреАрдирд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ, рдорд╛рди рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдЗрдВрдЬреЗрдХреНрдЯ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ:

 class MainScreen : BaseCompatActivity(), MainScreenContract.View { @Inject lateinit var presenter: MainScreenPresenter override fun init(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main_screen) presenter.attach(this) } } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЪрд░ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдЕрдм рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИ, рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдирд╣реАрдВред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреА рдкрд╣рд▓реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреИрдЧрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдЯрд▓рд┐рди-рдХрдкреНрдЯ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЬреЛрдбрд╝рд╛ред Com.caesar84mx.mymvcapp рдкреИрдХреЗрдЬ рдореЗрдВ, di.config рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо AppDiComponent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВред



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

 @Component( modules = [ MainScreenModule::class ] ) @Singleton interface AppDiComponent { fun inject(mainScreenActivity: MainScreen) } 

рдФрд░ рдЕрдм, рдЖрдкрдХреЛ рдЕрдВрдд рдореЗрдВ рдбреИрдЧрд░ рдХреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо config.di рдкреИрдХреЗрдЬ рдореЗрдВ MyMvpApp рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗ, рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВрдЧреЗ, рд▓рд╛рдЗрди рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ Android: name = "рд▓рд╛рдЗрди рд▓рд┐рдЦрдХрд░" "ред Config.di.yMyppApp" рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреИрдЧ рдореЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╡реИрд░рд┐рдПрдмрд▓ рд▓реЗрдЯреАрдирд┐рдЯ рд╡реИрд░ рдЗрдВрдЬреЗрдХреНрдЯрд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ: AppDiComponent, рдЗрд╕реЗ рдПрдХ рдирд┐рдЬреА рд╕реЗрдЯрд░ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдФрд░ рдСрдирдХреНрд░рд┐рдПрдЯ () рд╡рд┐рдзрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдФрд░ рдЬрд╛рджреВ рд╢реБрд░реВ рдХрд░реЗрдВ:

 class MyMvpApp: Application() { lateinit var injector: AppDiComponent private set override fun onCreate() { super.onCreate() injector = DaggerAppDiComponent.builder() .mainScreenModule(MainScreenModule()) .build() } } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, DaggerAppDiComponent рд╡рд░реНрдЧ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рд╕рд╛рде рд╣реА рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред рд╡рд░реНрдЧ рдирд╛рдо "рдбреИрдЧрд░" + рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирд╛рдо рд╕реЗ рдмрдирд╛ рд╣реИред MainScreenModule () рд╡рд┐рдзрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рднреА рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА, рдирд╛рдо рдХреЛ рдирд┐рдореНрди рдирд╛рдо рдХреЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╢реНрд░реЗрдгреА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓ (рдмрд┐рд▓реНрдб тЖТ рдореЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ)ред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ рдФрд░ рдЬрд╛рд░реА рд░рдЦреЗрдВред

2.3ред рдЗрдВрдЬреЗрдХреНрд╢рди

рдзреНрдпрд╛рди рджреЗрдВ: рдЖрдЧреЗ, рдХреБрдЫ рдирд░реНрддрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╢реНрд▓реАрд▓ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдиреГрддреНрдп рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрдЪреНрдЪреЛрдВ рдФрд░ рдирд░реНрд╡рд╕ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдХреНрд░реАрди рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдзред

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

 class MyMvpApp: Application() { lateinit var injector: AppDiComponent private set override fun onCreate() { super.onCreate() INSTANCE = this injector = DaggerAppDiComponent.builder() .mainScreenModule(MainScreenModule()) .build() } companion object { private var INSTANCE: MyMvpApp? = null @JvmStatic fun get(): MyMvpApp = INSTANCE!! } } 

рдирд┐рд░реНрд╡рд╛рд╕рд┐рдд, рдореЗрдирд╕реНрдХреНрд░реАрди рд╡рд░реНрдЧ рдореЗрдВ рд▓реМрдЯ рдЖрдпрд╛ред рдЕрдм, рд╣рдорд╛рд░реЗ рдкреНрд░рд╕реНрддреБрддрдХрд░реНрддрд╛ рдХреЛ init () рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░реЗрдВред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЗрдВрдЬреЗрдХреНрдЯ рдЪрд░ рдХреЗ рдкрд╣рд▓реЗ рдкрд╣реБрдВрдЪ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдЕрдм рд╣рдорд╛рд░рд╛ рд╡рд░реНрдЧ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 class MainScreen : BaseCompatActivity(), MainScreenContract.View { @Inject lateinit var presenter: MainScreenPresenter override fun init(savedInstanceState: Bundle?) { setContentView(R.layout.activity_main_screen) MyMvpApp.get().injector.inject(this) presenter.attach(this) } } 

рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рдкреВрд░реА рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ:



2.4ред рдирд┐рд╖реНрдХрд░реНрд╖

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

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

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


All Articles