Определение вариантов использования приложения
Π‘ΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β ΡΡΠΎ ΡΠΎΡΠΊΠΈ Π²Ρ
ΠΎΠ΄Π° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅. Π Lino ΠΎΠ½ΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² Application/UseCases ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π²ΠΎΠΊΡΡΠ³ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ aggregates, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ
Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΡΡΠ°ΠΏΠ°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Lino ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΡΡΠΊΡΡΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌΡ CQRS: Commands ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Queries ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΌΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΡΠ΅Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΡΠ½ΡΠΌΠΈ ΠΈ ΠΏΡΠΎΡΡΡΠΌΠΈ Π² ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ.
Π’Π Result Pattern ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡ ΡΡΠΏΠ΅Ρ
, ΡΠ±ΠΎΠΉ, ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΠΌΠ΅ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ
Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΠΎΡΠΎΠΊΠΎΠ² handler Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Result ΠΈΠ»ΠΈ Result<T> ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΈΠ»ΠΈ no-content Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ.
CLI Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Π΄Π»Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π°Π½Π°Π»ΠΈΠ· ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ handler, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠ°Π²ΠΈΠ»Π°, Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΡΠ»ΡΠΆΠ±Ρ.
ΠΠ°ΠΆΠ½ΡΠΉ: ΠΡΠΎΠ΅ΠΊΡΡ Lino ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ CQRS ΠΈ mediator. Π‘ΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Commands ΠΈ Queries ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ICommand, IQuery, ICommandHandler, IQueryHandler ΠΈ Tolitech.Results ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
ΠΠ±Π·ΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
ΠΠ΄ΠΈΠ½ ΠΠ°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠ»Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π°, ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΠ»ΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠΌΠ΅Π½Π½ΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΠΎΡΠΎΠΊ, Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Ρ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ.
Π ΡΠ΅ΡΠ΅Π½ΠΈΡΡ , ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Lino, Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π³ΡΡΠΏΠΏΠΈΡΡΡΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ:
src/Services/<ServiceName>/<ModuleName>/Application/UseCases/<EntityName>/
βββ Commands/
β βββ <CommandName>/
βββ Queries/
βββ <QueryName>/
Π’Π°ΠΊΠ°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π΅Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊΠΎΠΌΡ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΠΊΡΠ°Π½Ρ, API, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ½ΠΎΠ²ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΡΠΎΡΠΎΠ½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.
Command ΠΈΠ»ΠΈ Query?
| Π’ΠΈΠΏ | ΠΠ°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ | ΠΡΠΈΠΌΠ΅ΡΡ | ΠΎΠ±ΡΡΠ½ΡΠΉ Resultado |
|---|---|---|---|
| Command | ΠΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ. | CreateOrder, UpdateVehicle, DeleteMaintenance, SavePermissionsByRoleId. |
Result, Result<CommandResult> ΠΈΠ»ΠΈ no-content Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ
Π°. |
| Query | Π§ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. | GetOrderById, ListCustomers, GetVehicleAvailability. |
Result<QueryResult>, ΡΠΏΠΈΡΠΎΠΊ, ΡΡΡΠ°Π½ΠΈΡΠ° ΠΈΠ»ΠΈ DTO Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. |
Π§ΡΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
- ΠΡΡΡΠΏΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ: record ΠΈΠ· command ΠΈΠ»ΠΈ query, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ: ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠΎΡΠΌΠ°Ρ Π·Π°ΠΏΡΠΎΡΠ°, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ, ΡΠΈΠ»ΡΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ handler Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊ.
- handler ΠΎΡΠΊΠ΅ΡΡΡΠΎΠ²ΠΊΠ°: Π²ΡΠ·ΠΎΠ²Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Unit of Work, ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π° ΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°.
- Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°: Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠ²Π΅ΡΠ° ΠΈΠ»ΠΈ Π±Π΅ΡΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π°Π΅Ρ caller ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΡΡΠΎ Π΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ.
Π§ΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΡΡΡΠ½ΠΎΡΡΡΡ , Value Objects, ΡΠ»ΡΠΆΠ±Π°Ρ Π΄ΠΎΠΌΠ΅Π½Π° ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Π΄ΠΎΠΌΠ΅Π½Π°.
- ΠΠ΅ΡΠ°Π»ΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π·Π° Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡΠΌΠΈ, ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌΠΈ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°ΠΌΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΉΠ»ΠΎΠ²ΡΠΌΠΈ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ.
- ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ UI, ΠΌΠ΅ΡΠΊΠΈ, ΠΌΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π₯ΠΎΡΠΎΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ΅Π½, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ°Π», ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΠΎΠ³ΠΈΠ΅ Π³ΡΠ°Π½ΠΈΡΡ: ΠΎΠ½ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ, Π½ΠΎ Π½Π΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠ΅ΡΡΠΎΠΌ, Π³Π΄Π΅ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΈΡΡΠ΅ΠΌΡ.
Commands
ΠΠ΄ΠΈΠ½ Command β Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ. Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ CreateCustomer, UpdateVehicle, DeleteMaintenance, ConfirmOrder ΠΈ SavePermissionsByRoleId. Commands ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°Π·ΡΠ²Π°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
Π Lino Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ Commands ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ record, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ command ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Commands ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ caller, Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ commands ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ no-content ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Command
- ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΡ: ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ
recordΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρget, Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΡΠΈΠΊΠΎΠ². - ΠΠΌΡ Π² ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅: ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π΄Π΅Π»ΠΎΠ²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ
CreateOrder,UpdateCustomerAddressΠΈΠ»ΠΈChangeProductPrice. - ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅: ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π±Π΅Π· ΡΡΠ°Π½ΡΠΏΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅Π»ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈΠ»ΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² Π΄Π°Π½Π½ΡΡ .
- ΠΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°: ΠΊΠ°ΠΆΠ΄ΡΠΉ Command ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡΠΈΠ΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π΄ΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ handler.
- ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ UI: Command ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΠΊΠ½ΠΎΠΏΠΊΡ, ΡΠΎΡΠΌΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
ΠΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Command
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Command, ΠΊΠΎΠ³Π΄Π° Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ, ΡΠ΄Π°Π»Π΅Π½Ρ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ, ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Ρ, ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½Ρ, ΠΎΡΠΌΠ΅Π½Π΅Π½Ρ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
- Π‘ΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΡΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ payload Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ; Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΠ»Π΅ΠΉ.
- ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π° Π½Π΅ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΅Π³ΠΎ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°Π»ΠΎ.
- ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π»ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠ»ΠΈ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΎ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ, ΡΠΎΠ±ΡΡΠΈΡ ΠΈΠ»ΠΈ ΡΠ΅Π½Π΅Π²ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅.
Command Validators
Π’Ρ Command Validators ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Command ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ Π²Π²ΠΎΠ΄Π°, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π² handler. Π Lino ΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ FluentValidation, ΠΎΠ±ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .NET, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠΉ ΠΈ ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΡΠΉ API Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ».
ΠΠ±ΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
NotEmptyΠΈNotNullΠ΄Π»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΠ»Π΅ΠΉ.InclusiveBetweenΠ΄Π»Ρ ΡΠΈΡΠ»ΠΎΠ²ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ², Π΄Π΅Π½Π΅ΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΡΠΎΡΠ΅Π½ΡΠΎΠ², ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°.MaximumLength,MinimumLengthΠΈLengthΠ΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊΠΈ.RuleForEachΠ΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊList<T>.MustΠ΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ ΠΏΡΠ°Π²ΠΈΠ», ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠΎΡΠΌΠ°Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ Π΄Π°Ρ ΠΈ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΠΏΠΎΠ»Π΅ΠΉ.
validator Π·Π°ΡΠΈΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π½ΠΈΠΉ ΠΊΡΠ°ΠΉ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ Π΄ΠΎΠΌΠ΅Π½Π°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π³ΡΠ°Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ caller, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ aggregate, ΡΡΡΠ½ΠΎΡΡΠΈ, Value Object ΠΈΠ»ΠΈ ΡΠ»ΡΠΆΠ±Π΅ Π΄ΠΎΠΌΠ΅Π½Π°.
Command Handlers
Π’Π Command Handler Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Command. ΠΠ½ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ, IUnitOfWork, Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ, Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π°, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π΄ΠΎΠΌΠ΅Π½Π° ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π¨Π°Π±Π»ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ handler
- ΠΠΎΠ»ΡΡΠ°ΠΉΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ ΠΈ Unit of Work.
- ΠΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π΄Π°Π½Π½ΡΡ , Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ.
- ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ aggregate ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
- ΠΡΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΠΌΠ΅Π½Π° Π²ΠΌΠ΅ΡΡΠΎ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π² handler.
- Π‘ΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ
IUnitOfWorkΠΈΠ»ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΠΏΠΎΡΡΠΎΡΠ½ΡΡΠ²Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. - Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ Π΄ΠΎΠΌΠ΅Π½, Outbox ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°ΡΡΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΡ.
- ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ
ResultΠΈΠ»ΠΈResult<T>ΡΡΠΏΠ΅Ρ , ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΎΡΠΊΠ°Π· ΠΈΠ»ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°.
Command Results ΠΈ Result Pattern
Π’Π Command Result Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ DTO, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ caller. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ½ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Id Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ. ΠΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ payload ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ. ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ ΠΈΠ·-Π·Π° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅.
Π’Π Result Pattern ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΠ΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΡΠΏΠ΅Ρ
ΠΈΠ»ΠΈ Π½Π΅ΡΠ΄Π°ΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΡ
ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ»ΠΈ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, handler Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΏ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Result<T> ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΡΠΈΠ±ΠΊΠΎΠΉ ΠΈ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ.
- Π ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ
Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ²ΠΈΡΡ
Value, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ DTO ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. - Π ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ°ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π² ΠΌΠ½ΠΎΠ³ΠΎΡΠ°Π·ΠΎΠ²ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
- ΠΠΎΡΠΎΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ ΠΌΠ΅ΠΆΠ΄Ρ Application, API, typed clients ΠΈ UI.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Command Ρ ΠΏΠΎΠΌΠΎΡΡΡ CLI
Lino ΡΠΏΡΠΎΡΠ°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΎΠ² Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ Command Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
lino command new
CLI ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΠΎΠΏΡΠΎΡΠΎΠ² Π² ΠΌΠ°ΡΡΠ΅ΡΠ΅:
lino command new --service <ServiceName> --module <ModuleName> --entity <EntityName> --name <CommandName> lino command new --name <CommandName> --service <ServiceName> --module <ModuleName> --entity <EntityName> lino command list --service <ServiceName> --module <ModuleName> --entity <EntityName>
-sΠΈΠ»ΠΈ--service: ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ.-mΠΈΠ»ΠΈ--module: ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°Ρ .-eΠΈΠ»ΠΈ--entity: ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Command.-n,--name,-cΠΈΠ»ΠΈ--command: ΠΈΠΌΡ Command.
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Lino ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°Π΅Ρ ΡΠ»ΡΠΆΠ±Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΠΌΡ Command, ΡΠΈΠΏ Command ΠΈ, Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°ΡΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°. Π’ΠΈΠΏΡ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ CLI: Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΡ, ΠΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΈ Π£Π΄Π°Π»ΠΈΡΡ.
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Lino ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΉΠ»Ρ ΡΠΈΠΏΠ°:
CreateOrderCommand.csCreateOrderCommandValidator.csCreateOrderCommandHandler.csCreateOrderCommandResult.cs
ΠΡΠΈΠΌΠ΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Command CreatePerson. Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
<ProjectName>/
βββ src/
βββ Services/
βββ <ServiceName>/
βββ Application/
βββ <ProjectName>.<ServiceName>.Application.csproj
βββ UseCases/
βββ People/
βββ Commands/
β βββ CreatePerson/
β βββ CreatePersonCommand.cs
β βββ CreatePersonCommandValidator.cs
β βββ CreatePersonCommandHandler.cs
β βββ CreatePersonCommandResult.cs
βββ Queries/
βββ ...
ΠΠ»Ρ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠΊΠ° Command ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ:
Application/UseCases/Vehicles/Commands/UpdateVehicle/ βββ UpdateVehicleCommand.cs βββ UpdateVehicleCommandValidator.cs βββ UpdateVehicleCommandHandler.cs βββ UpdateVehicleCommandResult.cs
ΠΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Command
- Command: Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° Ρ Π·Π°ΠΏΠΈΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Validator: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²Π²ΠΎΠ΄Π°, ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ, ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠΌ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ.
- Handler: ΠΎΡΠΊΠ΅ΡΡΡΠΎΠ²ΠΊΠ° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², Unit of Work, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ, ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π°, ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
- Result: ΠΠΎΠ½ΡΡΠ°ΠΊΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΡΡΠ΅Π±ΡΡΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
- ΠΠ΅Π³Π°ΡΡ
lino command newΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ»ΡΠΆΠ±Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ, ΡΡΡΠ½ΠΎΡΡΡ, ΡΠΈΠΏ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°. - ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Command ΠΈ ΡΠ΄Π°Π»ΠΈΡΠ΅ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Π£ΡΠΈΠ»ΡΡΠ΅ validator ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ Π²Ρ ΠΎΠ΄Π° Π² Π±ΠΈΠ·Π½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π»ΡΠ·Ρ Π²ΡΠ²Π΅ΡΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
- ΠΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ handler ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π°, Π° Π½Π΅ Π΄ΡΠ±Π»ΠΈΡΡΠ΅Ρ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
IUnitOfWorkΠ΄Π»Ρ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈΠ»ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ Outbox. - ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΎΠΊ
Result, Π° Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². - Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ, ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Command.
ΠΠΌΠΏΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΡΠΉ ΡΠΊΠ΅Π»Π΅Ρ. ΠΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠ·ΡΠΊΠ° ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠ΅ΠΉ Π² ΠΏΠΎΡΡΠΎΡΠ½ΡΡΠ²Π΅ ΠΈ Π³ΡΠ°Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ.
Queries
ΠΠ΄ΠΈΠ½ Query ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π΄ΠΎΠΌΠ΅Π½Π°. Queries ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ caller, Π±Π΅Π· Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ΅Π»ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΠ³Π΄Π° Π² ΡΡΠΎΠΌ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ GetCustomerById, ListCustomers, ListPhoneTypes, ListOrdersByDateRange ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ query ΡΠΈΠΏΠ° GetVehicleAvailability. Query Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠΉ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Query
- ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ: ΠΠ°ΠΊ ΠΈ Commands, Query Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ.
- ΠΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ: ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΠΈΡΠΊΠΎΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ
GetCustomerByIdΠΈΠ»ΠΈListOrdersByDateRange. - Π€ΠΈΠ»ΡΡΡΡ ΠΈ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΡΡΠ°Π½ΠΈΡ: ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π΄Π°ΡΡ, ΡΡΠ°ΡΡΡ, ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΠ΅ΠΊΡΡ ΠΏΠΎΠΈΡΠΊΠ°, ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ΅Π½ΠΈΡ.
- ΠΡΠΎΠ΅ΠΊΡΠΈΡ: Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ DTO ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ, ΠΈΠ·Π±Π΅Π³Π°Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΡΠ°ΡΠΊΡΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ.
- ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ²: Π½Π΅Π»ΡΠ·Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
ΠΠΎΠ³Π΄Π° ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Query
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Query, ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Query Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΡΠΊΡΠ°Π½ΠΎΠ², ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ².
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ Query Π΄Π»Ρ ΡΠ΅ΡΠΎΠΊ, ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡΠΈΡ ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ², Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ±ΠΎΡΠΎΠΌ.
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΡΡΠ°Π½ΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΠΎΠΊ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² Π΄Π°Π½Π½ΡΡ .
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠ΅ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
Query Validators
Π’Ρ Query Validators ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠΈΠ»ΡΡΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π΄Π°Ρ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Ρ FluentValidation.
ΠΠ±ΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π² Queries
GreaterThanOrEqualToΠΈLessThanOrEqualToΠ΄Π»Ρ ΡΠΈΠ»ΡΡΡΠΎΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π΄Π°ΡΡ Π½Π°ΡΠ°Π»Π° ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ.Length,MaximumLengthΠΈMinimumLengthΠ΄Π»Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΠΈΠ»ΡΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΈΠΌΡ, Π°Π΄ΡΠ΅Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΏΠΎΡΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ.InclusiveBetweenΠ΄Π»Ρ ΠΏΠ΅ΠΉΠ΄ΠΆΠΈΠ½Π³Π°, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡpageΠΈpageSize.NotEmptyΠ΄Π»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠ°Ρ .MustΠ΄Π»Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΡΠΈΠ»ΡΡΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π°ΡΠ° ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π°ΡΡ Π½Π°ΡΠ°Π»Π°.
Query Handlers
Π’Π Query Handler Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³Π½ΠΎΠ·Ρ. Π Lino ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΠΈ Ρ Select, ΡΠ²Π½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ, ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈ Π½Π΅ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ.
handler ΠΈΠ· Query Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ read-only: ΠΎΠ½ Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΠΌΠ΅Π½Π°, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. SaveChanges. ΠΡΠ»ΠΈ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΠ΄ΠΈΡ, ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΡΡΠΈΡΠ°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ.
Query Results
Π Lino ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ· Queries ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ record Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ QueryResult. ΠΡΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΎΡΠ²Π΅ΡΡ, ΠΏΡΠΎΡΡΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ, ΠΏΠΎΡΡΡΠ°Π½ΠΈΡΠ½ΠΎΠΌΡ ΡΠΏΠΈΡΠΊΡ ΠΈΠ»ΠΈ DTO, API Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π°, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ½ΠΎΠ²ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ.
ΠΠ°Π½Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Result Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ, ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠ΅ ΠΊ ΡΡΠ΅Π½ΠΈΡ. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΈΡ ΠΊΠ°ΠΊ DTOs, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, Π° Π½Π΅ ΠΊΠ°ΠΊ ΡΡΠ»ΡΠΊ Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄ΠΎΠΌΠ΅Π½Π°.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Query Ρ ΠΏΠΎΠΌΠΎΡΡΡ CLI
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ Commands, Lino ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
lino query new
CLI ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠ°ΠΊ:
lino query new --service <ServiceName> --module <ModuleName> --entity <EntityName> --name <QueryName> lino query new --name <QueryName> --service <ServiceName> --module <ModuleName> --entity <EntityName> lino query list --service <ServiceName> --module <ModuleName> --entity <EntityName>
-sΠΈΠ»ΠΈ--service: ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ.-mΠΈΠ»ΠΈ--module: ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.-eΠΈΠ»ΠΈ--entity: ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Query.-n,--name,-qΠΈΠ»ΠΈ--query: ΠΈΠΌΡ Query.
ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Lino ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΠΈ Query ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ. ΠΡΠ»ΠΈ ΠΎΡΠ²Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ, ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΎΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠΈΠ΅ΠΉ.
Lino Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ:
GetOrderByIdQuery.csGetOrderByIdQueryValidator.csGetOrderByIdQueryHandler.csGetOrderByIdQueryResult.cs
ΠΡΠΈΠΌΠ΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ Queries
<ProjectName>/
βββ src/
βββ Services/
βββ <ServiceName>/
βββ Application/
βββ <ProjectName>.<ServiceName>.Application.csproj
βββ UseCases/
βββ Orders/
βββ Commands/
| βββ ...
βββ Queries/
βββ GetOrderById/
βββ GetOrderByIdQuery.cs
βββ GetOrderByIdQueryValidator.cs
βββ GetOrderByIdQueryHandler.cs
βββ GetOrderByIdQueryResult.cs
ΠΠ»Ρ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Ρ Query ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ:
Application/UseCases/Vehicles/Queries/GetVehicleAvailability/ βββ GetVehicleAvailabilityQuery.cs βββ GetVehicleAvailabilityQueryValidator.cs βββ GetVehicleAvailabilityQueryHandler.cs βββ GetVehicleAvailabilityQueryResult.cs
ΠΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Query
- Query: Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΡΠΈΠ»ΡΡΡΠ°ΠΌΠΈ, ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ, Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌΠΈ Π΄Π°Ρ.
- Validator: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΡΡΠ°Π½ΠΈΡ, ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ Π΄Π°Ρ ΠΈ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ°.
- Handler: ΠΎΡΠΊΠ΅ΡΡΡΠΎΠ²ΠΊΠ° ΡΡΠ΅Π½ΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΡΠΎΠ΅ΠΊΡΠΈΠΉ, ΡΠΈΠ»ΡΡΡΠΎΠ², ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ, Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡ, Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΆΡΡΠ½Π°Π»ΠΎΠ², ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
- Result: ΠΎΡΠ²Π΅Ρ DTO, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎ ΠΎΠ±ΡΠ°Π·ΡΡ caller, ΡΠ°ΡΡΠΎ Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ record Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ°.
ΠΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ
- ΠΠ΅Π³Π°ΡΡ
lino query newΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ»ΡΠΆΠ±Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΈΠΌΡ Query, ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠ΅ΠΆΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ°ΡΠΊΠΈ ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°. - ΠΡΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠΈΠ»ΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ caller.
- Π£ΡΠΈΠ»ΡΡΠ΅ validator, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ², Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π΄Π°Ρ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ ΡΠΈΠ»ΡΡΡΠΎΠ².
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ handler ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ UI, API, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
- Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Query read-only: Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΠΎΠΌΠ΅Π½Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΈ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² handler.
- Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠΉΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠ΅ ΡΠ±ΠΎΠΈ ΠΏΠΎ
Result, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π³Π΄Π΅ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. - Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΡΠΉΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Query, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΎΡΠΊΡ API, ΡΡΡΠ°Π½ΠΈΡΡ Blazor, Π²Π½ΡΡΡΠΈΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ typed client.
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Query
Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ SaaS ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΡΡ
ΡΡΠ΅Π΄ΡΡΠ² Query Ρ ΠΏΠΎΠΌΠΎΡΡΡ lino query new. Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Query, Handler, Result ΠΈ Validator. ΠΠ°ΡΠ΅ΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π²Ρ
ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π°, Π΄Π°ΡΡ Π½Π°ΡΠ°Π»Π° ΠΈ Π΄Π°ΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ handler. ΠΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ: ΡΠ½Π°ΡΠ°Π»Π° ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠΉΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠΈΡΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΠΎΡΡΠΈΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ: ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ Query Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ. Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΠΉΡΠ΅ ΠΈΡ ΠΊΠ°ΠΊ DTOs, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ Π΄Π»Ρ caller, Π° Π½Π΅ ΠΊΠ°ΠΊ ΡΡΠ»ΡΠΊ Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π΄ΠΎΠΌΠ΅Π½Π°.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Lino ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π² ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Commands ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Queries ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠ΅Π½ΠΈΠ΅, validators Π·Π°ΡΠΈΡΠ°Π΅Ρ Π³ΡΠ°Π½ΠΈΡΡ Π²Π²ΠΎΠ΄Π°, handlers ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊ, Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΡΡΡ Π²ΡΠ²ΠΎΠ΄.
Π‘Π°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ: ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΌΠ΅Π½, ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Commands ΠΈ Queries, ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π·Π°Π²Π΅ΡΡΠΈΡΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· API ΠΈΠ»ΠΈ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΎΠ². ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π±Π΅Π· ΠΏΠΎΡΠ΅ΡΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ.
ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΡΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΎΠΊΡΡΠΈΡΡΠΉΡΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ-Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ, ΡΠΎΠ±Π»ΡΠ΄Π°ΠΉΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ΅Π½Π΅Π²ΡΠ΅ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ.
