ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΊ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
Π΄Π°Π½Π½ΡΡ
Π² enum Π΄ΠΎΡΠ½Π΅ΡΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ #sourcegenerator Π΄Π»Ρ compile-time Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΎΠ². #dotnet
https://github.com/MMaximus111/StaticDictionaries
https://github.com/MMaximus111/StaticDictionaries
π2
Design Patterns Library - Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ Π½Π° C# ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ #dotnet
upd: Π²Π·Π³Π»ΡΠ΄ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ
upd: Π²Π·Π³Π»ΡΠ΄ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ
MassTransit - ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΡΠΈΠ½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ InMemory (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²Π½ΡΡΡΠΈ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ°), ΡΠ°ΠΊ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ RabbitMQ/Azure/SQS Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ. ΠΠΎΠΎΠ±ΡΠ΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ°Π½Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° - ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΠ»ΠΈΡΡ CQRS ΡΡΠ°Π·Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ MassTransit - ΠΏΠΎΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΡΠ΅ ΡΠ°ΡΠΏΠΈΠ»ΠΈΡΡ Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΡ ΠΈ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½ΡΠ΅ Π±ΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Π£ΠΌΠ΅Π΅Ρ Π²ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ - Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΈ broadcast ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Ρ ΠΎΡΠΎΡΠ΅Π΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² MS DI, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π²Π΅ΡΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΏΡΠΎΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ) ΠΈ Ρ.Π΄. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌ correlation id, Π΅ΡΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π£ΠΆΠ΅ Π΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ mediator, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΆΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ°ΠΊ Ρ MS DI ΡΠ°ΠΊ ΠΈ Ρ MassTransit. ΠΡΡΡ ΠΏΠ°ΠΊΠ΅Ρ Automatonymous, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ state-ΠΌΠ°ΡΠΈΠ½Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Ρ.Ρ. ΠΏΠ°ΡΡΠ΅ΡΠ½Π° Saga.
ΠΠΎΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΆΠΈΠ²ΡΡ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ, Π²ΡΠ΅ Π΄Π΅ΡΡΠΊΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΊΠΈ ΡΠΆΠ΅ Π²ΡΠ»Π΅ΡΠ΅Π½Ρ. ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ :) #dotnet
upd: Π²Π΄ΠΎΠ³ΠΎΠ½ΠΊΡ - ΡΠ²ΠΈΡΡΠ΅Ρ-ΡΡΠ΅Π΄ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ RabbitMQ
Π£ΠΌΠ΅Π΅Ρ Π²ΡΡ, ΡΡΠΎ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ - Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΠΈ broadcast ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Ρ ΠΎΡΠΎΡΠ΅Π΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² MS DI, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π²Π΅ΡΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΏΡΠΎΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ) ΠΈ Ρ.Π΄. Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌ correlation id, Π΅ΡΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π£ΠΆΠ΅ Π΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ mediator, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΆΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΊΠ°ΠΊ Ρ MS DI ΡΠ°ΠΊ ΠΈ Ρ MassTransit. ΠΡΡΡ ΠΏΠ°ΠΊΠ΅Ρ Automatonymous, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ state-ΠΌΠ°ΡΠΈΠ½Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Ρ.Ρ. ΠΏΠ°ΡΡΠ΅ΡΠ½Π° Saga.
ΠΠΎΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΆΠΈΠ²ΡΡ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ, Π²ΡΠ΅ Π΄Π΅ΡΡΠΊΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΊΠΈ ΡΠΆΠ΅ Π²ΡΠ»Π΅ΡΠ΅Π½Ρ. ΠΠ°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ :) #dotnet
upd: Π²Π΄ΠΎΠ³ΠΎΠ½ΠΊΡ - ΡΠ²ΠΈΡΡΠ΅Ρ-ΡΡΠ΅Π΄ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ RabbitMQ
Π Π΅Π³ΡΠ»ΡΡΠ½ΠΎ ΡΠΈΡΠ°Ρ Π² ΡΠΎΡΠ΅Π΄Π½ΠΈΡ
ΠΊΠ°Π½Π°Π»Π°Ρ
Π±ΠΎΠ»Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ°ΡΠ½ΡΠ΅ EF Core ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ - Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³Ρ Π΄ΠΎΠ½Π΅ΡΡΠΈ Π΄ΠΎ Π½ΠΈΡ
ΠΈ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ FluentMigrator.
Π Π½ΡΠΌ ΡΠΎΠΆΠ΅ Π΅ΡΡΡ Π²ΡΡ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π²ΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠΎΡΡΡΠ»Π΅ΠΉ ΠΈ ΡΠ΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ - Π²ΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ code first. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠ°ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ, ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ, ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ - ΠΈ Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π½ΡΠΆΠ΄Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ) - ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ ΡΡΠΎ Π΄Π°, Π²Π½ΡΡΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΈ Π²Π½ΡΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΡ ΠΈ ΠΏΠ»ΡΡΠΎΠΌ - ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠΎΡΠ° Π΄Π΅ΡΡΡΠΊΠΎΠ² Π‘Π£ΠΠ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» FluentMigrator Π»ΠΈΡΠ½ΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΡΠ²ΠΎΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ (Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΠ) - Π²ΡΠ΅Π³Π΄Π° Π½Π°ΡΠΈΠ½Π°Ρ Ρ FluentMigrator :)) #dotnet
Π Π½ΡΠΌ ΡΠΎΠΆΠ΅ Π΅ΡΡΡ Π²ΡΡ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π²ΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΊΠΎΡΡΡΠ»Π΅ΠΉ ΠΈ ΡΠ΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ - Π²ΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ code first. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠ°ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ, ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ, ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ - ΠΈ Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π½ΡΠΆΠ΄Π° ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΡΠ΅Π½Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ) - ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ ΡΡΠΎ Π΄Π°, Π²Π½ΡΡΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΈ Π²Π½ΡΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΡ ΠΈ ΠΏΠ»ΡΡΠΎΠΌ - ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠΎΡΠ° Π΄Π΅ΡΡΡΠΊΠΎΠ² Π‘Π£ΠΠ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» FluentMigrator Π»ΠΈΡΠ½ΠΎ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΡΠ²ΠΎΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ (Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΠ) - Π²ΡΠ΅Π³Π΄Π° Π½Π°ΡΠΈΠ½Π°Ρ Ρ FluentMigrator :)) #dotnet
π1π₯1
Orleans - ΡΠΆΠ΅ ΡΡΠ΅ΡΠΈΠΉ Π³ΠΎΠ΄ Π²ΡΡ Ρ
ΠΎΡΡ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΆΠΈΠ²ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΡΠΎΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π°ΠΊΡΠΎΡΠΎΠ² (ΡΡΠ° ΡΠ΅ΠΌΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ°ΡΠ°Ρ ΠΊΡΡΠ°ΡΠΈ, ΡΠΎΠ΄ΠΈΠ»Π°ΡΡ Π΅ΡΡ Π² 70-ΡΠ΅ Π³ΠΎΠ΄Ρ).
ΠΠΊΡΠ°ΡΡΠ΅, ΠΏΡΠΎΡΡΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΈ Π΄Π»Ρ ΡΠ΅Ρ ΠΊΡΠΎ Π½Π΅ Π²ΠΊΡΡΡΠ΅, ΡΡΡΡ ΠΈΠ΄Π΅ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°: Π²ΡΠ½Π΅ΡΡΠΈ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² (grain's) Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ (silo = Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΎ "Π±ΡΠ½ΠΊΠ΅Ρ"), ΠΊΠΎΡΠΎΡΡΠ΅ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) ΠΆΠΈΠ²ΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·Π»Π°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠ²ΠΎΡ ΠΎΡΡΠ΅Π΅Π΄Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅Ρ. ΠΠ»ΠΈΠ΅Π½Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ ΠΏΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ, ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ (Π΅ΡΠ»ΠΈ ΡΠ΄ΠΎΡ ΠΎΠ΄ΠΈΠ½ silo - Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ grain ΠΎΠΆΠΈΠ²ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ), Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΡΡΡΠΊΠΈ. Π§ΡΠΎ Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ: Π² Orleans ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ compile-time Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΊΡΠΈ-DTO Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ grain'ΠΎΠ² - Π² ΠΎΠ΄Π½ΠΎΠΌ silo ΠΌΠΎΠ³ΡΡ ΠΆΠΈΡΡ grain'Ρ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ API.
ΠΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°Π²Π°ΡΡ ΡΡΠΎΠΊ ΠΆΠΈΠ·Π½ΠΈ grain'ΠΎΠ² ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΉ strategy placement, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΡΠ½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠ°ΠΊ Π΄Π΅Π»ΠΈΡΡ grain's ΠΌΠ΅ΠΆΠ΄Ρ silo ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ grain's ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΠΎΠ΄ΠΈΠ½ silo, grain's Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ - Π² Π΄ΡΡΠ³ΠΎΠΉ). Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ Π΄Π»Ρ MS DI ΡΡΠΎ Π²ΡΡ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Configure<T>.
Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ persistance Π΄Π»Ρ grain'ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΊΠΎΡΠΎΠ±ΠΎΡΠ½ΡΠΉ, Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ (ΡΠ°ΠΌ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ), ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ ΡΡΠΎ grain ΠΏΡΠΈ ΡΠ΅ΡΡΠ°ΡΡΠ΅ silo ΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΎΠΆΠΈΠ²Π°Π΅Ρ Ρ ΡΠΆΠ΅ Π½ΡΠΆΠ½ΡΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΎΡΡ Π΄Π»Ρ ΡΠ΅Π»Π΅Π³ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΠ΅ΠΉ ΠΎΡΠ»ΠΈΡΠ½ΠΎ Π»ΠΎΠΆΠ°ΡΡΡΡ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π°ΠΊΡΠΎΡΠΎΠ² - state Π°ΠΊΡΠΎΡΠ° Ρ ΡΠ°Π½ΠΈΡΠ° Π² ΠΠ, ΠΏΠΎ id ΡΠ·Π΅ΡΠ° ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈ ΠΏΠΈΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΠ, ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ·Π΅ΡΠ° grain Π΄ΠΈΡΠΏΠΎΠ·ΠΈΡΠ° (Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡΠΎΡΡΠ°ΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ Π±Π΅Π· ΡΠ°Π±ΠΎΡΡ Π°ΠΊΡΠΎΡΠ° Π·Π°Π΄Π°ΡΡΡΡ) ΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ - Ρ ΠΎΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΡΠ·Π΅ΡΠΎΠ² Π°ΠΊΡΠΎΡΠΎΠ² ΠΆΠΈΠ²ΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ silo.
ΠΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΠΈΠ΅ ΡΡΠΈ Π³ΠΎΠ΄Π° Microsoft Π΄ΠΎΠ»ΠΎΠΆΠΈΠ» Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΠΏΠΎΠ»ΡΠΎΡΠ° Π΄Π΅ΡΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΈΠ»ΠΈΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΠ°ΠΊΠΆΠ΅ Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π΄Π΅Π»ΠΈΡΡ tutorials (ΠΈ Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΡΠ°ΠΌ 2017ΠΉ Π³ΠΎΠ΄ - ΠΎΠ½ΠΈ ΠΏΠΎ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ), ΠΏΡΠΈΠΊΡΡΡΠΈΠ» ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΠΏΡΠΈΡΠ΅ΡΠ°Π» ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π» Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π‘Π°ΠΌ Microsoft ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Orleans ΠΊΠ°ΠΊ Π±Π°ΠΊΠ΅Π½Π΄ Π΄Π»Ρ ΠΈΠ³ΡΡ Halo. Π ΡΠΆΠ΅ Π°ΠΏΠ΄Π΅ΠΉΡΠ½ΡΠ» Π΅Π³ΠΎ Π΄ΠΎ .NET 7. ΠΠΎΠ±ΡΠ΅ΠΌ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΡΡ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΎ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ - Π»ΡΡΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π΄ΠΎΠΊΡ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅ΡΡΡΠΎΠΊ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² - ΠΎΠ½ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΈ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ). #dotnet
ΠΠΊΡΠ°ΡΡΠ΅, ΠΏΡΠΎΡΡΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΈ Π΄Π»Ρ ΡΠ΅Ρ ΠΊΡΠΎ Π½Π΅ Π²ΠΊΡΡΡΠ΅, ΡΡΡΡ ΠΈΠ΄Π΅ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°: Π²ΡΠ½Π΅ΡΡΠΈ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² (grain's) Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ (silo = Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΎ "Π±ΡΠ½ΠΊΠ΅Ρ"), ΠΊΠΎΡΠΎΡΡΠ΅ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ) ΠΆΠΈΠ²ΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·Π»Π°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΡΠ²ΠΎΡ ΠΎΡΡΠ΅Π΅Π΄Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π² ΠΊΠ»Π°ΡΡΠ΅Ρ. ΠΠ»ΠΈΠ΅Π½Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ ΠΏΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ, ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ (Π΅ΡΠ»ΠΈ ΡΠ΄ΠΎΡ ΠΎΠ΄ΠΈΠ½ silo - Π·Π°ΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ grain ΠΎΠΆΠΈΠ²ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ), Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΡ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΡΡΡΠΊΠΈ. Π§ΡΠΎ Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ: Π² Orleans ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ compile-time Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΊΡΠΈ-DTO Π΄Π»Ρ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ grain'ΠΎΠ² - Π² ΠΎΠ΄Π½ΠΎΠΌ silo ΠΌΠΎΠ³ΡΡ ΠΆΠΈΡΡ grain'Ρ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ API.
ΠΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°Π΄Π°Π²Π°ΡΡ ΡΡΠΎΠΊ ΠΆΠΈΠ·Π½ΠΈ grain'ΠΎΠ² ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΉ strategy placement, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΡΡΠ½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠ°ΠΊ Π΄Π΅Π»ΠΈΡΡ grain's ΠΌΠ΅ΠΆΠ΄Ρ silo ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ grain's ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΠΎΠ΄ΠΈΠ½ silo, grain's Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ - Π² Π΄ΡΡΠ³ΠΎΠΉ). Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ Π΄Π»Ρ MS DI ΡΡΠΎ Π²ΡΡ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Configure<T>.
Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ persistance Π΄Π»Ρ grain'ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΊΠΎΡΠΎΠ±ΠΎΡΠ½ΡΠΉ, Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ (ΡΠ°ΠΌ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎ), ΡΡΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ ΡΡΠΎ grain ΠΏΡΠΈ ΡΠ΅ΡΡΠ°ΡΡΠ΅ silo ΠΈ Π·Π°ΠΏΡΠΎΡΠ΅ Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΎΠΆΠΈΠ²Π°Π΅Ρ Ρ ΡΠΆΠ΅ Π½ΡΠΆΠ½ΡΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΎΡΡ Π΄Π»Ρ ΡΠ΅Π»Π΅Π³ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ΅ΡΠ΅ΠΉ ΠΎΡΠ»ΠΈΡΠ½ΠΎ Π»ΠΎΠΆΠ°ΡΡΡΡ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π°ΠΊΡΠΎΡΠΎΠ² - state Π°ΠΊΡΠΎΡΠ° Ρ ΡΠ°Π½ΠΈΡΠ° Π² ΠΠ, ΠΏΠΎ id ΡΠ·Π΅ΡΠ° ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΈ ΠΏΠΈΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² ΠΠ, ΠΏΡΠΈ ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ·Π΅ΡΠ° grain Π΄ΠΈΡΠΏΠΎΠ·ΠΈΡΠ° (Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ ΠΏΡΠΎΡΡΠ°ΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ Π±Π΅Π· ΡΠ°Π±ΠΎΡΡ Π°ΠΊΡΠΎΡΠ° Π·Π°Π΄Π°ΡΡΡΡ) ΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ - Ρ ΠΎΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½
ΠΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΠΈΠ΅ ΡΡΠΈ Π³ΠΎΠ΄Π° Microsoft Π΄ΠΎΠ»ΠΎΠΆΠΈΠ» Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΠΏΠΎΠ»ΡΠΎΡΠ° Π΄Π΅ΡΡΡΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΈΠ»ΠΈΡΠ½ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΠ°ΠΊΠΆΠ΅ Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π΄Π΅Π»ΠΈΡΡ tutorials (ΠΈ Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ ΡΡΠΎ ΡΠ°ΠΌ 2017ΠΉ Π³ΠΎΠ΄ - ΠΎΠ½ΠΈ ΠΏΠΎ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ), ΠΏΡΠΈΠΊΡΡΡΠΈΠ» ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, ΠΏΡΠΈΡΠ΅ΡΠ°Π» ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π» Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π‘Π°ΠΌ Microsoft ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Orleans ΠΊΠ°ΠΊ Π±Π°ΠΊΠ΅Π½Π΄ Π΄Π»Ρ ΠΈΠ³ΡΡ Halo. Π ΡΠΆΠ΅ Π°ΠΏΠ΄Π΅ΠΉΡΠ½ΡΠ» Π΅Π³ΠΎ Π΄ΠΎ .NET 7. ΠΠΎΠ±ΡΠ΅ΠΌ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΡΡ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΎ.
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΡ - Π»ΡΡΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π΄ΠΎΠΊΡ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ Π΄Π΅ΡΡΡΠΎΠΊ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² - ΠΎΠ½ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΈ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ). #dotnet
Docs
Orleans overview - .NET
An introduction to .NET Orleans.
π₯2
Π ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΡΠ΅ΠΌΡ - Π΅ΡΡ Π΄Π²Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌ Π½Π° Π°ΠΊΡΠΎΡΠ°Ρ
, ΠΏΡΠΎ ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΡΠ΅Π³ΠΎ Ρ.ΠΊ. Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π½ΠΈ Π² ΠΆΠΈΠ²ΡΡ
Π½ΠΈ Π² ΡΠ΅ΡΡΠΎΠ²ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
, Π½ΠΎ ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ.
Akka.NET - Π·Π°ΡΠ²Π»ΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎ capability ΡΡΠΎ ΠΏΠΎΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Akka Ρ Java/Scala ΠΈ ΠΎΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ 50 million msg/sec on a single machine. Small memory footprint; ~2.5 million actors per GB of heap, ΡΡΠΎ ΠΏΡΡΠΌΠΎ ΡΠ°ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΠ΅ΠΉ-tutorial'ΠΎΠ² (ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ):
ΠΠ΅ΠΏΠ»ΠΎΡ ΠΎΠ΅ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ + ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ.
Actor-Model System with Akka.
Working with Akka.NET and Akka.Cluster
First steps, Calling actors from another actor ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ A.BrandΓ£o Lustosa
Proto.Actor - Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ (ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Orleans ΠΈΠ»ΠΈ Akka), Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ Π»ΠΈΠ±ΠΎ ΡΠ΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠΈΠΌΠ΅ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Ρ Π²Π°ΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ°ΠΌ ΡΡΡΠΊ 30, Π½Π° Π»ΡΠ±ΠΎΠΉ Π²ΠΊΡΡ. Π’ΠΎΠΆΠ΅ ΡΠΌΠ΅Π΅Ρ persistence ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π² ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ΅ΡΡΠ° ΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΡΠ±Π΅ΡΠ° ΠΈΠ»ΠΈ Consul.
#dotnet
Akka.NET - Π·Π°ΡΠ²Π»ΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎ capability ΡΡΠΎ ΠΏΠΎΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Akka Ρ Java/Scala ΠΈ ΠΎΠ½ΠΎ ΡΠΌΠ΅Π΅Ρ 50 million msg/sec on a single machine. Small memory footprint; ~2.5 million actors per GB of heap, ΡΡΠΎ ΠΏΡΡΠΌΠΎ ΡΠ°ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΡΠ΅ΠΉ-tutorial'ΠΎΠ² (ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΡΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ):
ΠΠ΅ΠΏΠ»ΠΎΡ ΠΎΠ΅ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ + ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ.
Actor-Model System with Akka.
Working with Akka.NET and Akka.Cluster
First steps, Calling actors from another actor ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ A.BrandΓ£o Lustosa
Proto.Actor - Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ (ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Orleans ΠΈΠ»ΠΈ Akka), Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ Π»ΠΈΠ±ΠΎ ΡΠ΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΡΠΈΠΌΠ΅ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Ρ Π²Π°ΡΠΈΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ°ΠΌ ΡΡΡΠΊ 30, Π½Π° Π»ΡΠ±ΠΎΠΉ Π²ΠΊΡΡ. Π’ΠΎΠΆΠ΅ ΡΠΌΠ΅Π΅Ρ persistence ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ Π² ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ΅ΡΡΠ° ΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΡΠ±Π΅ΡΠ° ΠΈΠ»ΠΈ Consul.
#dotnet
π2
nestjs - Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ nodejs Π΄Π»Ρ Π²Π΅Π±ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΡΠ΅ΠΌ, ΠΊΡΠΎ Π·Π½Π°Π΅Ρ asp.net ΠΈ Ρ
ΠΎΡΠ΅Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ nodejs - Π² Π½ΡΠΌ ΡΡΡΡΠΊΡΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ ΡΠ΅ΠΌ-ΡΠΎ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ asp.net (ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ, ΡΠ΅ΡΠ²ΠΈΡΡ, DI, ΠΌΠΈΠ΄Π΄Π»Π²Π°ΡΠΈ).
ΠΠ°ΠΎΠ΄Π½ΠΎ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ websockets, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ mongo ΠΈ Π½Π΅ΠΌΠ½ΠΎΠΆΠ΅ΡΠΊΠΎ graphql. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ°Π·ΡΡΡΠ½ΡΠ΅Ρ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² websocket ΠΏΡΠΎΠ±ΡΠΎΡΠΈΡΡ ΠΈΠ½ΡΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ·Π΅ΡΠ΅ - ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΡΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ ΡΡΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ Π² nestjs ΠΏΠΎ Π΄Π΅ΡΠΎΠ»ΡΡ singleton, Π° request/response Π½Π°Π΄ΠΎ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ action'ΠΎΠ²). ΠΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΡΡΠΈΡ ΠΊΠ°ΡΡΠΈΠ½Ρ, ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° (Π½Ρ ΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎ nodejs :) Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎ, ΡΠΎ ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΠ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ singleton (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ scoped Π² .net), ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ² ΡΡΠΎ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ nodejs ΡΡΠΎ event loop - Π²ΡΡ Π²ΡΡΠ°ΡΡ Π½Π° ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΡΠ°. ΠΠ°ΠΆΠ΅ ΠΊΠ°ΠΊ-ΡΠΎ Π»Π΅Π³ΡΠ΅ Π½Π΅ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ :)))
ΠΠΎΠΎΠ±ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π»Ρ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΠ΅Ρ-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ MVP Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ. #js #dotnet
ΠΠ°ΠΎΠ΄Π½ΠΎ Π² Π½Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ websockets, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ mongo ΠΈ Π½Π΅ΠΌΠ½ΠΎΠΆΠ΅ΡΠΊΠΎ graphql. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ°Π·ΡΡΡΠ½ΡΠ΅Ρ ΠΊΠ°ΠΊ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² websocket ΠΏΡΠΎΠ±ΡΠΎΡΠΈΡΡ ΠΈΠ½ΡΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΡΠ·Π΅ΡΠ΅ - ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΡ.
ΠΡΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ ΡΡΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΡ Π² nestjs ΠΏΠΎ Π΄Π΅ΡΠΎΠ»ΡΡ singleton, Π° request/response Π½Π°Π΄ΠΎ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ action'ΠΎΠ²). ΠΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΡΡΠΈΡ ΠΊΠ°ΡΡΠΈΠ½Ρ, ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΠΊ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° (Π½Ρ ΠΈ ΡΠ°ΡΡΠΈΡΠ½ΠΎ nodejs :) Π ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎ, ΡΠΎ ΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΠ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ singleton (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ scoped Π² .net), ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΠ² ΡΡΠΎ ΡΠΈΠΊΠ» ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ nodejs ΡΡΠΎ event loop - Π²ΡΡ Π²ΡΡΠ°ΡΡ Π½Π° ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΡΠ°. ΠΠ°ΠΆΠ΅ ΠΊΠ°ΠΊ-ΡΠΎ Π»Π΅Π³ΡΠ΅ Π½Π΅ Π·Π°ΠΌΠΎΡΠ°ΡΠΈΠ²Π°ΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ :)))
ΠΠΎΠΎΠ±ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π΄Π»Ρ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΠ΅Ρ-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ MVP Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ. #js #dotnet
NestJS - A progressive Node.js framework
NestJS is a framework for building efficient, scalable Node.js web applications. It uses modern JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Reactive Programming).
π¨ Π ΡΠΎΡΠ΅Π΄Π½ΠΈΡ
ΡΡΡΠ°Ρ
ΠΏΠΎ Π²Π°ΠΊΠ°Π½ΡΠΈΡΠΌ Π½Π°ΡΠ°Π»Π° ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π²Π°ΠΊΠ°Π½ΡΠΈΡ Π½Π° Senior .NET developer ΠΎΡ Π½Π΅ΠΊΠΎΠ΅ΠΉ Goldor AG (ΠΏΡΠΎ ΠΊΠΎΡΠΎΡΡΡ Π³ΡΠ³Π» Π½Π΅ Π·Π½Π°Π΅Ρ ΠΠΠ§ΠΠΠ).
ΠΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ, ΠΠ ΠΠͺΠΠΠΠ’ΠΠ‘Π¬!
ΠΡΠΎ ΡΠ΅ΠΈΠ½ΠΊΠ°ΡΠ½Π°ΡΠΈΡ Cetrapay
ΠΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Ρ, ΠΠ ΠΠͺΠΠΠΠ’ΠΠ‘Π¬!
ΠΡΠΎ ΡΠ΅ΠΈΠ½ΠΊΠ°ΡΠ½Π°ΡΠΈΡ Cetrapay
Π₯Π°Π±Ρ
Π’ΡΠΎΠ΅ Π² Π»ΠΎΠ΄ΠΊΠ΅, Π½ΠΈΡΠ΅ΡΠ° ΠΈ ΡΠΎΠ±Π°ΠΊΠΈ ΠΈΠ· Cetrapay
ΠΠ΅ΠΉΡΡΠ²ΡΡΡΠΈΠ΅ Π»ΠΈΡΠ°: ΠΠ½Π΄ΡΠ΅ΠΉ ΠΠ΅ΡΡΠΈΠ»ΠΎΠ², ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ Π‘Π²ΠΈΡΠ΅Π²ΡΠΊΠΈΠΉ, ΠΠ°Π»Π΅Π½ΡΠΈΠ½ ΠΠ½ΠΊΠΎ ΠΡ β ΠΊΠΎΠΌΠ°Π½Π΄Π° (Π½Π΅ ΠΏΠ΅ΡΠ²Π°Ρ ΠΈ Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ) ΡΡΠ°ΡΡΠ°ΠΏΠ° CetraPay. ΠΠ ΠΠ΅ΡΠ½ΠΎΠΉ 2022 Π³ΠΎΠ΄Π° Π·Π°ΠΊΡΡΠ»ΡΡ ΠΌΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈ Ρ Π±ΡΠ»Π° Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Π° ΠΈΡΠΊΠ°ΡΡ...
ΠΠ΅ΡΡΠΌΠ° ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Kepler.gl Π΄Π»Ρ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π³Π΅ΠΎΠ΄Π°Π½Π½ΡΡ
#ui #data
kepler.gl
Large-scale WebGL-powered Geospatial Data Visualization Tool
Kepler.gl is a powerful web-based geospatial data analysis tool. Built on a high performance rendering engine and designed for large-scale data sets.
Manage your terraform like a container (en) - Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°Ρ ΡΡΠ°ΡΡΡ ΠΏΡΠΎ #terraform ΠΈ #aws Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°ΠΌΠΈ
ΠΠ°ΠΊ ΠΏΡΠΎΡΠ°ΠΉΠ»ΠΈΡΡ ΡΠΎΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ°ΡΠ½ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎ .net 6 - ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ net 5 ΡΠΎΠΆΠ΅ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠ°ΠΌΠΏΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° - ΠΎΡΠΊΡΡΠ²Π°ΡΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² Visual Studio, Π½ΠΎ ΠΈ Π² Rider ΡΠΎΠΆΠ΅. Π§ΡΠΎ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΡΠ°ΠΉΠ»ΠΈΠ½Π³Π° Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡΡ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΏΠΎΠΊΠ° ΠΈΡ
Π½Π΅ Π΄ΡΡΠ½Π΅ΡΡ. Π’ΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π° DEV ΡΡΠ΅Π΄Ρ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΡΡΠΌΠΎ Ρ Π½ΠΈΠΌΠΈ.
Π ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ°ΠΉΠ»ΠΈΠ½Π³Π° - ΡΠ°ΡΡΡ 0, ΡΠ°ΡΡΡ 1 ΠΈ ΡΠ°ΡΡΡ 2 ΡΡΠ°ΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°Π²ΡΠΎΡΠ° ΠΏΡΠΎ OpenTelemetry ΠΈ Metrics API.
#dotnet #docker #perf
Π ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΡ ΠΏΡΠΎΡΠ°ΠΉΠ»ΠΈΠ½Π³Π° - ΡΠ°ΡΡΡ 0, ΡΠ°ΡΡΡ 1 ΠΈ ΡΠ°ΡΡΡ 2 ΡΡΠ°ΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ Π°Π²ΡΠΎΡΠ° ΠΏΡΠΎ OpenTelemetry ΠΈ Metrics API.
#dotnet #docker #perf
my tech ramblings
Profiling a .NET6 app running in a linux container with dotnet-trace, dotnet-dump, dotnet-counters, dotnet-gcdump and Visual Studio
This post contains a few practical examples showing you how to profile a .NET6 application running in a linux container using the .NET CLI diagnostic tools (dotnet-trace, dotnet-dump, dotnet-counters and dotnet-gcdump) and Visual Studio.
π1
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ WebAPI endpoints Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ HttpRepl #dotnet
https://learn.microsoft.com/en-us/aspnet/core/web-api/http-repl/?view=aspnetcore-7.0&tabs=windows
https://learn.microsoft.com/en-us/aspnet/core/web-api/http-repl/?view=aspnetcore-7.0&tabs=windows
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π½ΡΡ
Π±ΠΈΡΠΎΠ²ΡΡ
ΠΏΡΠΈΡΠΌΠΎΠ² Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (Π½Π° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ)
http://graphics.stanford.edu/~seander/bithacks.html
http://graphics.stanford.edu/~seander/bithacks.html
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅Π»Ρ QR-ΠΊΠΎΠ΄ΠΎΠ² Π½Π° JS - ΡΠΌΠ΅Π΅Ρ ~15 ΡΠΈΠΏΠΎΠ² QR-ΠΊΠΎΠ΄ΠΎΠ², ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Ρ.Ρ. ΠΈ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
Π±ΡΠ°ΡΠ·Π΅ΡΠ°Ρ
#js
upd: Π΄Π»Ρ #blazor https://github.com/densen2014/ZXingBlazor
upd: Π΄Π»Ρ #blazor https://github.com/densen2014/ZXingBlazor
ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΠΉ ΡΠ°Π·Π±ΠΎΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡ ΡΠ°Π·Π½ΡΡ
ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². ΠΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°Π½ΠΈΠΉ - ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠΎ Π²ΡΡ ΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΎΠ΄Π½ΠΎ ΠΏΠΎΡΠΎΠΌ Π½Π° ΡΠΎΠ±Π΅ΡΠ΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎ :)) (Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ) #education
Youtube Design
WhatsApp
Parking Lot
Twitter
Youtube Design
Parking Lot
50-100 Π²ΠΎΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ±Π΅ΡΠΎΠ² ΠΏΠΎ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ
. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°ΡΡΠΈ Π΄Π°ΡΠΈΡΡΡΡΡΡ 201Ρ
Π³ΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΏΠΎ ΠΏΡΠΎΠ»ΠΈΡΡΡΠ²Π°Π½ΠΈΡ - Π²ΠΎΠΏΡΠΎΡΡ ΡΠ°ΠΌ ΠΏΠΎ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ (Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ) #education
Database
SQL Queries
Microsoft SQL Server
MySQL
Postgres
Oracle
Database
SQL Queries
Microsoft SQL Server
MySQL
Postgres
Oracle
π1
π₯1