рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХрддрд╛ рдореЗрдВ MVCред рднрд╛рдЧ 3

Cem Ugur Karacam рджреНрд╡рд╛рд░рд╛ MVC рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрддрд╛ рдореЗрдВред рдЖрдк рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХреЛ рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред



рдпрд╣ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЕрдВрддрд┐рдо рдЪрд░рдг рд╣реИред

рдореИрдВрдиреЗ рдПрдХрддрд╛ рдореЗрдВ рдПрдорд╡реАрд╕реА рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░реЗрдЦ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред



рдПрдХрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдореЛрдиреЛрдмреАрд╣реЙрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рджреГрд╢реНрдп рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЙрдирдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпреЗ рд╡рд╕реНрддреБрдПрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реАрдзреЗ рд╕рдВрд╡рд╛рдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдПрдХрддрд╛ рдХрд╛ MVC рдкреИрдЯрд░реНрди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред

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

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

рдЖрдЗрдП рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦреЗрдВ рдЬреЛ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рддрдп рдХреА рдереАред рд╣рдо рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдПрдХ рдкреИрдирд▓ рдмрдирд╛рдКрдВрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдпреВрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдВрдЧреЗред



рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреИрдирд▓ рд╣реИ, рдЖрдЗрдЯрдо рдХреЗ рдЖрдЗрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЫрд╡рд┐ рд╡рд╕реНрддреБ рдФрд░ рд╣рдорд▓реЗ рдХрд╛ рдирд╛рдо, рдкреНрд░рдХрд╛рд░ рдФрд░ рддрд╛рдХрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдкрд╛рда рдСрдмреНрдЬреЗрдХреНрдЯред рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, InfoView рдирд╛рдордХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ InfoView рдФрд░ рдЗрд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред



рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВред

 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class InfoView : MonoBehaviour { public Image icon; public Text nameText; public Text typeText; public Text attackText; } 

рдлрд┐рд░ рдЗрдирдкреБрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд┐рдЯ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВред

 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class InfoView : MonoBehaviour { public Image icon; public Text nameText; public Text typeText; public Text attackText; public void Init(ItemData data) { icon.sprite = data.icon; nameText.text = data.name; attackText.text = "Attack Power: " + data.attack; switch (data.type) { case ItemType.Axe: typeText.text = "Type: Axe"; break; case ItemType.Dagger: typeText.text = "Type: Dagger"; break; case ItemType.Hammer: typeText.text = "Type: Hammer"; break; case ItemType.Potion: typeText.text = "Type: Potion"; break; } } } 

рдЕрдм рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред



рд╣рдо рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдкреНрд░реАрдлрд╝реИрдм рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдореИрдВрдиреЗ Resources рдирд╛рдордХ рдПрдХ рдлреЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ред рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ рдЬреЛ рдПрдХрддрд╛ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред Resources рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреНрд░реАрдлрд╝реИрдм рд░рдЦреЗрдВред



рдЪреВрдВрдХрд┐ рдореИрдВ InfoView рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреГрд╢реНрдп рд╕реЗ InfoView рд╣рдЯрд╛ InfoView ред



рдирд┐рдпрдВрддреНрд░рдХ рдЦреЛрд▓рдиреЗ рдХрд╛ рд╕рдордпред

рдореИрдВ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЪрд░ InfoView , рдпрд╣ InfoView рд▓рд┐рдП рдХрд┐ рдЗрд╕ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рд╡рд╕реНрддреБ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╣реЛрдЧреА, рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА InfoView рд▓рд┐рдП рд▓рд┐рдВрдХ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рдЪрд░ред

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemViewController : MonoBehaviour { public Inventory inventoryHolder; public Transform inventoryViewParent; public Transform infoViewParent; private GameObject infoViewPrefab; private GameObject itemViewPrefab; private void Start() { itemViewPrefab = (GameObject)Resources.Load("Item"); infoViewPrefab = (GameObject)Resources.Load("InfoView"); } } 

рдЖрдЗрдП рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рджреГрд╢реНрдп рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВред

 private void CreateInfoView(ItemData data) { var infoGO = GameObject.Instantiate(infoViewPrefab, infoViewParent); infoGO.GetComponent<InfoView>().Init(data); } 

рдореИрдВ C # рдореЗрдВ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ ItemView рдХреЛ рдкрд╛рд╕ рдХрд░ ItemView ред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝рд╛ ItemView ред

 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ItemView : MonoBehaviour { public Button button; public Image itemIcon; private ItemData itemData; public void InitItem(ItemData item, Action<ItemData> callback) { this.itemData = item; itemIcon.sprite = itemData.icon; button.onClick.AddListener(() => callback(itemData) ); } } 

рдореИрдВрдиреЗ рд╡рд┐рдзрд┐ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛ред рдФрд░ рдЕрдм рдЖрдк рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemViewController : MonoBehaviour { public Inventory inventoryHolder; public Transform inventoryViewParent; public Transform infoViewParent; private GameObject infoViewPrefab; private GameObject itemViewPrefab; private void Start() { itemViewPrefab = (GameObject)Resources.Load("Item"); infoViewPrefab = (GameObject)Resources.Load("InfoView"); foreach (var item in inventoryHolder.inventory) { var itemGO = GameObject.Instantiate(itemViewPrefab, inventoryViewParent); itemGO.GetComponent<ItemView>().InitItem(item, CreateInfoView); } } private void CreateInfoView(ItemData data) { var infoGO = GameObject.Instantiate(infoViewPrefab, infoViewParent); infoGO.GetComponent<InfoView>().Init(data); } } 

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

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ItemViewController : MonoBehaviour { public Inventory inventoryHolder; public Transform inventoryViewParent; public Transform infoViewParent; private GameObject infoViewPrefab; private GameObject itemViewPrefab; private GameObject infoView; private void Start() { itemViewPrefab = (GameObject)Resources.Load("Item"); infoViewPrefab = (GameObject)Resources.Load("InfoView"); foreach (var item in inventoryHolder.inventory) { var itemGO = GameObject.Instantiate(itemViewPrefab, inventoryViewParent); itemGO.GetComponent<ItemView>().InitItem(item, CreateInfoView); } } private void CreateInfoView(ItemData data) { if (infoView != null) { Destroy(infoView); } infoView = GameObject.Instantiate(infoViewPrefab, infoViewParent); infoView.GetComponent<InfoView>().Init(data); } } 

рд╣рдордиреЗ рдЬрд╛рдирдХрд╛рд░реА infoView рдЪрд░ рдмрдирд╛рдпрд╛ рдФрд░ рджреГрд╢реНрдп рдореЗрдВ InfoView рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред

рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВред



рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдпрд╣ рдХрд┐рдпрд╛!

GitHub рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рд╣рдо рдордзреНрдп рдпреБрдЧ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред :)

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

рд╡рд╣ рд╕рдм рд╣реИред рдЕрдЪреНрдЫрд╛ рдХреЛрдбрд┐рдВрдЧ!

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


All Articles