Stuffcheck

Π‘Π»ΠΎΠ³ ΠΎ практичСском ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ AI-Π°Π³Π΅Π½Ρ‚ΠΎΠ² Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅, систСмном Π΄ΠΈΠ·Π°ΠΉΠ½Π΅, инструмСнтах Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈ создании быстрых минималистичных Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Β· 3 ΠΌΠΈΠ½ чтСния Β· Π¨Π°Π½ΠΈΠΊΠ° ВикрамасингхС Β· Cloud Infrastructure Services

Ruby on Rails ΠΈ JavaScript

АрхитСктурныС различия, ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ стороны ΠΈ сцСнарии совмСстного использования сСрвСрного Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка

Π›ΠΎΠ³ΠΎΡ‚ΠΈΠΏ Ruby on Rails

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Ruby on Rails ΠΈ JavaScript часто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ споры, хотя ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠ°Π»ΠΈ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ. Rails создавался ΠΊΠ°ΠΊ Π·Ρ€Π΅Π»Ρ‹ΠΉ сСрвСрный Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для быстрой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ JavaScript Π±Ρ‹Π» языком клиСнтских скриптов Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. Π”ΠΎΠ»Π³ΠΎΠ΅ врСмя ΠΎΠ½ΠΈ Π³Π°Ρ€ΠΌΠΎΠ½ΠΈΡ‡Π½ΠΎ дополняли Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° Π² ΠΎΠ΄Π½ΠΎΠΌ стСкС.

ПоявлСниС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Node.js ΠΈ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ расстановку сил. БСгодня JavaScript прСвратился Π² ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ стСк прилоТСния β€” ΠΎΡ‚ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ динамичСского интСрфСйса.

АрхитСктура ΠΈ философия Ruby on Rails

Ruby on Rails опираСтся Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ «соглашСниС Π³Π»Π°Π²Π½Π΅Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΒ» ΠΈ Β«Π½Π΅ повторяйся» (DRY). ВмСсто написания шаблонного ΠΊΠΎΠ΄Π° для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ слСдуСт установлСнным ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ имСнования, Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π±Π΅Ρ€Π΅Ρ‚ Ρ€ΡƒΡ‚ΠΈΠ½Ρƒ Π½Π° сСбя.

Π’ основС Rails Π»Π΅ΠΆΠΈΡ‚ классичСский ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ MVC:

АрхитСктура MVC Π² Ruby on Rails

  • МодСль (Model) инкапсулируСт бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈ управляСт Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· ORM ActiveRecord.
  • ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ (View) ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ шаблонов.
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ (Controller) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ HTTP-запросы, обращаСтся ΠΊ модСлям ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² прСдставлСниС.

Готовая инфраструктура Rails Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ встроСнныС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… уязвимостСй (SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ, CSRF ΠΈ XSS). Π­Ρ‚ΠΎ позволяСт быстро Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹Π΅ сСрвисы силами нСбольшой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ЭкосистСма ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ JavaScript

Π“Π»Π°Π²Π½ΠΎΠ΅ прСимущСство JavaScript β€” ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎ СдинствСнный язык, Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ всСми Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ.

АрхитСктура JavaScript

Π‘ появлСниСм Node.js Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ язык Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈ сСрвСрС. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ схСмами ΠΈ позволяСт ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ слоями прилоТСния:

  • ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ: Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ React, Vue ΠΈΠ»ΠΈ Svelte Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ динамичСский интСрфСйс со слоТным состояниСм Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страниц.
  • БСрвСрная Ρ‡Π°ΡΡ‚ΡŒ: срСды выполнСния Node.js ΠΈ Bun ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ тысячи ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… сСтСвых соСдинСний Π·Π° счСт Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Ρ†ΠΈΠΊΠ»Π° событий (event loop).

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ различия

Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Rails ΠΈ JavaScript-стСком упираСтся Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΈ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ поставки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ структура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Rails ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΆΠ΅ΡΡ‚ΠΊΡƒΡŽ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΡƒΡŽ структуру Β«Π±Π°Ρ‚Π°Ρ€Π΅ΠΉΠΊΠΈ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅Β». Π›ΡŽΠ±ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ с экосистСмой, ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ориСнтируСтся Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

Π’ экосистСмС JavaScript Π½Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠ³ΠΎ стандарта: ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

МодСль исполнСния ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Node.js ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π°Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ микросСрвисов с интСнсивным сСтСвым ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ. ΠžΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» событий эффСктивно ΡƒΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ рСсурсы ΠΏΡ€ΠΈ опСрациях Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°.

Ruby on Rails Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡ€ΠΎΡ†Π΅ΡΡΠ½ΡƒΡŽ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов. Для Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ слоТных сцСнариСв ΠΈ стандартных CRUD-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Rails достаточно, ΠΎΠ΄Π½Π°ΠΊΠΎ прилоТСния Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ спСциализированных инструмСнтов Π²Ρ€ΠΎΠ΄Π΅ ActionCable ΠΈΠ»ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний.

Π§Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Ρƒ β€” соврСмСнная Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сочСтаСт ΡΠΈΠ»ΡŒΠ½Ρ‹Π΅ стороны ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²:

  • Ruby on Rails Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌ для быстрого запуска MVP, слоТных Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, маркСтплСйсов ΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ, Π³Π΄Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³ΠΈΠΏΠΎΡ‚Π΅Π· Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ инструмСнтами.
  • JavaScript ΠΈ TypeScript Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ Π² прилоТСниях с насыщСнной ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ, высокими трСбованиями ΠΊ микросСрвисной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ потрСбности Π² Π΅Π΄ΠΈΠ½ΠΎΠΌ стСкС для Π²Π΅Π±- ΠΈ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
  • Π“ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: Rails ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ бэкСнд ΠΈ поставщик REST ΠΈΠ»ΠΈ GraphQL API, Π° клиСнтская Ρ‡Π°ΡΡ‚ΡŒ рСализуСтся Π½Π° соврСмСнных Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ….