Определение вариантов использования приложения

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ использования β€” это Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ бизнСс-Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π² исполняСмоС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС. Π’ 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.cs
  • CreateOrderCommandValidator.cs
  • CreateOrderCommandHandler.cs
  • CreateOrderCommandResult.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: ΠšΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ минимального ΠΎΡ‚Π²Π΅Ρ‚Π° для ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ….

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

  1. Π‘Π΅Π³Π°Ρ‚ΡŒ lino command new ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ слуТбу, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, Ρ‚ΠΈΠΏ ΠΈ свойства.
  2. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ сгСнСрированный Command ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ всС поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.
  3. Π£ΡΠΈΠ»ΡŒΡ‚Π΅ validator ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π²Ρ…ΠΎΠ΄Π° Π² бизнСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСльзя вывСсти автоматичСски.
  4. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ handler ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΌΠ΅Π½Π°, Π° Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния.
  5. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IUnitOfWork для устойчивости ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ сохранСниС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° опСрация Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ событий ΠΈΠ»ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ Outbox.
  6. ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ·-Π·Π° ошибок Result, Π° Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΈΠ· ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Ρ… бизнСс-Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ².
  7. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈ протСстируйтС ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ, страницу ΠΈΠ»ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ 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.cs
  • GetOrderByIdQueryValidator.cs
  • GetOrderByIdQueryHandler.cs
  • GetOrderByIdQueryResult.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 для элСмСнтов списка.

ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ список Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

  1. Π‘Π΅Π³Π°Ρ‚ΡŒ lino query new ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ слуТбу, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, имя Query, Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠ΄ΠΊΠ°Ρ‡ΠΊΠΈ ΠΈ свойства.
  2. ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ запроса ΠΈ сохраняйтС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для caller.
  3. Π£ΡΠΈΠ»ΡŒΡ‚Π΅ validator, особСнно для ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² Π΄Π°Ρ‚, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° страницы ΠΈ нСдопустимых ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ².
  4. НастройтС ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΡŽ handler Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для UI, API, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ процСсса.
  5. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Query read-only: Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π΄ΠΎΠΌΠ΅Π½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ состояниС, ΠΈ Π½Π΅ сохраняйтС измСнСния Π² handler.
  6. РаспространяйтС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ сбои ΠΏΠΎ Result, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ стандартизированныС ошибки, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
  7. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΈ протСстируйтС потрСбитСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ 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 ΠΈΠ»ΠΈ страницу, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ всС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сборки ΠΈ тСстов. Π­Ρ‚ΠΎ позволяСт ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ контроля.

По ΠΌΠ΅Ρ€Π΅ роста ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° фокусируйтС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования Π½Π° бизнСс-Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΈ, ΡΠΎΠ±Π»ΡŽΠ΄Π°ΠΉΡ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ сСрвисов ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ события, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ‚Π΅Π½Π΅Π²Ρ‹Π΅ сущности, ΠΊΠΎΠ³Π΄Π° Π² процСссС Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Произошла необработанная ошибка. Обновить πŸ—™