Sobes.tech
Middle+

რა არის CQRS (კომანდის და სარეკლამო პასუხისმგებლობის განცალკევება)?

sobes.tech AI

პასუხი AI-სგან

CQRS (Command Query Responsibility Segregation) — դիզայնի նմուշ, որը բաժանում է տվյալների ընթերցման (queries) և գրելու (commands) գործողությունները ծրագրում:

Հիմնական սկզբունքներ:

  1. Գործողությունների բաժանում: Commands փոխում են համակարգի վիճակը, բայց չեն վերադարձնում տվյալներ (բացառությամբ, հնարավոր է, ստեղծված ռեսուրսի նույնականացնողի): Queries վերադարձնում են տվյալներ, բայց չեն փոխում վիճակը:
  2. Տարբեր տվյալների մոդելներ: Սովորաբար, օգտագործվում են օպտիմալացված տվյալների մոդելներ՝ իրենց հատուկ առաջադրանքների համար: Օրինակ, գրելու համար կարող է օգտագործվել հարաբերական տվյալների բազա, իսկ ընթերցանության համար՝ NoSQL база, որը օպտիմալացված է կոնկրետ տեսարանների համար:
  3. Commands-ի ասինխրոն կատարման: Վիճակի փոփոխությունը commands-ի կատարման հետո կարող է տեղի ունենալ ասինխրոն, հատկապես Event Sourcing-ի հետ համակցված:

Առավելություններ:

  • Մասշտաբայնություն: Օպերացիաները ընթերցման և գրելու համար կարող են անկախ կերպով մասշտաբավորվել:
  • Աշխատունակություն: Յուրաքանչյուր կողմի (query/command) համար օպտիմալացում՝ իր հատուկ առաջադրանքների համար:
  • Լայնություն: Ավելի ճկուն ճարտարապետություն բարդ ոլորտների համար:
  • Պատասխանատվության բաժանում: Հստակ բաժանում ընթերցման և գրելու տրամաբանության միջև:

Կամչիկներ:

  • Մրքկաբություն: CQRS-ի ներդրումը ավելացնում է ճարտարապետական մրքկաբություն:
  • Կոնսիստենտություն: Դրական խնդիրներ կարող են առաջանալ ընթերցման և գրելու մոդելների միջև տվյալների համահունչության հարցում (վերջնական կոնսիստենտություն):

Հայտնվելու ձևը Frontend-ում: Չնայած CQRS-ը հաճախ կիրառվում է backend-ում, այս նմուշի գիտելիքը օգտակար է հասկանալու հաճախորդ-սերվեր փոխազդեցության ճարտարապետությունը, հատկապես այն ծրագրերում, որոնք օգտագործում են Event Sourcing կամ պահանջում բարձր կատարողականություն տվյալների ընթերցման/գրելու համար: Frontend-ը կապվում է CQRS-ի հետ API-ների միջոցով, որոնք հստակ բաժանում են endpoints-ները commands (POST, PUT, DELETE) և queries (GET) համար։