ΠΠ°ΠΊΠ²ΠΎ Π΅ MVC? ΠΡΠ»Π½ΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π·Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Model-View-Controller
MVC (Model-View-Controller) Π΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ΅Π½ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° ΡΠΎΡΡΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·Π΄Π΅Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠΈ ΠΎΡΠ΄Π΅Π»Π½ΠΈ, Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° β Model (Π΄Π°Π½Π½ΠΈ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°), View (ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΡΠ»ΠΎΠΉ) ΠΈ Controller (ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ ΠΈ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡ). Π’ΠΎΠ²Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° Π΅ΠΊΠΈΠΏΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ, ΡΠ΅ΡΡΠ²Π°Ρ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π²ΡΠ΅ΠΊΠΈ ΡΠ»ΠΎΠΉ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ MVC Π΄ΠΎΠΌΠΈΠ½ΠΈΡΠ°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΠ΅Π½ ΡΠ°Π±Π»ΠΎΠ½ Π² ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΡΠ΅Π± ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Laravel, Django, Ruby on Rails ΠΈ ASP.NET Core.
Π ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° ΡΠΈ MVC ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ΅Π½ Π²ΡΠΏΡΠΎΡ: ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΠ΅ ΡΡΠΈΠ²Π° Π½Π° Π½Π°ΡΠ°ΡΡΠ²Π°ΡΠ° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π° ΠΏΠΎΠ΄ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΠΎ ΡΠΈ ΡΠ΅Π³Π»ΠΎ? Π§ΡΠ΅Π· Π½Π°Π»Π°Π³Π°Π½Π΅ Π½Π° ΡΡΡΠΎΠ³ΠΈ Π³ΡΠ°Π½ΠΈΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΠ΅Π½Π΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΠΏΠΎΡΠΎΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, MVC Π΄Π°Π²Π° Π½Π° Π΅ΠΊΠΈΠΏΠΈΡΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ, ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌ ΠΏΠ»Π°Π½, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π΄ΡΡΠΆΠ° Π³ΠΎΠ΄ΠΈΠ½ΠΈ Π½Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΌΡΠ½Π° Π½Π° Π΅ΠΊΠΈΠΏΠΈ.
Π’ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π° MVC ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈ
Model
Model Π΅ Π°Π²ΡΠΎΡΠΈΡΠ΅ΡΠ½ΠΈΡΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΈΡΡΠΈΠ½Π° Π·Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π½Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΠΉ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠ΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ:
- ΠΠ°ΡΠ²ΠΊΠΈ ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΊΡΠΌ ΠΈ ΠΎΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ (SQL, NoSQL ΠΈΠ»ΠΈ Π°Π±ΡΡΡΠ°Ρ ΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π· ORM)
- ΠΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ (Π½Π°ΠΏΡ. Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π΅, ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ° ΡΡΠΌΠ° Π½Π° ΠΏΠΎΡΡΡΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»Π½Π°)
- Π£Π²Π΅Π΄ΠΎΠΌΡΠ²Π°Π½Π΅ Π½Π° Π½Π°Π±Π»ΡΠ΄Π°ΡΠ΅Π»ΠΈ β ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ View ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ»ΠΎΠΉ β ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΌΡ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ
- ΠΠ°ΠΏΡΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅ΡΡΠ²Π°Π½Π° Π² ΠΏΡΠ»Π½Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ ΠΎΡ HTTP ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅
ΠΡΠΈΡΠΈΡΠ΅Π½ Π½ΡΠ°Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π°ΡΠΈ ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΡ ΠΏΡΠΎΠΏΡΡΠΊΠ°Ρ: Model Π½Π΅ Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° Π² Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π Π΄ΠΎΠ±ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΡΠ»ΠΎΡΡ Model ΡΡΠ΄ΡΡΠΆΠ° Π½Π°ΠΉ-Π±ΠΎΠ³Π°ΡΠ°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΡΡΠ»ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ½Π΅ΠΌΠΈΡΠ½ΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΏΡΠ°Π²ΡΡ Π½ΠΈΡΠΎ Π΄ΡΡΠ³ΠΎ ΠΎΡΠ²Π΅Π½ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ getter/setter ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠ° ΠΏΡΠΈΠ·Π½Π°Ρ Π°Π½ΡΠΈΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΠΉΡΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ°Π·Π΄ΡΡΠΈ Controllers.
View
View Π΅ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΡ ΡΠ»ΠΎΠΉ. Π’ΠΎΠΉ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ Model (Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ»ΠΈ ΡΡΠ΅Π· Controller, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π½Π° ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠ°) ΠΈ Π³ΠΈ ΡΠ΅Π½Π΄ΠΈΡΠ° Π² ΡΠΎΡΠΌΠ°Ρ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌ ΠΎΡ ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» β ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ HTML, JSON, XML ΠΈΠ»ΠΈ Π΄ΡΡΠ²ΠΎ ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° Π½Π°ΡΠΈΠ²Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠ»ΡΡΠΎΠ²ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π΄ΠΎΠ±ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ View:
- ΠΠ΅ ΡΡΠ΄ΡΡΠΆΠ° Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°
- ΠΠ΅ ΠΏΡΠ°Π²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ
- ΠΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π±Π΅Π· Π΄Π° ΡΠ΅ Π΄ΠΎΠΊΠΎΡΠ²Π°Ρ Model ΠΈΠ»ΠΈ Controller
- ΠΠΎΠΆΠ΅ Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠΌΠΈ Π·Π° Π΅Π΄Π½ΠΈ ΠΈ ΡΡΡΠΈ Π΄Π°Π½Π½ΠΈ (Π½Π°ΠΏΡ. HTML ΡΡΡΠ°Π½ΠΈΡΠ°, JSON API ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΈ PDF Π΅ΠΊΡΠΏΠΎΡΡ, Π²ΡΠΈΡΠΊΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ Model)
Controller
Controller Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ ΡΠ΅Π³ΡΠ»Π°ΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Model ΠΈ View. ΠΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π° HTTP Π·Π°ΡΠ²ΠΊΠ° (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅), Controller:
- ΠΠΎΠ»ΡΡΠ°Π²Π° ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡΠ° Π²Ρ ΠΎΠ΄ΡΡΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°
- ΠΠ·Π²ΠΈΠΊΠ²Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π° Model Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈ
- ΠΡΠ΅Π΄Π°Π²Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ View Π·Π° ΡΠ΅Π½Π΄ΠΈΡΠ°Π½Π΅
- ΠΡΡΡΠ° ΡΠ΅Π½Π΄ΠΈΡΠ°Π½ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ΠΠ°ΠΉ-ΡΠ΅ΡΡΠ°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ° Π² MVC ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ Π΅ Π°Π½ΡΠΈΡΠ°Π±Π»ΠΎΠ½ΡΡ Fat Controller β Π½Π°ΡΡΡΠΏΠ²Π°Π½Π΅ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π² Controllers, Π·Π°ΡΠΎΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ΄ΠΎΠ±Π½ΠΎ. Π’ΠΎΠ²Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠΎΠΏΠ°Π²Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ MVC ΡΠ΅Π½Π΅Π½. Controllers ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ½ΠΊΠΈ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΎΡΠΈ, Π° Π½Π΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ MVC: Π¦ΠΈΠΊΡΠ»ΡΡ Π·Π°ΡΠ²ΠΊΠ°-ΠΎΡΠ³ΠΎΠ²ΠΎΡ
Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π΄Π°Π½Π½ΠΈ Π΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ.
Π‘ΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ° ΠΏΠΎΡΠΎΠΊ Π·Π° ΡΠΈΠΏΠΈΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° HTTP ΡΠΎΡΠΌΡΠ»ΡΡ:
- ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΠΎΡΠΌΡΠ»ΡΡ β Π±ΡΠ°ΡΠ·ΡΡΡΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° HTTP POST Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ URL.
- Π ΡΡΠ΅ΡΡΡ (ΡΠ΅ΡΡΠΎ ΡΡΠΈΡΠ°Π½ Π·Π° ΡΠ°ΡΡ ΠΎΡ ΡΠ»ΠΎΡ Controller) ΡΡΠΏΠΎΡΡΠ°Π²Ρ URL Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° Controller.
- Controller ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΈΠ·Π²Π»ΠΈΡΠ° ΠΈ ΡΠ°Π½ΠΈΡΠ° Π²Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.
- Controller ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π° Model β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ `Order::create($validatedData)`.
- Model ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²Π° Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΈ Π²ΡΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
- Controller ΠΏΡΠ΅Π΄Π°Π²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ Π½Π° View.
- View ΡΠ΅Π½Π΄ΠΈΡΠ° ΡΠΈΠ½Π°Π»Π½ΠΈΡ HTML (ΠΈΠ»ΠΈ JSON) ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΡΡ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
Π’ΠΎΠ·ΠΈ ΡΠΈΠΊΡΠ» Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π΅Π½ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ MVC ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. Π ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅ (Π½Π°ΠΏΡ. React Ρ MVC Π±Π΅ΠΊΠ΅Π½Π΄ ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΡΠ²ΡΡΠ°), ΡΠ»ΠΎΡΡ View ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ ΠΎΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π° Π²Π°ΡΠΈΠ°Π½ΡΠΈΡΠ΅ MVVM ΠΈ MVP, ΡΠ°Π·Π³Π»Π΅Π΄Π°Π½ΠΈ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
MVC ΡΡΠ΅ΡΡ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ
Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΡΡΡΠΎΡΠΎ Π½Π° MVC ΡΠΏΡΡΠΌΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈ Π΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠ°Π½ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
| Π¨Π°Π±Π»ΠΎΠ½ | ΠΡΠ»Π½ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ | ΠΠ»ΡΡΠΎΠ²Π° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ MVC | ΠΠ°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° |
|---|---|---|---|
| MVC | Model-View-Controller | ΠΠ°Π·ΠΎΠ² ΡΠ°Π±Π»ΠΎΠ½; Controller ΠΌΠ΅Π΄ΠΈΠΈΡΠ° ΡΠ΅Π»ΠΈΡ ΠΏΠΎΡΠΎΠΊ | Π‘ΡΡΠ²ΡΡΠ½ΠΎ ΡΠ΅Π½Π΄ΠΈΡΠ°Π½ΠΈ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, REST API |
| MVP | Model-View-Presenter | Presenter ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΡΠ»Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° View; View Π΅ ΠΏΠ°ΡΠΈΠ²Π΅Π½ | Android (Π½Π°ΡΠ»Π΅Π΄Π΅Π½), WinForms, UI ΡΠΎΠΊΡΡΠΈΡΠ°Π½ Π²ΡΡΡ Ρ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡ |
| MVVM | Model-View-ViewModel | ViewModel ΠΈΠ·Π»Π°Π³Π° Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅; Π΄Π²ΡΠΏΠΎΡΠΎΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ | React, Angular, Vue, WPF, ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ |
| MVA | Model-View-Adapter | Adapter Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ°Π·Π΄Π΅Π»Ρ Model ΠΈ View | Π‘Π»ΠΎΠΆΠ½ΠΈ UI ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ ΡΡΡΠΎΠ³ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ½ΠΈ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈ |
| Flux/Redux | ΠΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ΅Π½ ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π΄Π°Π½Π½ΠΈ | ΠΠ΄ΠΈΠ½ΠΈΡΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅; ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ; Π±Π΅Π· Π΄Π²ΡΠΏΠΎΡΠΎΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ | ΠΠ°ΡΠ°Π±Π½ΠΈ Π΅Π΄Π½ΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ |
Π Π°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ MVC ΠΈ MVVM Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π·Π° Π΅ΠΊΠΈΠΏΠΈ, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΡΠΈ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ JavaScript ΡΡΠΎΠ½ΡΠ΅Π½Π΄ΠΈ. Π€ΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅ ΠΊΠ°ΡΠΎ Vue.js ΠΈ Angular ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Ρ MVVM ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°, Π΄ΠΎΠΊΠ°ΡΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ API, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Ρ, ΡΠ΅ΡΡΠΎ Π΅ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ MVC. Π₯ΠΈΠ±ΡΠΈΠ΄Π½ΠΈΡΠ΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ ΡΠ° ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈ ΠΈ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈ.
ΠΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° Π½Π° MVC
Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅
MVC Π½Π°Π»Π°Π³Π° ΡΠ²ΡΡΠ΄Π° Π³ΡΠ°Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΠΏΠΎΡΠΎΠΊΠ°. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΈΠ΅ β ΡΠΎ ΠΈΠΌΠ° ΠΏΡΠ΅ΠΊΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ:
- UI Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈ, Π±Π΅Π· Π΄Π° Π΄ΠΎΠΊΠΎΡΠ²Π°Ρ Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΡΠ΅Π΄ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°
- ΠΠ΅ΠΊΠ΅Π½Π΄ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΠ°Ρ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π±Π΅Π· Π΄Π° Π½Π°ΡΡΡΠ°Π²Π°Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄Π°
- ΠΠΎΡΠ΅ΠΊΡΠΈΠΈΡΠ΅ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° Π² Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² Model Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² View
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠ° ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡ
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Model ΡΡΠ΄ΡΡΠΆΠ° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ Π½ΡΠΌΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ HTTP ΠΈΠ»ΠΈ UI ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅, ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅ΡΡΠ²Π°Π½ Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ ΡΡΠ΅Π· ΡΠΈΡΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ. Controllers ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΡΠ²Π°Π½ΠΈ ΡΡΠ΅Π· ΠΈΠΌΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° Model. Views ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΡΠ²Π°Π½ΠΈ ΡΡΡ ΡΠ½ΠΈΠΌΠΊΠΎΠ²ΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅. Π’Π°Π·ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠΉΠ½Π° ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡ Π΅ Π΅Π΄Π½ΠΎ ΠΎΡ Π½Π°ΠΉ-ΡΠΈΠ»Π½ΠΈΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° Π½Π° MVC ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° CI/CD ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΈ.
ΠΠΎΠ²ΡΠΎΡΠ½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌΠΎΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ
ΠΠ΄ΠΈΠ½ Model ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Views. ΠΠΎΠΌΠΈΡΠ»Π΅ΡΠ΅ Π·Π° ΠΌΠΎΠ΄Π΅Π» `Product`, ΠΊΠΎΠΉΡΠΎ Π·Π°Ρ ΡΠ°Π½Π²Π° HTML ΡΡΡΠ°Π½ΠΈΡΠ° Ρ ΠΏΡΠΎΠ΄ΡΠΊΡ, JSON ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ°, ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Π½Π° ΠΎΡ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ XML ΡΠΈΠΉΠ΄ Π·Π° Π°Π³ΡΠ΅Π³Π°ΡΠΎΡ Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π½ΠΈ β Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π±Π΅Π· Π΄ΡΠ±Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°. Π’ΠΎΠ²Π° Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½, Π²ΠΈΡΠΎΠΊΠΎΡΡΠΎΠΉΠ½ΠΎΡΡΠ΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°, ΠΊΠΎΠΉΡΠΎ ΡΠΏΠ΅ΡΡΡΠ²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π² ΠΌΠ°ΡΠ°Π±.
ΠΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΠΊΠΈΠΏΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° MVC. Π€ΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π²ΡΡΡ Ρ Views ΠΈ CSS, Π΄ΠΎΠΊΠ°ΡΠΎ Π±Π΅ΠΊΠ΅Π½Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Ρ Models ΠΈ Controllers Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Π’ΠΎΠ·ΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΡΠΌ Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΠ΅Π½Π΅Π½ Π² ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΈΡΠ΅ ΠΏΡΠΈ ΡΠ»ΠΈΠ²Π°Π½Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅.
ΠΡΡΠ»ΠΎΡΡ Π½Π° Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅
MVC Π΅ ΠΎΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π½Π° Π½Π°ΠΉ-ΠΈΠ·ΠΏΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠ΅Π± ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅ Π² ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π½Π΅. Laravel (PHP), Django (Python), Ruby on Rails, ASP.NET Core (C#), Spring MVC (Java) ΠΈ Express.js (Node.js) Π²ΡΠΈΡΠΊΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Ρ MVC ΠΈΠ»ΠΈ Π±Π»ΠΈΠ·ΡΠΊ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΠ·Π±ΠΎΡΡΡ Π½Π° MVC ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΄Π΅ΡΠ΅ΡΠΈΠ»Π΅ΡΠΈΡ Π·Π½Π°Π½ΠΈΡ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°, ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, ORM ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅.
ΠΡΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠΉ ΠΎΡ ΡΠ΅Π·ΠΈ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅, ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½Π°, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ΄Π°. Π‘ΡΠ΅Π΄Π° Π·Π° VPS Π₯ΠΎΡΡΠΈΠ½Π³ Π²ΠΈ Π΄Π°Π²Π° ΠΏΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° PHP, Π²ΠΈΡΡΡΠ°Π»Π½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ Π½Π° Python ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° β ΠΊΡΠΈΡΠΈΡΠ½ΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ Π½Π° MVC
ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π·Π° ΠΏΡΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ° Π΅Π΄Π½ΠΎΡΡΡΠ°Π½ΠΈΡΠ½Π° ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°, ΡΡΠ°ΡΠΈΡΠ΅Π½ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³ΠΎΠ² ΡΠ°ΠΉΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅, MVC Π²ΡΠ²Π΅ΠΆΠ΄Π° ΡΡΡΡΠΊΡΡΡΠ½ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ Π½ΠΎΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π²ΡΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΡΡ. Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Model, View ΠΈ Controller Π·Π° ΡΠΎΡΠΌΡΠ»ΡΡ Π·Π° ΠΊΠΎΠ½ΡΠ°ΠΊΡ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π΅Π΄ΠΈΠ½ ΠΈΠΌΠ΅ΠΉΠ», Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½Π° ΡΠ΅ΡΠ΅ΠΌΠΎΠ½ΠΈΡ Π±Π΅Π· ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΠΎ-ΠΏΡΠΎΡΡΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ β Π΅Π΄ΠΈΠ½ΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, Π±Π΅Π·ΡΡΡΠ²ΡΡΠ½Π° ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ° ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΡΡΠ°ΡΠΈΡΠ½Π° HTML ΡΡΡΠ°Π½ΠΈΡΠ° β ΡΠ° ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ.
ΠΠΎ-ΡΡΡΡΠΌΠ½Π° ΠΊΡΠΈΠ²Π° Π½Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅
MVC ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π΄Π° ΡΡΠ²ΠΎΡΡ ΡΡΡΠΈΡΠ°Π½Π΅, ΠΆΠΈΠ·Π½Π΅Π½ΠΈ ΡΠΈΠΊΠ»ΠΈ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, ORM ΡΠ΅Π»Π°ΡΠΈΠΈ, ΡΠ°Π±Π»ΠΎΠ½Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ° Π·Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π½Π°ΠΏΠΈΡΠ°Ρ Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π΅Π½ ΡΠ΅Π΄ ΠΊΠΎΠ΄. ΠΠ»Π°Π΄ΡΠΈΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΡΠ΅ΡΡΠΎ Π½Π°ΡΡΡΠ°Π²Π°Ρ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° MVC ΠΏΠΎΠ΄ Π½Π°ΡΠΈΡΠΊΠ° Π½Π° ΠΊΡΠ°ΠΉΠ½ΠΈ ΡΡΠΎΠΊΠΎΠ²Π΅, ΡΡΠ·Π΄Π°Π²Π°ΠΉΠΊΠΈ Ρ ΠΈΠ±ΡΠΈΠ΄Π½ΠΈ Π±ΡΡΠΊΠΎΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° MVC Ρ Π½ΠΈΡΠΎ Π΅Π΄Π½ΠΎ ΠΎΡ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°.
Π Π°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π΅Π½ ΠΊΠΎΠ΄
ΠΡΠ΅ΠΊΠΈ Π½ΠΎΠ² ΡΠ΅ΡΡΡΡ Π² ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΎΠ½Π°Π»Π½ΠΎ MVC ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΡΠΈ ΡΠ°ΠΉΠ»Π°: Model, View (ΡΠ΅ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ) ΠΈ Controller. Π Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π΄Π΅ΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, ΡΠΎΠ²Π° ΡΠ΅ ΡΠΌΠ½ΠΎΠΆΠ°Π²Π° Π΄ΠΎ ΡΡΠΎΡΠΈΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠ΅Π· Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΈ Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ ΠΈ ΡΡΡΡΠΊΡΡΡΠ° Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈΡΠ΅, Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² ΠΊΠΎΠ³Π½ΠΈΡΠΈΠ²Π½Π° ΡΠ΅ΠΆΠ΅ΡΡ.
Π ΠΈΡΠΊ ΠΎΡ Fat Controller
ΠΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π°Π½ΠΎ ΠΏΠΎ-Π³ΠΎΡΠ΅, Controllers ΡΠ° Π½Π°ΠΉ-Π·Π»ΠΎΡΠΏΠΎΡΡΠ΅Π±ΡΠ²Π°Π½ΠΈΡΡ ΡΠ»ΠΎΠΉ Π² MVC ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π΅ ΡΠ° ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π°Π»ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈ Π½Π° Model ΠΈΠ»ΠΈ Controller, ΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΎΡΠΈΠ²Π° Π² Controller. Π‘ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ, Controllers Π½Π°ΡΡΡΠΏΠ²Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ, ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΈΠΌΠ΅ΠΉΠ»ΠΈ, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ»Π°ΡΠ°Π½ΠΈΡ ΠΈ Π»ΠΎΠ³Π²Π°Π½Π΅ β ΠΏΡΠ΅Π²ΡΡΡΠ°ΠΉΠΊΠΈ ΡΠ΅ Π² Π½Π΅ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΈ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠΈ. ΠΠ°Π»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΠΈ Controllers ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ Π½Π° Π΅ΠΊΠΈΠΏΠ° ΠΈ Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π° ΠΏΡΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°.
Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° View ΠΈ Controller
Π ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅, Controllers ΡΠ° ΡΡΡΠ½ΠΎ ΠΎΠ±Π²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π½Π° View ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡ Π·Π° ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅. ΠΠΎΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡΡΠ°. ΠΠ°ΠΌΡΠ½Π°ΡΠ° Π½Π° View Ρ ΡΠ°Π·Π»ΠΈΡΠ½Π° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π·Π° ΡΠ΅Π½Π΄ΠΈΡΠ°Π½Π΅ (Π½Π°ΠΏΡ. ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ ΠΎΡ ΡΡΡΠ²ΡΡΠ½ΠΎ ΡΠ΅Π½Π΄ΠΈΡΠ°Π½ HTML ΠΊΡΠΌ JSON API) ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠ΅ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° Controller, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°ΠΌΠΎ Π·Π°Π³ΡΠΈΠΆΠ΅Π½ΠΎΡΡ Π½Π° ΡΠ»ΠΎΡ View.
Π‘ΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ
ΠΠ±ΡΡΡΠ°ΠΊΡΠ½ΠΈΡΠ΅ ΡΠ»ΠΎΠ΅Π²Π΅ Π½Π° MVC Π²ΡΠ²Π΅ΠΆΠ΄Π°Ρ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ. ΠΠ±Π΅ΠΊΡΠ½ΠΎ-ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½ΠΎΡΠΎ ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π² Model, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π² View ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° middleware Π² Controller Π΄ΠΎΠ±Π°Π²ΡΡ Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ. ΠΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°, ΡΠΎΠ²Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π°Π΄ΡΠ΅ΡΠΈΡΠ°Π½ΠΎ ΡΡΠ΅Π· ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π° ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ (ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΠΊΠΎΠ΄, ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ Π·Π°ΡΠ²ΠΊΠΈ, CDN ΡΠ»ΠΎΠ΅Π²Π΅), Π° Π½Π΅ ΡΡΠ΅Π· ΠΈΠ·ΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ°.
ΠΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½Π° Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΏΡΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅, ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²Π°ΡΠ΅ΡΠΎ MVC ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Dedicated Server Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠΌΠ½ΠΈΡ ΡΡΡΠ΅Π΄, ΠΏΡΠΈΡΡΡ Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ, ΠΈ Π²ΠΈ Π΄Π°Π²Π° Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΈ Π½Π° PHP-FPM ΠΏΡΠ», Nginx ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.
Π Π΅Π°Π»Π½ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° MVC ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅
Laravel (PHP)
Laravel ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° MVC Ρ Eloquent ORM ΠΊΠ°ΡΠΎ ΡΠ»ΠΎΠΉ Model, Blade ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ°Π½Π΅ ΠΊΠ°ΡΠΎ ΡΠ»ΠΎΠΉ View ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΡ artisan Controllers. ΠΠ΅Π³ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π° ΡΡΠ»ΡΠ³ΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠ°Π²ΡΡ Π»Π΅ΡΠ½ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΠΈ Controllers ΡΡΠ΅Π· ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΡΡΠ»ΡΠ³ΠΈ. Laravel Π΅ Π½Π°ΠΉ-ΡΠΈΡΠΎΠΊΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡΡ PHP MVC ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ ΠΈ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π° Ρ ΠΎΠ±ΡΠΈΡΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π·Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅.
Django (Python)
Django ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΠ°Π±Π»ΠΎΠ½ MTV (Model-Template-View), ΠΊΡΠ΄Π΅ΡΠΎ Django βViewβ Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ΅Π½ Π½Π° Controller Π² MVC, Π° βTemplateβ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° View Π² MVC. Π Π°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡΠ½ΠΎ, Π° Π½Π΅ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎ. ORM Π½Π° Django Π΅ ΡΡΠ΅Π΄ Π½Π°ΠΉ-ΠΌΠΎΡΠ½ΠΈΡΠ΅ Π² ΠΊΠΎΠΉ Π΄Π° Π΅ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ, Π° Π½Π΅Π³ΠΎΠ²ΠΈΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΈΠ²Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ° CRUD Views Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈΡΠ΅ Π½Π° Model β Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
Ruby on Rails
Rails Π΅ ΠΏΠΈΠΎΠ½Π΅Ρ Π½Π° ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΡΡΠ° Π½Π°Π΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² MVC ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅. ΠΠ΅Π³ΠΎΠ²ΠΎΡΠΎ ΡΠΊΠ΅Π»Π΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΏΡΠ»Π½ΠΈ MVC ΡΡΠ΅ΠΊΠΎΠ²Π΅ ΠΎΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°. ActiveRecord (ΡΠ»ΠΎΡΡ Model) Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅Π»Π΅Π½. ΠΠ½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Rails Π·Π° ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π΅ΠΊΠΈΠΏΠΈΡΠ΅ ΠΏΡΠ΅ΠΊΠ°ΡΠ²Π°Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ Π² Π΄Π΅Π±Π°ΡΠΈΡΠ°Π½Π΅ Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π² ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ½Π²Π΅Π½ΡΠΈΠΈΡΠ΅ Π½Π° Rails Π²Π»ΠΈΠ·Π°Ρ Π² ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Ρ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ASP.NET Core MVC
ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° Microsoft Π΅ ΡΠΈΠ»Π½ΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠΈΠΏΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° C# Π·Π° Π½Π°Π»Π°Π³Π°Π½Π΅ Π½Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΠ΅ Model-View-Controller ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅, Π° Π½Π΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ° ΡΠ΅Π»ΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π³ΡΠ΅ΡΠΊΠΈ, ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ MVC ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅. Tag Helpers ΠΈ Razor Pages ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π·Π° ΡΠ΅Π½Π΄ΠΈΡΠ°Π½Π΅ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΡΡΠ°ΡΠ° Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°.
MVC Π² API-first ΠΈ Π±Π΅Π·Π³Π»Π°Π²ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ
ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½Π° Π΅Π²ΠΎΠ»ΡΡΠΈΡ Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° MVC Π΅ ΡΠ°Π±Π»ΠΎΠ½ΡΡ headless MVC, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ ΡΠ»ΠΎΡΡ View Π΅ ΠΈΠ·ΡΡΠ»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ ΠΎΡ ΡΠ»ΠΎΠΉ Π·Π° JSON ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ. Controller Π²ΡΡΡΠ° ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π½Π΄ΠΈΡΠ°Π½ HTML, Π° ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (React, Vue, ΠΌΠΎΠ±ΠΈΠ»Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ°.
Π ΡΠ°Π·ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°:
- Π‘Π»ΠΎΠ΅Π²Π΅ΡΠ΅ Model ΠΈ Controller ΠΎΡΡΠ°Π²Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡ MVC
- Π‘Π»ΠΎΡΡ View ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΡΠ° Π² ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ (Π½Π°ΠΏΡ. Django REST Framework ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ, Laravel API Resources)
- Π€ΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½ MVVM ΡΠ°Π±Π»ΠΎΠ½ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ
Π’ΠΎΠ²Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π²Π΅ΡΠ΅ Π΅ Π΄ΠΎΠΌΠΈΠ½ΠΈΡΠ°ΡΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π·Π° Π΅ΠΊΠΈΠΏΠΈ, ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΡΠΈ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈ Π΄Π²Π°ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°Ρ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ MVC API Π±Π΅ΠΊΠ΅Π½Π΄.
ΠΠ° Π΅ΠΊΠΈΠΏΠΈ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠΈ headless MVC Π±Π΅ΠΊΠ΅Π½Π΄ΠΈ Π·Π°Π΅Π΄Π½ΠΎ Ρ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½ΠΈΡ, ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° SSL ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ. ΠΡΡΠΊΠ° API ΠΊΡΠ°ΠΉΠ½Π° ΡΠΎΡΠΊΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΡΡΠ΅Π· HTTPS β SSL Π‘Π΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΡΠΈΠ³ΡΡΠ΅Π½ΠΈ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ΄Π½ΠΎΠ²ΡΠ²Π°Π½ΠΈ, ΠΏΡΠ΅Π΄ΠΈ ΠΊΠ°ΠΊΡΠ²ΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ ΡΡΠ°ΡΠΈΠΊ Π΄Π° Π΄ΠΎΡΡΠΈΠ³Π½Π΅ Π²Π°ΡΠ΅ΡΠΎ MVC ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
MVC ΠΈ ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ
Π Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈΡΠ΅ Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ, MVC ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΠ»ΡΠ³Π°, Π° Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΡΠΊΠ° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° MVC ΡΡΡΡΠΊΡΡΡΠ° Π²ΡΡΡΠ΅ΡΠ½ΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ»ΠΎΡΡ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ (REST, gRPC, ΠΎΠΏΠ°ΡΠΊΠΈ Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ) ΡΠ°Π±ΠΎΡΠΈ Π½Π°Π΄ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΡΠ° Π½Π° MVC. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° MVC β ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈΡΠ΅, ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌΠΎΡΡ β ΡΠ΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Ρ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ ΠΏΡΠ΅Π· Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅.
ΠΠ»ΡΡΠΎΠ²ΠΎΡΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΅, ΡΠ΅ Models Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΈ, Π° Π½Π΅ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΡΡ Π΅ΠΌΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠΎΠ΄Π΅Π» `User` Π² ΡΡΠ»ΡΠ³Π° Π·Π° Π°Π²ΡΠ΅Π½ΡΠΈΠΊΠ°ΡΠΈΡ ΠΈ ΠΌΠΎΠ΄Π΅Π» `User` Π² ΡΡΠ»ΡΠ³Π° Π·Π° ΡΠ°ΠΊΡΡΡΠΈΡΠ°Π½Π΅ ΡΠ° ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈ.
ΠΠ·Π±ΠΎΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° Ρ ΠΎΡΡΠΈΠ½Π³ ΡΡΠ΅Π΄Π° Π·Π° MVC ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
MVC ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅ ΠΈΠΌΠ°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΎΡ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΡΠΎΠ²Π΅ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΈΡΠ΅ PHP ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅:
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ: PHP-FPM, Gunicorn, Puma ΠΈΠ»ΠΈ Kestrel ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π±ΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ
- ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°: ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, API ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈ ΡΠ°ΠΉΠ½ΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠ°Π½ΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎ
- ΠΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°: ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π°ΠΊΡΠΈΠ²ΠΈ (Webpack, Vite), Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΈ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠ΅ΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Ρ ΠΏΡΠ°Π²ΠΎ Π½Π° Π·Π°ΠΏΠΈΡ
- Π‘Π²ΡΡΠ·Π°Π½ΠΎΡΡ Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ: ΠΡΡΠ·ΠΊΠΈ Ρ Π½ΠΈΡΠΊΠ° Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ ΠΊΡΠΌ PostgreSQL, MySQL ΠΈΠ»ΠΈ Redis ΡΠ° ΠΊΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ORM
VPS Ρ cPanel ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½Π° ΡΡΠ΅Π΄Π°, ΠΊΠΎΡΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΡΠ΅Π· Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΠ°Π·Π²Π° Π΄ΠΎΡΡΡΠΏ Π½Π° root Π½ΠΈΠ²ΠΎ Π·Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Π° Π·Π° ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. ΠΠ° Π΅ΠΊΠΈΠΏΠΈ, ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΡΡΠ΅Π· CLI, ΠΏΠ»Π°Π½ Π·Π° VPS Π₯ΠΎΡΡΠΈΠ½Π³ Ρ ΠΏΡΠ»Π΅Π½ SSH Π΄ΠΎΡΡΡΠΏ ΠΈ Π±Π΅Π· Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ ΠΎΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΠΏΠ°Π½Π΅Π» Π΅ ΠΏΠΎ-ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΈΡΡ ΠΈΠ·Π±ΠΎΡ.
ΠΠ° Π΅ΠΊΠΈΠΏΠΈ, Π½ΡΠΆΠ΄Π°Π΅ΡΠΈ ΡΠ΅ ΠΎΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΈ ΠΈΠΌΠ΅ΠΉΠ»ΠΈ, ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π° Ρ ΡΡΡ Π½ΠΎΡΠΎ MVC ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΡΠΎΡΠΌΡΠ»ΡΡΠΈ Π·Π° ΠΊΠΎΠ½ΡΠ°ΠΊΡ, ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ, Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΡΠΎΠ»ΠΈ), ΡΡΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΡ ΡΡΡΠ²ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ dedicated ΡΡΠ»ΡΠ³Π° Π·Π° ΠΠΌΠ΅ΠΉΠ» Π₯ΠΎΡΡΠΈΠ½Π³ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° SPF/DKIM β Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ²ΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ.
Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ° ΠΌΠ°ΡΡΠΈΡΠ° Π·Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ: ΠΠΎΠ³Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ MVC
| Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ | MVC ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π»ΠΈ Π΅? | ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½Π° Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° |
|---|---|---|
| ΠΠ°ΡΠ°Π±Π½ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ | ΠΠ° | β |
| REST API Ρ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ ΠΊΠ»ΠΈΠ΅Π½Ρ | ΠΠ° (headless MVC) | β |
| ΠΡΠΎΡΡ ΡΡΠ°ΡΠΈΡΠ΅Π½ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³ΠΎΠ² ΡΠ°ΠΉΡ | ΠΠ΅ | Π‘ΡΠ°ΡΠΈΡΠ΅Π½ HTML / SSG |
| ΠΠ΄Π½ΠΎΡΡΡΠ°Π½ΠΈΡΠ½Π° ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° | ΠΠ΅ | ΠΠ΄ΠΈΠ½ΠΈΡΠ΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ / Π±Π΅Π·ΡΡΡΠ²ΡΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΡ |
| ΠΠ΅ΠΊΠ΅Π½Π΄ Π·Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ | ΠΠ° (API-first MVC) | β |
| ΠΠΈΠΊΡΠΎΡΡΠ»ΡΠ³Π° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ | ΠΠ° | β |
| ΠΡΡΠ· ΠΏΡΠΎΡΠΎΡΠΈΠΏ / MVP Ρ 1 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ | Π‘ΠΈΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎ | ΠΠΈΠΊΡΠΎ-ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ (Flask, Sinatra, Express) |
| ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ (ΡΠ°Ρ, ΡΠ°Π±Π»ΠΎ Π½Π° ΠΆΠΈΠ²ΠΎ) | Π§Π°ΡΡΠΈΡΠ½ΠΎ | MVC Π±Π΅ΠΊΠ΅Π½Π΄ + WebSocket ΡΠ»ΠΎΠΉ |
ΠΠ»ΡΡΠΎΠ²ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ·Π²ΠΎΠ΄ΠΈ
- ΠΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΉΡΠ΅ Controllers ΡΡΠ½ΠΊΠΈ. ΠΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Controller Π½Π°Π΄Π²ΠΈΡΠ°Π²Π° 20β30 ΡΠ΅Π΄Π°, ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π² ΠΊΠ»Π°Ρ ΡΡΠ»ΡΠ³Π° ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π½Π° Model. Π’ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° Π½Π°ΠΉ-Π²ΡΠ·Π΄Π΅ΠΉΡΡΠ²Π°ΡΠ° MVC Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π°.
- Model = Π΄ΠΎΠΌΠ΅ΠΉΠ½ Π»ΠΎΠ³ΠΈΠΊΠ°, Π° Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΎΡ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π’ΡΠ΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ»ΠΎΡ Model ΠΊΠ°ΡΠΎ Π΄ΠΎΠΌ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠ½Π΅ΠΌΠΈΡΠ½ΠΈΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ° ΠΏΡΠΈΠ·Π½Π°ΠΊ Π·Π° Π»ΠΎΡ Π΄ΠΈΠ·Π°ΠΉΠ½.
- ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Views Π·Π° Π΅Π΄ΠΈΠ½ Model Π΅ ΡΡΠ½ΠΊΡΠΈΡ, Π° Π½Π΅ ΠΊΡΠ°Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ. ΠΡΠΎΠ΅ΠΊΡΠΈΡΠ°ΠΉΡΠ΅ Π²Π°ΡΠΈΡΠ΅ Models ΠΈ Controllers Π΄Π° Π±ΡΠ΄Π°Ρ View-Π°Π³Π½ΠΎΡΡΠΈΡΠ½ΠΈ ΠΎΡ ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ.
- MVC Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° β ΡΠΎΠΉ Π³ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°. ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, eager loading (ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π°Π½Π΅ Π½Π° N+1 Π·Π°ΡΠ²ΠΊΠΈ) ΠΈ HTTP ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ.
- Π’Π΅ΡΡΠ²Π°ΠΉΡΠ΅ Model ΠΏΡΡΠ²ΠΎ, Π²ΠΈΠ½Π°Π³ΠΈ. ΠΠ΄ΠΈΠ½ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° Model ΡΠ° ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Ρ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠ° ROI Π² ΠΊΠΎΠ΅ Π΄Π° Π΅ MVC ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘Π»Π΅Π΄Π²Π°Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π·Π° Controller ΠΈ View.
- ΠΠ° headless Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ, ΡΡΠ΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ ΠΊΠ°ΡΠΎ Π²Π°ΡΠΈΡ ΡΠ»ΠΎΠΉ View. ΠΡΠΈΠ»Π°Π³Π°ΠΉΡΠ΅ ΡΡΡΠ°ΡΠ° Π΄ΠΈΡΡΠΈΠΏΠ»ΠΈΠ½Π° β Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ β ΠΊΠΎΡΡΠΎ Π±ΠΈΡ ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠ»ΠΈ ΠΊΡΠΌ HTML ΡΠ°Π±Π»ΠΎΠ½ΠΈ.
- ΠΠ°Π»Π°Π³Π°ΠΉΡΠ΅ Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° MVC ΠΏΡΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°. ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΡΠΎ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ. ΠΠ΄ΠΈΠ½ΠΈΡΠ½Π° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΡΠΎ ΠΌΠ°ΡΠΊΠΈΡΠ° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π² Controllers, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π΄ΡΠ»Π³.
Π§Π΅ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π½ΠΈ Π²ΡΠΏΡΠΎΡΠΈ
ΠΠ°ΠΊΠ²Π° Π΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ MVC ΠΈ MVVM?
Π MVC, Controller ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈΡ Π²Ρ ΠΎΠ΄ ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΠΈ Model, ΠΈ View. Π MVVM, ViewModel ΠΈΠ·Π»Π°Π³Π° Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΈ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ ΠΈ View ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ ΡΡΡ , ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ Π΄Π²ΡΠΏΠΎΡΠΎΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π±Π΅Π· ΠΈΠ·ΡΠΈΡΠ½Π° ΠΌΠ΅Π΄ΠΈΠ°ΡΠΈΡ ΠΎΡ Controller. MVVM Π΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΠΈ ΡΡΠΎΠ½ΡΠ΅Π½Π΄ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠΎΠ²Π΅; MVC Π΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΡΡΡΠ²ΡΡΠ½ΠΎ ΡΠ΅Π½Π΄ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ REST API.
ΠΠΎΠΆΠ΅ Π»ΠΈ MVC Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° REST API Π±Π΅Π· ΡΠ»ΠΎΠΉ View?
ΠΠ°. Π API-first MVC, ΡΠ»ΠΎΡΡ View Π΅ Π·Π°ΠΌΠ΅Π½Π΅Π½ ΠΎΡ ΡΠ»ΠΎΠΉ Π·Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π½Π° Model Π² JSON ΠΈΠ»ΠΈ XML. Controller Π²ΡΡΡΠ° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π½Π΄ΠΈΡΠ°Π½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ. Π’ΠΎΠ²Π° Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΡ ΡΠ°Π±Π»ΠΎΠ½ Π² Laravel API Resources, Django REST Framework ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅ `respond_to` Π½Π° Rails.
ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π° Π°Π½ΡΠΈΡΠ°Π±Π»ΠΎΠ½Π° Fat Controller ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΠ΅?
Fat Controllers ΡΠ° ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, ΠΏΠΎΡΡΠ°Π²ΡΡΠΈ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π½Π° Controller, Π·Π°ΡΠΎΡΠΎ ΡΠΎΠΉ Π΅ Π½Π°ΠΉ-Π΄ΠΎΡΡΡΠΏΠ½Π°ΡΠ° Π²Ρ ΠΎΠ΄Π½Π° ΡΠΎΡΠΊΠ°. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ Π΄Π° ΡΠ΅ Π²ΡΠ²Π΅Π΄Π°Ρ ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΡΡΠ»ΡΠ³ΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π·Π° ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°, ΠΊΡΠΌ ΠΊΠΎΠΈΡΠΎ Controllers Π΄Π΅Π»Π΅Π³ΠΈΡΠ°Ρ. Controller ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ, Π΄Π΅Π»Π΅Π³ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° β Π½ΠΈΠΊΠΎΠ³Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π»ΠΈ Π΅ MVC Π·Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈ?
ΠΠ°, Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΡΠ΄Π΅Π»Π½Π° ΡΡΠ»ΡΠ³Π°. ΠΡΡΠΊΠ° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° MVC Π²ΡΡΡΠ΅ΡΠ½ΠΎ, Π·Π° Π΄Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡ ΡΠΈ ΠΊΠΎΠ΄. Π¨Π°Π±Π»ΠΎΠ½ΡΡ MVC Π½Π΅ Π²Π»ΠΈΠ·Π° Π² ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ Π½Π° ΠΌΠΈΠΊΡΠΎΡΡΠ»ΡΠ³ΠΈΡΠ΅; ΡΠΎΠΉ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, Π° Π½Π΅ Π² ΡΡΠ»Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠΎΠΉ MVC ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ ΠΈΠΌΠ° Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ Π²ΠΈΡΠΎΠΊ ΡΡΠ°ΡΠΈΠΊ?
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠ° Π·Π°Π²ΠΈΡΠΈ ΡΠΈΠ»Π½ΠΎ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, Π° Π½Π΅ ΠΎΡ ΡΠ°ΠΌΠΈΡ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ. ASP.NET Core MVC ΠΈ Spring MVC (Java) ΠΏΠΎΡΡΠΈΠ³Π°Ρ Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΠ΅Π»Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ Π² Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ΡΠ΅. Laravel ΠΈ Django ΠΌΠΎΠ³Π°Ρ Π΄Π° Π³ΠΈ Π½Π°ΡΡΠΈΠ³Π½Π°Ρ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠΏΠΊΠΎΠ΄ (OPcache), ΠΊΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈ (Redis) ΠΈ Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅. Π’ΡΡΠ½ΠΎΡΠΎ ΠΌΡΡΡΠΎ Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ MVC ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΠΊΡΠΌ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, Π° Π½Π΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ ΠΎΡ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠ°.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ