ΠΠ°ΡΠ΅Π΄Π½ΠΈΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ° Π Π°ΠΈΡΡΠ΅ΠΈΡΠ΅Π½Π±Π°Π½ΠΊ .ΠΠΠ’ Π½Π°ΡΡΠ°Π²ΡΠ° ΡΠ° ΠΊΡΠ°ΡΠΊΠΈΠΌ ΠΏΡΠ΅Π³Π»Π΅Π΄ΠΎΠΌ ΡΠ°Π΄ΡΠΆΠ°ΡΠ° ΠΠΈΠ΅Π½Π½Π°ΠΠΠ’-Π°. Π ΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΈ Π·Π°ΡΡΠΎ ΡΠΌΠΎ Π΄ΠΎΡΠ»ΠΈ Π΄ΠΎ ΠΎΠ²ΠΎΠ³Π°,
Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΠ΅ΠΌΠΎ ΠΏΡΠΎΡΠΈ ΠΊΡΠΎΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΊΠΎΡΠ΅ ΡΠ΅ΠΊ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΌΠΎΡΡΠΈ Π·Π° ΡΠ°Π΄ ΡΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈΠΌ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ°ΠΌΠ°, ΡΠ΅Π΄ΠΎΠ²ΠΈΠΌΠ° ΠΈ Π±Π°Π·Π°ΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΌΠΎΠ³Ρ Π½Π°ΡΠΈ Ρ Π½Π°ΡΠ΅ΠΌ ΠΠΈΡΠ₯ΡΠ± ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡΠΌΡ (
ΠΠΈΠ΅Π½Π½Π°ΠΠΠ’.Π‘Π°Π³Π°Ρ
ΠΠ°Π΄Π° ΡΠ΅ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΠΏΡΠ΅Π±Π°ΡΠΈ Π½Π° ΠΠΠ ΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΎΠ½Π΄Π° ΠΊΠ°Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ»ΠΎΠ²Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ΅, Π½Π°ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²Π΅Π·Π°Π½ Π·Π° ΠΏΠΎΡΡΠ΅Π±Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½Π΅ ΡΡΠ°Π½ΡΠ°ΠΊΡΠΈΡΠ΅, ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΡΠΈ ΡΠ΅ΡΡΠΎ ΡΡΠΈΡΡ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π΄ΠΎΠΌΠ΅Π½Π° ΠΎΠ΄ΡΠ΅Π΄Π½ΠΎΠΌ. ΠΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅ ΡΠΏΠΎΠ·Π½Π°ΡΠΈ ΡΠ° ΡΠ°ΠΊΠ²ΠΈΠΌ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΈΠΌΠ°, Π½ΠΏΡ.
Π£ Π½Π°ΡΠΈΠΌ ΠΏΡΠΎΡΠ΅ΠΊΡΠΈΠΌΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π»ΠΈ ΡΠΌΠΎ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π°Π½, Π°Π»ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Π½ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ: ΡΠ°Π³Ρ, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΡΠ°Π³Ρ Π·Π°ΡΠ½ΠΎΠ²Π°Π½Ρ Π½Π° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡΠΈ. ΠΠ΅Π³ΠΎΠ²Π° ΡΡΡΡΠΈΠ½Π° ΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠ°: ΠΏΠΎΡΡΠΎΡΠΈ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈ ΠΏΠΎΡΠ»ΠΎΠ²Π½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΎ Ρ ΠΊΠΎΠΌΠ΅ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ΠΊΠ²Π΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ ΠΎΠ±Π°Π²ΡΠ°ΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅ Ρ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΈΠΌΠ°, Π° Π°ΠΊΠΎ ΡΠ΅ Ρ Π±ΠΈΠ»ΠΎ ΠΊΠΎΠΌ ΠΊΠΎΡΠ°ΠΊΡ ΠΏΠΎΡΠ°Π²Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ·Π²Π°ΡΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΡΠ°ΡΠ°ΡΠ° Π·Π° ΡΠ²Π΅ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½Π΅ ΠΊΠΎΡΠ°ΠΊΠ΅, Π³Π΄Π΅ ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅ΡΠ΅Π½ΠΎ. Π’Π°ΠΊΠΎ, Π½Π° ΠΊΡΠ°ΡΡ ΡΠ°Π³Π΅, Π±Π΅Π· ΠΎΠ±Π·ΠΈΡΠ° Π½Π° ΡΡΠΏΠ΅Ρ , Π΄ΠΎΠ±ΠΈΡΠ°ΠΌΠΎ Π΄ΠΎΡΠ»Π΅Π΄Π½Π΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρ ΡΠ²ΠΈΠΌ Π΄ΠΎΠΌΠ΅Π½ΠΈΠΌΠ°.
ΠΠ°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΠΈ Π΄Π°ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΡΠ΅Π½Π° Ρ ΡΠ²ΠΎΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΎΠ±Π»ΠΈΠΊΡ ΠΈ Π½ΠΈΡΠ΅ Π²Π΅Π·Π°Π½Π° Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ΅ ΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΈΠΌΠ°. ΠΠΈΡΠ΅ ΡΠ΅ΡΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ: ΡΠ°ΠΌΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΎΡΠ½ΠΎΠ²Π½Π΅ Π°ΠΏΡΡΡΠ°ΠΊΡΠ½Π΅ ΠΊΠ»Π°ΡΠ΅ Π‘Π°Π³Π°ΠΠ°ΡΠ΅<Π’>, Π³Π΄Π΅ ΡΠ΅ Π’ Π²Π°ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡΠ°Π»Π½Π° ΠΊΠ»Π°ΡΠ° Ρ ΠΊΠΎΡΠΎΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠΊΠ»Π°Π΄ΠΈΡΡΠΈΡΠ΅ ΠΏΠΎΡΠ΅ΡΠ½Π΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Π½Π΅ΠΎΠΏΡ ΠΎΠ΄Π½Π΅ Π΄Π° Π±ΠΈ ΡΠ°Π³Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π»Π°, ΠΊΠ°ΠΎ ΠΈ Π½Π΅ΠΊΠ΅ ΠΌΠ΅ΡΡΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅. ΠΠ½ΡΡΠ°Π½ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠΎΡΠ»Π΅ΡΠ΅Π½Π° ΡΠ²ΠΈΠΌ ΠΊΠΎΡΠ°ΡΠΈΠΌΠ° ΡΠΎΠΊΠΎΠΌ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ°. Π‘Π°ΠΌΠ° Π‘Π°Π³Π° ΡΠ΅ ΠΊΠ»Π°ΡΠ° Π±Π΅Π· ΡΡΠ°ΡΠ°, ΡΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ° ΠΌΠΎΠΆΠ΅ ΡΡΠ°Π²ΠΈΡΠΈ Ρ ΠΠ ΠΊΠ°ΠΎ Π‘ΠΈΠ½Π³Π»Π΅ΡΠΎΠ½ Π΄Π° Π±ΠΈ ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ»Π΅ ΠΏΠΎΡΡΠ΅Π±Π½Π΅ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠ³Π»Π°ΡΠ°:
public class ExampleSaga : SagaBase<ExampleContext>
{
public ExampleSaga()
{
Step("Step 1")
.WithAction(c => ...)
.WithCompensation(c => ...);
AsyncStep("Step 2")
.WithAction(async c => ...);
}
}
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ·ΠΈΠ²Π°:
var saga = new ExampleSaga();
var context = new ExampleContext();
await saga.Execute(context);
ΠΠΎΠ³Ρ ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΠΈ ΠΏΡΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ
ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°
ΠΠΈΠ΅Π½Π½Π°ΠΠΠ’.ΠΡΠΌ.*
Π‘ΠΊΡΠΏ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠ°Π΄ ΡΠ° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ Π±Π°Π·Π°ΠΌΠ° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΏΡΠ΅ΠΊΠΎ ΠΡ ΠΈΠ±Π΅ΡΠ½Π°ΡΠ΅-Π°. ΠΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΠ-Π€ΠΈΡΡΡ ΠΏΡΠΈΡΡΡΠΏ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΠΈΠΊΡΠΈΠ±Π°ΡΠ΅, ΡΠ°ΠΊΠΎ Π΄Π° ΠΏΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° ΡΠ°Π΄ ΡΠ° ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ° Ρ Π³ΠΎΡΠΎΠ²ΠΎΡ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°.
ViennaNET.Orm.Seedwork ΠΈ ViennaNET.Orm
β Π³Π»Π°Π²Π½ΠΈ ΡΠΊΠ»ΠΎΠΏΠΎΠ²ΠΈ ΠΊΠΎΡΠΈ ΡΠ°Π΄ΡΠΆΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠ΅ ΠΈ ΡΠΈΡ
ΠΎΠ²Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, ΡΠ΅ΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎ. ΠΠΎΠ³Π»Π΅Π΄Π°ΡΠΌΠΎ ΡΠΈΡ
ΠΎΠ² ΡΠ°Π΄ΡΠΆΠ°Ρ Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅.
interfejs IEntityFactoryService
ΠΈ ΡΠ΅Π³ΠΎΠ²Ρ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ EntityFactoryService
ΡΡ Π³Π»Π°Π²Π½Π° ΠΏΠΎΠ»Π°Π·Π½Π° ΡΠ°ΡΠΊΠ° Π·Π° ΡΠ°Π΄ ΡΠ° Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, Π±ΡΠ΄ΡΡΠΈ Π΄Π° ΡΠ΅ ΠΎΠ²Π΄Π΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΡ ΠΠ΅Π΄ΠΈΠ½ΠΈΡΠ° ΡΠ°Π΄Π°, ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ° Π·Π° ΡΠ°Π΄ ΡΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΠΌ Π΅Π½ΡΠΈΡΠ΅ΡΠΈΠΌΠ°, ΠΊΠ°ΠΎ ΠΈ ΠΈΠ·Π²ΡΡΠΈΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ Π‘ΠΠ ΡΠΏΠΈΡΠΈ. ΠΠΎΠ½Π΅ΠΊΠ°Π΄ ΡΠ΅ Π·Π³ΠΎΠ΄Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠΈ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ ΠΊΠ»Π°ΡΠ΅ Π·Π° ΡΠ°Π΄ ΡΠ° Π±Π°Π·ΠΎΠΌ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡ ΡΠ°ΠΌΠΎ ΡΠΈΡΠ°ΡΠ° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°. ΠΠ° ΡΠ°ΠΊΠ²Π΅ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π΅ IEntityFactoryService
ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΡΠ΅Π΄Π°ΠΊ β ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ IEntityRepositoryFactory
, ΠΊΠΎΡΠΈ ΡΠ°ΠΌΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ°.
ΠΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ°Π½ ΠΏΡΠΈΡΡΡΠΏ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠΈ ΡΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·Π°ΠΌ ΠΏΡΠΎΠ²Π°ΡΠ΄Π΅ΡΠ°. Π‘Π²Π°ΠΊΠΈ ΠΠΠΠ‘ ΠΊΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Ρ Π½Π°ΡΠΈΠΌ ΡΠΈΠΌΠΎΠ²ΠΈΠΌΠ° ΠΈΠΌΠ° ΡΠ²ΠΎΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ: ViennaNET.Orm.MSSQL, ViennaNET.Orm.Oracle, ViennaNET.Orm.SQLite, ViennaNET.Orm.PostgreSql
.
ΠΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ, Π²ΠΈΡΠ΅ ΠΏΡΠΎΠ²Π°ΡΠ΄Π΅ΡΠ° ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²Π°Π½ΠΎ Ρ ΡΠ΅Π΄Π½ΠΎΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ ΠΈΡΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎ, ΡΡΠΎ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΎΠΊΠ²ΠΈΡΡ ΡΠ΅Π΄Π½ΠΎΠ³ ΡΠ΅ΡΠ²ΠΈΡΠ°, Π±Π΅Π· ΠΈΠΊΠ°ΠΊΠ²ΠΈΡ ΡΡΠΎΡΠΊΠΎΠ²Π° Π·Π° ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅, Π΄Π° ΠΈΠ·Π²ΡΡΠΈ ΠΊΠΎΡΠ°ΠΊ ΠΏΠΎ ΠΊΠΎΡΠ°ΠΊ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡ ΡΠ° ΡΠ΅Π΄Π°Π½ ΠΠΠΠ‘ Ρ Π΄ΡΡΠ³ΠΈ. ΠΠ΅Ρ Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° ΠΈΠ·Π±ΠΎΡ ΠΏΠΎΡΡΠ΅Π±Π½Π΅ Π²Π΅Π·Π΅, Π° ΡΠ°ΠΌΠΈΠΌ ΡΠΈΠΌ ΠΈ ΠΏΡΠΎΠ²Π°ΡΠ΄Π΅ΡΠ° Π·Π° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Ρ ΠΊΠ»Π°ΡΡ Π΅Π½ΡΠΈΡΠ΅ΡΠ° (Π·Π° ΠΊΠΎΡΡ ΡΠ΅ ΠΏΠΈΡΠ΅ ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ Ρ ΡΠ°Π±Π΅Π»Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°) ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΊΡΠΎΠ· ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΡ Π΅Π½ΡΠΈΡΠ΅ΡΠ° Ρ ΠΊΠ»Π°ΡΡ ΠΠΎΡΠ½Π΄Π΅Π΄Π¦ΠΎΠ½ΡΠ΅ΠΊΡ (ΡΠ°Π΄ΡΠΆΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΡ Π΅Π½ΡΠΈΡΠ΅ΡΠ° Π΄ΠΎΠΌΠ΅Π½Π°) ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΎΠ²ΠΎΠ³ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°. ΠΠΏΠΏΠ»ΠΈΡΠ°ΡΠΈΠΎΠ½Π¦ΠΎΠ½ΡΠ΅ΠΊΡ (ΡΠ°Π΄ΡΠΆΠΈ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΡ Π΅Π½ΡΠΈΡΠ΅ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, Π΄ΠΈΡΠ΅ΠΊΡΠ½Π΅ Π·Π°Ρ ΡΠ΅Π²Π΅ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π΅), Π³Π΄Π΅ ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π²Π΅Π·Π΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ ΠΏΡΠΈΡ Π²Π°ΡΠ° ΠΊΠ°ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ:
"db": [
{
"nick": "mssql_connection",
"dbServerType": "MSSQL",
"ConnectionString": "...",
"useCallContext": true
},
{
"nick": "oracle_connection",
"dbServerType": "Oracle",
"ConnectionString": "..."
}
],
ΠΡΠΈΠΌΠ΅Ρ ΠΠΏΠΏΠ»ΠΈΡΠ°ΡΠΈΠΎΠ½Π¦ΠΎΠ½ΡΠ΅ΠΊΡ:
internal sealed class DbContext : ApplicationContext
{
public DbContext()
{
AddEntity<SomeEntity>("mssql_connection");
AddEntity<MigratedSomeEntity>("oracle_connection");
AddEntity<AnotherEntity>("oracle_connection");
}
}
ΠΠΊΠΎ ΠΠ Π²Π΅Π·Π΅ Π½ΠΈΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½, ΡΠ°Π΄Π° ΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π²Π΅Π·Π° ΠΏΠΎΠ΄ Π½Π°Π·ΠΈΠ²ΠΎΠΌ βΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π°β.
ΠΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΌΠ°ΠΏΠΈΡΠ°ΡΠ΅ Π΅Π½ΡΠΈΡΠ΅ΡΠ° Ρ ΡΠ°Π±Π΅Π»Π΅ Π±Π°Π·Π΅ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡ
ΠΠ₯ΠΈΠ±Π΅ΡΠ½Π°ΡΠ΅ Π°Π»Π°ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΎΠΏΠΈΡ ΠΈ ΠΊΡΠΎΠ· ΠΊΠΌΠ» Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΠΈ ΠΊΡΠΎΠ· ΠΊΠ»Π°ΡΠ΅. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ ΠΏΠΈΡΠ°ΡΠ΅ ΡΡΡΠ± ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡΠΌΠ° Ρ ββΡΠ΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²ΠΈΠΌΠ°, ΠΏΠΎΡΡΠΎΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ViennaNET.TestUtils.Orm
.
ΠΡΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΠΠΈΠ΅Π½Π½Π°ΠΠΠ’.ΠΡΠΌ.* ΡΠ΅ ΠΌΠΎΠ³Ρ Π½Π°ΡΠΈ
ΠΠΈΠ΅Π½Π½Π°ΠΠΠ’.ΠΠ΅ΡΡΠ°Π³ΠΈΠ½Π³.*
Π‘ΠΊΡΠΏ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠ°Π΄ ΡΠ° ΡΠ΅Π΄ΠΎΠ²ΠΈΠΌΠ°.
ΠΠ° ΡΠ°Π΄ ΡΠ° ΡΠ΅Π΄ΠΎΠ²ΠΈΠΌΠ° ΠΈΠ·Π°Π±ΡΠ°Π½ ΡΠ΅ ΠΈΡΡΠΈ ΠΏΡΠΈΡΡΡΠΏ ΠΊΠ°ΠΎ ΠΈ ΠΊΠΎΠ΄ ΡΠ°Π·Π½ΠΈΡ
ΠΠΠΠ‘-Π°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ ΠΌΠΎΠ³ΡΡΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΡΠ΅Π½ΠΈ ΠΏΡΠΈΡΡΡΠΏ Ρ ΠΏΠΎΠ³Π»Π΅Π΄Ρ ΡΠ°Π΄Π° ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΌ, Π±Π΅Π· ΠΎΠ±Π·ΠΈΡΠ° Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈ ΠΌΠ΅Π½Π°ΡΠ΅Ρ ΡΠ΅Π΄ΠΎΠ²Π°. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ViennaNET.Messaging
ΡΠ΅ ΡΠΏΡΠ°Π²ΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ°Π½ Π·Π° ΠΎΠ²ΠΎ ΡΡΠ΅Π΄ΠΈΡΠ΅ΡΠ΅, ΠΈ ViennaNET.Messaging.MQSeriesQueue, ViennaNET.Messaging.RabbitMQQueue ΠΈ ViennaNET.Messaging.KafkaQueue
ΡΠ°Π΄ΡΠΆΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ Π°Π΄Π°ΠΏΡΠ΅ΡΠ° Π·Π° ΠΠΠ ΠΠ, Π Π°Π±Π±ΠΈΡΠΠ ΠΈ ΠΠ°ΡΠΊΠ°, ΡΠ΅ΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΠΎ.
ΠΠ°Π΄Π° ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ° ΡΠ΅Π΄ΠΎΠ²ΠΈΠΌΠ°, ΠΏΠΎΡΡΠΎΡΠ΅ Π΄Π²Π° ΠΏΡΠΎΡΠ΅ΡΠ°: ΠΏΡΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΡΡΠΊΠ΅ ΠΈ ΡΠ΅Π½ΠΎ ΡΠ»Π°ΡΠ΅.
Π Π°Π·ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΎ ΠΏΡΠΈΠΌΠ°ΡΡ. ΠΠ²Π΄Π΅ ΠΏΠΎΡΡΠΎΡΠ΅ 2 ΠΎΠΏΡΠΈΡΠ΅: Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΠΈΠ΄Π½ΠΎ ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈ Π·Π° ΠΏΡΠΈΠΌΠ°ΡΠ΅ ΡΠ΅Π΄Π½Π΅ ΠΏΠΎΡΡΠΊΠ΅. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΡΠ°Π»Π½ΠΎ ΡΠ»ΡΡΠ°Π»ΠΈ ΡΠ΅Π΄, ΠΏΡΠ²ΠΎ ΠΌΠΎΡΠ°ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΡΠΈ ΠΊΠ»Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΎΠ΄ ΠΊΠΎΡΠ΅ ΡΠ΅ Π½Π°ΡΠ»Π΅ΡΠ΅Π½Π° IMessageProcessor
, ΠΊΠΎΡΠΈ ΡΠ΅ Π±ΠΈΡΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ°Π½ Π·Π° ΠΎΠ±ΡΠ°Π΄Ρ Π΄ΠΎΠ»Π°Π·Π½Π΅ ΠΏΠΎΡΡΠΊΠ΅. ΠΠ°ΡΠΈΠΌ, ΠΌΠΎΡΠ° Π±ΠΈΡΠΈ "ΠΏΠΎΠ²Π΅Π·Π°Π½" ΡΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΠΌ ΡΠ΅Π΄ΠΎΠΌ; ΡΠΎ ΡΠ΅ ΡΠ°Π΄ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΠΎΠΌ Ρ IQueueReactorFactory
ΠΎΠ·Π½Π°ΡΠ°Π²Π°ΡΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅Π΄Π° ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅:
"messaging": {
"ApplicationName": "MyApplication"
},
"rabbitmq": {
"queues": [
{
"id": "myQueue",
"queuename": "lalala",
...
}
]
},
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΊΠ° ΡΠ»ΡΡΠ°ΡΠ°:
_queueReactorFactory.Register<MyMessageProcessor>("myQueue");
var queueReactor = queueReactorFactory.CreateQueueReactor("myQueue");
queueReactor.StartProcessing();
ΠΠ°ΡΠΈΠΌ, ΠΊΠ°Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎΠΊΡΠ΅Π½Π΅ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ΅ ΠΏΠΎΠ·ΠΎΠ²Π΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ ΡΠ»ΡΡΠ°ΡΠ΅, ΡΠ²Π΅ ΠΏΠΎΡΡΠΊΠ΅ ΠΈΠ· Π½Π°Π²Π΅Π΄Π΅Π½ΠΎΠ³ ΡΠ΅Π΄Π° ΡΠ΅ ΠΈΡΠΈ Ρ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡ.
ΠΠ° Π±ΠΈΡΡΠ΅ ΠΏΡΠΈΠΌΠΈΠ»ΠΈ ΡΠ΅Π΄Π½Ρ ΠΏΠΎΡΡΠΊΡ Ρ ΡΠ°Π±ΡΠΈΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΡ IMessagingComponentFactory
ΠΏΠΎΡΡΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ CreateMessageReceiver
ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ ΠΏΡΠΈΠΌΠ°ΠΎΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ΠΊΠ° ΠΏΠΎΡΡΠΊΡ ΠΈΠ· ΡΠ΅Π΄Π° ΠΊΠΎΡΠΈ ΠΌΡ ΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½:
using (var receiver = _messagingComponentFactory.CreateMessageReceiver<TestMessage>("myQueue"))
{
var message = receiver.Receive();
}
ΠΠ° ΠΏΠΎΡΠ°ΡΠ΅ΡΠ΅ ΠΏΠΎΡΡΠΊΡ ΠΌΠΎΡΠ°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΈΡΡΠΎ IMessagingComponentFactory
ΠΈ ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΠΏΠΎΡΠΈΡΠ°ΠΎΡΠ° ΠΏΠΎΡΡΠΊΠ΅:
using (var sender = _messagingComponentFactory.CreateMessageSender<MyMessage>("myQueue"))
{
sender.SendMessage(new MyMessage { Value = ...});
}
ΠΠΎΡΡΠΎΡΠ΅ ΡΡΠΈ Π³ΠΎΡΠΎΠ²Π΅ ΠΎΠΏΡΠΈΡΠ΅ Π·Π° ΡΠ΅ΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΏΠΎΡΡΠΊΠ΅: ΡΠ°ΠΌΠΎ ΡΠ΅ΠΊΡΡ, ΠΠ‘ΠΠ ΠΈ ΠΠ‘ΠΠ, Π°Π»ΠΈ Π°ΠΊΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π°ΠΊΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠΏΡΡΠ²Π΅Π½Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠ° IMessageSerializer ΠΈ IMessageDeserializer
.
Π’ΡΡΠ΄ΠΈΠ»ΠΈ ΡΠΌΠΎ ΡΠ΅ Π΄Π° ΡΠ°ΡΡΠ²Π°ΠΌΠΎ ΡΠ΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π΅ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡΠΈ ΡΠ²Π°ΠΊΠΎΠ³ ΠΌΠ΅Π½Π°ΡΠ΅ΡΠ° ΡΠ΅Π΄ΠΎΠ²Π°, Π½ΠΏΡ. ViennaNET.Messaging.MQSeriesQueue
ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π²Π°ΠΌ Π΄Π° ΡΠ°ΡΠ΅ΡΠ΅ Π½Π΅ ΡΠ°ΠΌΠΎ ΡΠ΅ΠΊΡΡΡΠ°Π»Π½Π΅, Π²Π΅Ρ ΠΈ Π±Π°ΡΡ ΠΏΠΎΡΡΠΊΠ΅, ΠΈ ViennaNET.Messaging.RabbitMQQueue
ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π° ΡΡΡΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠ΅ΠΊΠ°ΡΠ΅ Ρ ΠΏΠΎΠΊΡΠ΅ΡΡ. ΠΠ°Ρ ΠΎΠΌΠΎΡΠ°Ρ Π°Π΄Π°ΠΏΡΠ΅ΡΠ° Π·Π° Π Π°Π±Π±ΠΈΡΠΠ ΡΠ°ΠΊΠΎΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π½Π΅ΠΊΠΈ ΠΏΡΠΈΠ²ΠΈΠ΄ Π ΠΠ¦-Π°: ΡΠ°ΡΠ΅ΠΌΠΎ ΠΏΠΎΡΡΠΊΡ ΠΈ ΡΠ΅ΠΊΠ°ΠΌΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ ΠΈΠ· ΠΏΠΎΡΠ΅Π±Π½ΠΎΠ³ ΠΏΡΠΈΠ²ΡΠ΅ΠΌΠ΅Π½ΠΎΠ³ ΡΠ΅Π΄Π°, ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ° ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π΄Π½Ρ ΠΏΠΎΡΡΠΊΡ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ°.
ΠΠΈΠ΅Π½Π½Π°ΠΠΠ’.Π¦Π°Π»Π»Π¦ΠΎΠ½ΡΠ΅ΠΊΡ
Π Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ
ΡΠΈΡΡΠ΅ΠΌΠ°, Π²Π΅Ρ ΠΈ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅ΡΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈΡΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΎΠΊΠ²ΠΈΡΡ ΡΠ°Π³Π΅. ΠΠ²ΠΎ ΡΠ΅ Π΄ΠΎΠ²Π΅Π»ΠΎ Π΄ΠΎ ΠΏΠΎΡΡΠ΅Π±Π΅ Π΄Π° ΡΠ΅ Π·Π°ΡΠ΅Π΄Π½ΠΎ ΡΠ° ΠΏΠΎΡΡΠΊΠΎΠΌ ΠΏΡΠ΅Π½Π΅ΡΡ ΠΈ ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΠΎΠ΄Π°ΡΠΈ ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ ΠΏΡΠΈΡΠ°Π²Π° ΠΊΠΎΡΠΈΡΠ½ΠΈΠΊΠ°, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π°Ρ
ΡΠ΅Π²Π° Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΡΠ΅ ΠΎΠ΄ ΠΊΡΠ°ΡΠ° Π΄ΠΎ ΠΊΡΠ°ΡΠ°, ΠΈΠ·Π²ΠΎΡΠ½Π° ΠΠ Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ΄Π°ΡΠΈ ΠΎ Π°ΡΡΠΎΡΠΈΠ·Π°ΡΠΈΡΠΈ. ΠΠ° Π±ΠΈΡΠΌΠΎ ΡΠΏΡΠΎΠ²Π΅Π»ΠΈ ΠΏΡΠΎΡΠ»Π΅ΡΠΈΠ²Π°ΡΠ΅ ΠΎΠ²ΠΈΡ
ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΡΠ°Π·Π²ΠΈΠ»ΠΈ ΡΠΌΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ViennaNET.CallContext
, ΠΊΠΎΡΠΈ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΡΠ°ΡΡΠ²Π°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΈΠ· Π·Π°Ρ
ΡΠ΅Π²Π° ΠΊΠΎΡΠΈ ΡΠ»Π°Π·ΠΈ Ρ ΡΡΠ»ΡΠ³Ρ. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, Π½Π°ΡΠΈΠ½ Π½Π° ΠΊΠΎΡΠΈ ΡΠ΅ Π·Π°Ρ
ΡΠ΅Π² Π½Π°ΠΏΡΠ°Π²ΡΠ΅Π½, ΠΏΡΠ΅ΠΊΠΎ ΡΠ΅Π΄Π° ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΊΠΎ Π₯ΡΡΠΏ-Π°, Π½ΠΈΡΠ΅ Π±ΠΈΡΠ°Π½. ΠΠ°ΡΠΈΠΌ, ΠΏΡΠ΅ ΡΠ»Π°ΡΠ° ΠΎΠ΄Π»Π°Π·Π½ΠΎΠ³ Π·Π°Ρ
ΡΠ΅Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΡΡΠΊΠ΅, ΠΏΠΎΠ΄Π°ΡΠΈ ΡΠ΅ ΡΠ·ΠΈΠΌΠ°ΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΡΠ°Π²ΡΠ°ΡΡ Ρ Π·Π°Π³Π»Π°Π²ΡΠ°. ΠΠ°ΠΊΠ»Π΅, ΡΠ»Π΅Π΄Π΅ΡΠΈ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ° ΠΏΠΎΠΌΠΎΡΠ½Π΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΈ ΡΠΈΠΌΠ΅ ΡΠΏΡΠ°Π²ΡΠ° Π½Π° ΠΈΡΡΠΈ Π½Π°ΡΠΈΠ½.
Π₯Π²Π°Π»Π° Π²Π°ΠΌ Π½Π° ΠΏΠ°ΠΆΡΠΈ, ΡΠ°Π΄ΡΡΠ΅ΠΌΠΎ ΡΠ΅ Π²Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΠΌΠ° ΠΈ Π·Π°Ρ
ΡΠ΅Π²ΠΈΠΌΠ° Π·Π° ΠΏΠΎΠ²Π»Π°ΡΠ΅ΡΠ΅!
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ
Π°Π±Ρ.ΡΠΎΠΌ