Khachatryan-dev

Command Query Separation (CQS)

Command Query Separation (CQS) սկզբունքը

Aram
Khachatryan

CQS-ի հիմնական գաղափարները


CQS-ն բաժանում է մեթոդները երկու տեսակի՝


  1. Queries (հարցումներ) – ստանում են տվյալներ, բայց չեն փոխում օբյեկտի վիճակը։
  2. Commands (պատվերներ) – փոխում են օբյեկտի վիճակը, բայց ոչինչ չեն վերադարձնում։

Վատ օրինակ (CQS-ի խախտում)


    class User {
      private balance: number = 100;
    
      getBalanceAndDeduct(amount: number): number {
        this.balance -= amount; // Միաժամանակ փոխում է վիճակը և վերադարձնում արժեք
        return this.balance;
      }
    }

Խնդիրը. Այս մեթոդը և՛ հարցում է կատարում, և՛ փոփոխում է վիճակը, ինչը խախտում է CQS սկզբունքը։


Լավ օրինակ (CQS-ի պահպանում)


    class User {
      private balance: number = 100;
    
      getBalance(): number {
        return this.balance; //  Մաքուր հարցում, ոչինչ չի փոխում
      }
    
      deductBalance(amount: number): void {
        this.balance -= amount; //  Պատվեր, չի վերադարձնում արժեք
      }
    }

Այժմ getBalance() պարզապես վերադարձնում է արժեք, իսկ deductBalance(amount) կատարում է գործողություն՝ առանց վերադարձնելու որևէ բան։




Ինչու՞ օգտագործել CQS


  1. Կոդը դառնում է ավելի կանխատեսելի – դու միշտ գիտես, թե որ ֆունկցիաները փոխում են վիճակը և որոնք՝ ոչ։
  2. Թեստավորումը դառնում է ավելի հեշտ – հարցումները կարելի է թեստավորել առանց կողմնակի էֆեկտների։
  3. Կոդը հեշտությամբ հասկանալի է – հստակ է, թե երբ և ինչ է փոխվում։
  4. Արդյունավետություն (multi-threaded) համակարգերում – հեշտացնում է կոնֆլիկտների կառավարումը։
Buy me a coffee
  • 0
  • 5

Բացահայտիր Նոր գիտելիքներ

Մեկնաբանություններ
No data
Մեկնաբանություն չկա։ Կարող ես լինել առաջինը։
Գրել մեկնաբանություն
ՄԵկնաբանություն ավելացնելու համար պետք է մուտք գործելՄուտք