рдХреЛрдб рдЬреАрд╡рд┐рдд рдФрд░ рдореГрдд рд╣реИред рднрд╛рдЧ рджреЛ рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЧреБрдг

рдкрд┐рдЫрд▓реА рдмрд╛рд░, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд╛рдо рдмрд╣реБрдд рдорд╣рддреНрд╡ рдХреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рд╕реЗ рдФрд░ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмреБрд░рд╛ рдирд╛рдо рдбрд░рд╛рддрд╛ рд╣реИ рдФрд░ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдХреНрдпрд╛ рд╣реИ?


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


рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рд▓реЗрдЦ рдореЗрдВред


рд╕рд╛рдордЧреНрд░реА рдХреА рдЪрдХреНрд░ рддрд╛рд▓рд┐рдХрд╛


  1. рд╡рд╕реНрддреБрдПрдВ
  2. рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЧреБрдг
  3. рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдб

рдХрд╛рд░реНрд░рд╡рд╛рдИ


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


C # рдореЗрдВ, рдХреНрд░рд┐рдпрд╛рдПрдБ рд╡рд┐рдзрд┐рдпрд╛рдБ рдФрд░ рдХрд╛рд░реНрдп рд╣реИрдВред рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП: рдХреНрд░рд┐рдпрд╛, рдореМрдЦрд┐рдХ рдЖрдВрджреЛрд▓рди рдХреЗ рдкрд░рдорд╛рдгреБред рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╕рдордп рдЪрд▓рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рд╡рд╕реНрддреБрдПрдВ рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЖрдкрд╕ рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрд░рддреА рд╣реИрдВред рдЬрд╣рд╛рдВ рдПрдХ рдмрджрд▓рд╛рд╡ рд╣реИ - рдПрдХ рдХреНрд░рд┐рдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред


setters


рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕рднреА рдЪрд▓ рдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╣реИред рдпрд╣ рдХрдбрд╝рд╛рдИ рд╕реЗ рдФрд░ рдЧрдгрд┐рддреАрдп рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдорд╛рддреНрд░рд╛рдПрдВ рд╣реИрдВ рдФрд░ рд╡реЗ рдХрд┐рд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдкрд╛рда рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдФрд░ рд╢рдХреНрддрд┐ рдХрд╛ рд╕рдВрдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рддреНрдпрд╛рдкрди рдХрд░рддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Status рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде IPullRequest рд╣реИ, рдЬрд┐рд╕реЗ Approved , Declined рдпрд╛ Merged рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдк pullRequest.Status = Status.Declined рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ рдХрд┐ "рд░рджреНрдж рдХрд┐рдП рдЧрдП рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рдЕрдиреБрд░реЛрдз рд╕реЗрдЯ рдХрд░реЗрдВ" рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордЬрдмреВрдд рд╣реИ pullRequest.Decline() рдФрд░, рддрджрдиреБрд╕рд╛рд░, pullRequest.Approve() , pullRequest.Merge() ред


рдПрдХ рд╕рдХреНрд░рд┐рдп рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред


рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЖрд╡рд╛рдЬ


PerformPurchase , DoDelete , MakeCall ред


HeroManager рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЬреНрдЮрд╛ рдПрдХ рдЕрд░реНрдерд╣реАрди Manager рджреНрд╡рд╛рд░рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП PerformMigration - Perform ред рд╕рдм рдХреЗ рдмрд╛рдж, рдЕрдзрд┐рдХ рдЬреАрд╡рд┐рдд - рдмрд╕ Migrate !


рд╕рдХреНрд░рд┐рдп рдХреНрд░рд┐рдпрд╛рдПрдВ рдкрд╛рда рдХреЛ рддрд╛рдЬрд╝рд╛ рдХрд░рддреА рд╣реИрдВ: "рд╣рд┐рдЯ" рдирд╣реАрдВ , рдмрд▓реНрдХрд┐ "рд╣рд┐рдЯ" ; "рдЭреВрд▓рд╛ рдирд╣реАрдВ рдмрдирд╛рдпрд╛" , рд▓реЗрдХрд┐рди "рд▓рд╣рд░рд╛рдпрд╛" ; "рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд▓рд┐рдпрд╛" , рд▓реЗрдХрд┐рди "рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛" ред рддреЛ рдХреЛрдб рдореЗрдВ: PerformApplication тЖТ Apply ; DoDelete тЖТ Delete ; PerformPurchase тЖТ Purchase , Buy ред (рд▓реЗрдХрд┐рди DealDamage рдмрд╕ рдЧрдпрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ Attack рдХрд╛ рдорддрд▓рдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред)


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


рдордЬрдмреВрдд рдХреНрд░рд┐рдпрд╛


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


рддреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред player.Health = X player.SetHealth рдпрд╛ player.SetHealth , рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕реБрд░рдореНрдп player.SetHealth рд╣реИред player.RestoreHealth ред


рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо Stack рдХреЛ Add/Remove , рдмрд▓реНрдХрд┐ Push/Pop рдЬрд╛рдирддреЗ рд╣реИрдВред


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


рдирд┐рд░рд░реНрдердХ рднрд╛рдЧ


рдЬреИрд╕рд╛ рдХрд┐ ManualResetEvent рд╕рд╛рде, рд╣рдо .NET рдХреЗ рдЯреЗрдХреНрдирд┐рдХрд▓ ManualResetEvent рдХреЗ рдХрд░реАрдм ManualResetEvent рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЬрдЯрд┐рд▓ рд╣реИрдВ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдФрд░ API рдХреА рдЕрдзрд┐рдХрддрд╛ред


рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдкрд░ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рддрд╛рдХрд┐ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдФрд░ рд░реЛрдХрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рди рд╣реЛрдВред C # рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП ThreadPool рд╣реИред рдХреЗрд╡рд▓ рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ "рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ" рдпрд╣рд╛рдБ - QueueUserWorkItem ! рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ( User ) рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдХрд╛рд░реНрдп рдЖрдЗрдЯрдо ( WorkItem ) рд╣реИ рдФрд░ рдпрд╣ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ - ThreadPool.Run рдпрд╛ ThreadPool.Execute ред ThreadPool.Execute ред


рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдФрд░ рдЬрд╛рдирдирд╛ рдХрд┐ рдкрд░рдорд╛рдгреБ рддреБрд▓рдирд╛-рдФрд░-рдЕрджрд▓рд╛-рдмрджрд▓реА (CAS) рдирд┐рд░реНрджреЗрд╢ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕рд╛рдл рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред Interlocked.CompareExchange(ref x, newX, oldX) Atomically.Change(ref x, from: oldX, to: newX) (рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Atomically.Change(ref x, from: oldX, to: newX) ред


рдХреЛрдб рдХреНрд╡рд╛рдВрдЯрдо рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдбреЙрдХреНрдЯрд░реЗрдЯ рдирд╣реАрдВ рд╣реИ, рдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡реЗрджрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╛рдардХ рдХрднреА-рдХрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрджрд╛рд╕реАрди рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдирд┐рд░реНрджреЗрд╢ рдХреНрдпрд╛ рдХрд╣рддреЗ рд╣реИрдВред рд╣рд░ рджрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рджреБрд╣рд░рд╛рд╡


UsersRepository.AddUser , Benchmark.ExecuteBenchmark , AppInitializer.Initialize , UniversalMarshaller.Marshal , Logger.LogError ред


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЕрд░реНрде рдХреЛ рдорд┐рдЯрд╛ рджреЗрддреА рд╣реИ, рд╕реНрдерд╛рди рдХреЛ рд╕рдВрдХреБрдЪрд┐рдд рдХрд░ рджреЗрддреА рд╣реИред


UsersRepository.AddUser рдирд╣реАрдВ, рд▓реЗрдХрд┐рди UsersRepository.Add ; Directory.CreateDirectory рдирд╣реАрдВред HttpWebResponse.GetResponseStream рдирд╣реАрдВ, рд▓реЗрдХрд┐рди HttpWebResponse.Stream ; Log.Error ред Log.Error , рд▓реЗрдХрд┐рди Log.Error ред


рдорд╣реАрди рдкрд╛рд▓рд╛


Check рдПрдХ рдХрдИ-рдкрдХреНрд╖реАрдп рд╢рдмреНрдж рд╣реИред рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд╛рдо рд╣реИ, рддреЛ CheckHasLongName рдпрд╛ рддреЛ рдПрдХ bool рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╣рддрд░ рд╣реИ bool HasLongName рдпрд╛ void EnsureHasShortName ред рдореИрдВ рднреА CheckRebootCounter , рдЬреЛ ... рдХрд╣реАрдВ рдЕрдВрджрд░, IIS рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛!


Enumerate - рдЙрд╕реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗред .NET рдореЗрдВ рдПрдХ Directory.EnumerateDirectories(path) рд╡рд┐рдзрд┐ рд╣реИ: рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ Directories.Of(path) path.Directories() Directories.Of(path) рдпрд╛ path.Directories() ред


Calc - Calculate рдЗрддрдиреА рдмрд╛рд░ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреИрд▓реНрд╢рд┐рдпрдо рдЬрдорд╛ рдХреА рддрд░рд╣ рдЕрдзрд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИред


Process рд▓рд┐рдП Proc рдПрдХ рдФрд░ рдлреИрдВрд╕реА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реИред


Base , Impl , Internal , Raw - рдкрд░рдЬреАрд╡реА рд╢рдмреНрдж рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


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


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


рдЧреБрдг


рдЪрд░рд┐рддреНрд░ рдореЗрдВ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдФрд░ рдорди рд╣реИ; рдЖрдЗрдЯрдо рдЦрд░реАрджрд╛рд░реА рдХреА рдЯреЛрдХрд░реА рдореЗрдВ рд╣реИрдВ; рд╕реМрд░ рдордВрдбрд▓ рдореЗрдВ рдЧреНрд░рд╣ рд╣реЛрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рди рдХреЗрд╡рд▓ рдирд┐рд╕реНрд╡рд╛рд░реНрде рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рднреА рд╣реИрдВ: рдкрджрд╛рдиреБрдХреНрд░рдо (рдкреВрд░реНрд╡рдЬ-рд╡рд╛рд░рд┐рд╕), рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ (рдкреВрд░реНрдгрд╛рдВрдХ-рднрд╛рдЧ), рд╕реНрдерд╛рдирд┐рдХ рд░реВрдк рд╕реЗ (рднрдВрдбрд╛рд░рдг-рддрддреНрд╡), рдЖрджрд┐ред


C # рдореЗрдВ, рдЧреБрдг рдФрд░ рд╕рдВрдмрдВрдз рдРрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ (рдЖрдорддреМрд░ рдкрд░ Get рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВ), рдЧреЗрдЯрд░реНрд╕ (рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреЙрдбреА рд╡рд╛рд▓реЗ рдЧреБрдг), рдФрд░ рдлрд╝реАрд▓реНрдбред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╣реИ: рд╢рдмреНрдж-рдкрд░рд┐рд╡рд░реНрдзрди рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рджреВрд╕рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╣реЛрддрд╛ рд╣реИ - Player.Health , рдЬреЛ рд▓рдЧрднрдЧ рдЕрдВрдЧреНрд░реЗрдЬреА "рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп" рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред


рдЖрдЬ рдЬреЛ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЙрд▓рдЭрди рдореЗрдВ рд╣реИ рд╡рд╣ рд╣реИ рдПрдХреНрд╢рди рдХреЗ рддрд░реАрдХреЗ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рддрд░реАрдХреЗред


рд╕рдВрдЬреНрдЮрд╛ рдХреЗ рдмрдЬрд╛рдп рдХреНрд░рд┐рдпрд╛


GetDiscount , CalculateDamage , FetchResult , ComputeFov , CreateMap ред


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


рдорд╛рди рд▓реАрдЬрд┐рдП, IUsersRepository рдХреБрдЫ GetUser(int id) рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИред рдХреНрдпреЛрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рддрд░рд╣ рдХреА рд░рд╕реАрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВ ( Get )? рдпрд╣ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдЧрд╛ - User(int id) !


рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ: рдирд╣реАрдВ FetchResult() , рд▓реЗрдХрд┐рди Result() ; GetResponse() , рдмрд▓реНрдХрд┐ Response() ; CalculateDamage() , рдмрд▓реНрдХрд┐ Damage() ред


рдПрдХ DDD рдЯреЙрдХ рдПрдХ "рдЕрдЪреНрдЫрд╛" рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИ: CalculateDiscountBy(int customerId) рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде DiscountCalculator ред рди рдХреЗрд╡рд▓ рдЪреЗрд╣рд░реЗ рдкрд░ рдПрдХ рд╕рдордорд┐рдд рджреЛрд╣рд░рд╛рд╡ рд╣реИ - DiscountCalculator.CalculateDiscount , рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдХрд┐ рдЫреВрдЯ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ ред рдФрд░ рдХреНрдпрд╛, рдХреЛрдИ рдкреВрдЫрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?


рдпрд╣ рд╕реНрд╡рдпрдВ рдЗрдХрд╛рдИ рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдордЬрдмреВрдд рд╣реЛрдЧрд╛ - Discount static decimal Of(Customer customer, Order order) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП static decimal Of(Customer customer, Order order) рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде Discount.Of(customer, order) - _discountCalculator.CalculateDiscountBy(customerId) рддреБрд▓рдирд╛ рдореЗрдВ рд╕рд░рд▓ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рднрд╛рд╖рд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред


рдХрднреА-рдХрднреА, рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ, рд╣рдо рдХреБрдЫ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐, CreateMap() рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВ: Map() рд╕рд╛рде рдПрдХ рд╕реАрдзрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди Map() рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди NewMap() : рдлрд┐рд░ рд╕реЗ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд░ рдкрд░ рд╣реИ, рди рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИред


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


рдЕрдиреНрдп


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


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреБрдгреЛрдВ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐: Thread.CurrentThread рдирд╣реАрдВред Thread.CurrentThread , рд▓реЗрдХрд┐рди Thread.Current ред Thread.Current ; Inventory.InventoryItems рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ Inventory.Items , рдЖрджрд┐


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


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


рдХреЛрдб рд╕реЗ рдкрд╛рда рднреА рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рдШрд░ рдЦрдбрд╝рд╛ рд╣реИ, рд╕реЗрдЯрд┐рдВрдЧ рд╕реВрд░рдЬ рдХреА рдХрд┐рд░рдгреЛрдВ рдореЗрдВ рдбреВрдмрдирд╛ ; рджреВрд╕рд░реЗ рдореЗрдВ - рдЕрдЧрд░ рдШрд░ рдЦрдбрд╝рд╛ рд╣реИ ; рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдПрдХ рдШрд░ рдЦрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рд╣рд╛рдпрдХреЛрдВ рд╕реЗ рдЪрд┐рдкрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред


рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рджреЛ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рди рдХреЗрд╡рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмрд▓реНрдХрд┐ рд╢рдмреНрдж рдкрд░ рднреА; рдирд╛рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ; рдХреИрд╕реЗ рдЕрддрд┐рд░реЗрдХ рдФрд░ рдЕрддрд┐рд░рдВрдЬрд┐рдд рдХреЛрдб рдкрд╛рдардХ рдХреЛ рджреВрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рдЕрдЪреНрдЫреЗ рдирд╛рдо рд╕рд┐рд░реНрдл рдиреЛрдЯреНрд╕ рд╣реИрдВред рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП , рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧреАрдд рдореЗрдВ рд▓рд┐рдЦрд╛ рдФрд░ рд╕рдиреНрдирд┐рд╣рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ, рдЕрдВрддрд┐рдо рд▓реЗрдЦ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдКрдВрдЧрд╛ред

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


All Articles