Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ±ΠΎΡ ΡΠΈΡΡΠ΅ΠΌ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
ΠΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ
Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ, ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ½Π° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
. ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΠ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ, ΠΈ ΡΠΎΠ³Π΄Π° ORM ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½ΠΎ ΡΠ°ΠΊΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ
Π΅ΠΌΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π΅ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π΄Π°Π½Π½ΡΡ
Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π΄Π°Π½Π½ΡΡ
.
Π ΡΠ°ΠΌΠΊΠ°Ρ
Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ Π½Π°ΠΌ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ
. ΠΠ°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎΡ ΠΎΠ±Π·ΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡ
ΡΡ Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ.
ΠΠ°Π΄Π°ΡΠ°
Π Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π²Π΅Π΄Π΅ΡΡΡ Π°ΠΊΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° β Docs Security Suite (DSS). Π‘Π΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΏΠΈΡΠ΅ΡΡΡ Π½Π° .Net Core, ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π‘Π£ΠΠ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Entity Framework Core. ΠΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Code First.
ΠΠΎΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ β ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠ²ΠΎΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΡΡ ΡΠ°ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ.
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΠΎΠΊΠΎΠ»Π΅Π½ΠΈΠΈ DSS Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Entity Framework Migrations (EF 6). ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊ Π½Π΅ΠΌΡ Π½Π°ΠΊΠΎΠΏΠΈΠ»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΡΠ΅Π½Π·ΠΈΠΈ, Π³Π»Π°Π²Π½Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π»Π°ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² EF ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π²ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² Π²Π΅ΡΡΠΈΠΉ. ΠΡΠΎΡ ΡΠ°ΠΊΡ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π°Ρ ΠΎΠ³ΠΎΡΡΠ°Π΅Ρ ΠΏΡΠΈ Π±Π°Π³ΡΠΈΠΊΡΠΈΠ½Π³Π΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΌΠΈ:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π‘Π£ΠΠ. ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ MS SQL Server, PostgreSQL, Oracle, Π½ΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΡ
- Π Π°Π±ΠΎΡΠ° Ρ ORM. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ EF Core, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΡΡΠ°ΠΏΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ Π³ΠΎΡΠΎΠ²Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ORM
- ΠΠ²ΡΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ. Π‘ ΡΡΠ΅ΡΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Code First Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Β«ΡΠ°ΡΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΡΠΊΠ°ΠΌΠΈΒ» ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ
- ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ Π²Π΅ΡΡΠΈΠΉ. Π ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΈ ΠΌΠ΅ΡΠ΄ΠΆΠΈΠ½Π³Π΅ EF Core ΠΌΠΎΠΆΠ΅Ρ Π²Π°Π»ΠΈΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ°Ρ . ΠΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ°ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ
- Π Π°Π·Π²ΠΈΡΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°. ΠΠ΄Π΅ΡΡ, Π½Π°ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ Π½Π΅ Π½ΡΠΆΠ½Ρ
- ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎΡΡΡ. ΠΡΠΈΡΠ΅ΡΠΈΠΉ ΡΡΠ»ΠΎΠ²Π½ΡΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΡΠΎΠ³ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΎΠ³ΠΈΠ΅, Π½ΠΎ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠ΅ Π² ΡΠ΄ΠΎΠ±ΡΡΠ²Π΅, ΠΌΡ ΡΠΎΠΆΠ΅ Π³ΠΎΡΠΎΠ²Ρ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ ΠΈ ΠΏΡΠΈΠ·Π½Π°Π½Ρ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ:
- EF Core Migrations
- DBup
- RoundhousE
- ThinkingHome.Migrator
- Fluent Migrator
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ Π±ΡΠ» ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ°. ΠΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΏΠ»ΡΡΠΎΠΊ Ρ Π±ΡΠ±Π½ΠΎΠΌ. ΠΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ, ΠΏΡΠΎΡΡΠΎΡΠ° ΠΈ Ρ.Π΄. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠ΅ΡΠ΅Π½Π·ΠΈΠΈ, ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΠ²ΡΠΈΠ΅ΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ EF, Π²ΠΏΠΎΠ»Π½Π΅ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ ΠΈ Π΄Π»Ρ EF Core.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π»Ρ EF Core Π²ΡΠ΄Π΅Π»Π΅Π½Ρ ΠΏΠ»ΡΡΡ:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Microsoft, Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π½Π° ΡΡΡΡΠΊΠΎΠΌ, ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠΌΡΡΠ½ΠΈΡΠΈ
- ΠΠ²ΡΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ CodeFirst
- ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ EF 6 Π² EF Core ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ½ΠΈΠΌΠΎΠΊ ΠΠ. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ EF Core Π² Code First ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ»ΡΡΠ΅ΠΌ ΠΎΡ Code First β Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π΅ΡΡΠΈ ΠΎΠ΄Π½Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π½Π° Π²ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ
- ΠΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠΎΠ² β ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈ PostgreSQL, ΠΈ Oracle, ΠΈ Ρ.Π΄., ΠΈ Ρ.ΠΏ., ΠΈ Π΄Π°ΠΆΠ΅ β MS SQL Server ο
Π ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΈΠ½ΡΡΡ:
- Π Π°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΎΡΡΠ°Π»ΠΎΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΡΠΎΠ²Π½Π΅. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠ½ΠΈΠΌΠΊΠΈ ΠΠ
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΠΎΡΠΎΡΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ
DbUp
DbUp β ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° .NET, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ NuGetβΠΎΠΌ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΊΠ°ΡΡΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π° SQL Server. ΠΠ½Π° ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ, ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΠ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π²ΡΡΠΎΡΠ»Π° ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΠΏΠ΅Π½ΡΠΎΡΡΠ½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° Π±Π»ΠΎΠ³ΠΎΠ² Π½Π° ASP.NET ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT, Π° ΠΊΠΎΠ΄ Π»Π΅ΠΆΠΈΡ Π½Π° GitHubβΠ΅. ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ T-SQL.
ΠΠ°ΠΊΠΈΠ΅ ΡΡΡ ΠΏΠ»ΡΡΡ:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π‘Π£ΠΠ (MS SQL Server, PstgreSQL, MySQL)
- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΡΠΈΠΏΡΡ ΠΏΠΈΡΡΡΡΡ Π½Π° T-SQL, Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ
- ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ SQL
Π ΠΌΠΈΠ½ΡΡΡ:
- ΠΡΠΈ Π²ΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ Π‘Π£ΠΠ, Oracle Π² ΠΈΡ ΡΠΈΡΠ»ΠΎ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΡ
- ΠΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ORM
- ΠΠ°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ² Π½Π° T-SQL Β«ΡΡΡΠΊΠ°ΠΌΠΈΒ» β Π½Π΅ ΡΠΎ, ΠΊ ΡΠ΅ΠΌΡ ΠΌΡ ΡΡΡΠ΅ΠΌΠΈΠ»ΠΈΡΡ
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΊΠΎΠΌΡΡΠ½ΠΈΡΠΈ ΡΠ°ΠΊ ΡΠ΅Π±Π΅, Ρ ΠΎΡΡ Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ SQL-ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΎΠ½ΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ.
RoundhousE
ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΌΠΈ, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° Π΄Π²ΠΈΠΆΠΊΠ΅ T-SQL ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ. Π‘ΡΠ΄Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ°Π²ΠΈΠ»ΠΈ Π²ΠΎ Π³Π»Π°Π²Ρ ΡΠ³Π»Π° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΡΠ°ΡΡΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π‘Π£ΠΠ, Π° Π½Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΡΠΎΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ»ΡΡΡ:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π‘Π£ΠΠ (Π²ΠΊΠ»ΡΡΠ°Ρ Oracle)
ΠΠΈΠ½ΡΡΡ:
- Oracle (Π° ΡΠ°ΠΊ ΠΆΠ΅ Π½Π΅Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ Π΄Π»Ρ Π½Π°Ρ Access) Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π° .NET Core, ΡΠΎΠ»ΡΠΊΠΎ Π½Π° .NET Full Framework
- ΠΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ORM
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΅ΡΠ΅ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°
- ΠΠΏΡΡΡ ΠΆΠ΅ β ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΏΠΈΡΡΡΡΡ ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠΈ
ThinkingHome.Migrator
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΡΡ
Π΅ΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ΄ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ .NET Core, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT.
ΠΠ»ΡΡΡ:
- ΠΠ°ΡΠΎΡΠ΅Π½ ΠΏΠΎΠ΄ .NET Core
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²Π΅ΡΠ²ΠΈΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ
ΠΠΈΠ½ΡΡΡ:
- ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ β Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄. Π‘ΡΠ΄Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠ΅ΠΊΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ
- ΠΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Oracle (Π² ΡΡΠ°ΡΡΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄ .NET Core β Π½ΠΎ ΡΡΠΎ Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄)
- ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π°Π²ΡΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ
Π ΡΠ΅Π»ΠΎΠΌ, ΠΏΡΠΎΠ΅ΠΊΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π»ΡΡ Π±Ρ, Π½ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π΄Π΅ΡΡ ΠΈ ΡΠ΅ΠΉΡΠ°Ρ.
Fluent Migrator
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π±ΠΎΠ»ΡΡΡΡ Π°ΡΠΌΠΈΡ ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊΠΎΠ². Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0. ΠΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ .NET, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ Ruby on Rails Migrations. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡ Π΅ΠΌΡ ΠΠ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ°Ρ Π½Π° C#.
Π’ΡΡ Π΅ΡΡΡ ΠΏΠ»ΡΡΡ:
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π‘Π£ΠΠ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° .NET Core
- ΠΠΎΠ»ΡΡΠΎΠ΅ ΡΠ°Π·Π²ΠΈΡΠΎΠ΅ ΠΊΠΎΠΌΡΡΠ½ΠΈΡΠΈ
- ΠΠΎΠ½ΡΠ»ΠΈΠΊΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ ΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ β Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡ Π²ΠΎΠΊΡΡΠ³ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈ ΠΌΠ΅ΡΠ΄ΠΆΠΈΠ½Π³Π΅ ΠΊΠΎΠ΄Π° Π΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅
- ΠΡΡΡ ΠΏΡΠΎΡΠΈΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ. Π ΠΌΠΎΠ³ΡΡ Π½Π΅ΡΡΠΈ Π² ΡΠ΅Π±Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΌΠ΅ΡΡΡ Π½Π°Π·Π°Π΄, ΡΠΎ Π΅ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΆΠΈΠ²Π΅Ρ
Π§ΡΠΎ ΠΆΠ΅ Π΄ΠΎ ΠΌΠΈΠ½ΡΡΠΎΠ², ΡΠΎ ΡΡΡ:
- ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ Π°Π²ΡΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ
- ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠ²ΡΠ·Ρ Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ EF
- ΠΠ΅Ρ ΡΠ½ΠΈΠΌΠΊΠΎΠ² ΠΠ
ΠΠ°ΠΊΠΎΠ² ΠΆΠ΅ Π±ΡΠ» Π½Π°Ρ Π²ΡΠ±ΠΎΡ?
Π‘Π°ΠΌΡΠ΅ Π³ΠΎΡΡΡΠΈΠ΅ ΡΠΏΠΎΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ Π²ΠΎΠΊΡΡΠ³ Π΄Π²ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² β Π°Π²ΡΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΉ ΠΈ Π²ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ². ΠΡΠΎΡΠΈΠ΅ ΡΠ°ΠΊΡΠΎΡΡ ΠΏΡΠ³Π°Π»ΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅. Π ΠΈΡΠΎΠ³Π΅, ΠΏΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Fluent Migrator. ΠΠ±ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅ ΠΏΡΠΈΠ½Π΅ΡΠ΅Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ»ΡΡΠΎΠ².
ΠΡΠ²ΠΎΠ΄Ρ
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ Π±ΡΠ²Π°Π΅Ρ. ΠΠΎΡ ΠΈ Π½Π°ΠΌ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°ΡΡΡΠ°Π²ΠΈΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ Π² Π½Π°ΡΠΈΡ
Β«Ρ
ΠΎΡΠ΅Π»ΠΊΠ°Ρ
Β». ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈ Π΄ΡΡΠ³ΠΈΡ
Π·Π°Π΄Π°Ρ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ΅ΡΠ°ΡΡΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΠΊΡΠΎΡΡ. ΠΠ°Π΄Π΅Π΅ΠΌΡΡ, Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ±ΠΎΡ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com