ืขื™ืงืจื•ืŸ ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”. ืœื ืคืฉื•ื˜ ื›ืžื• ืฉื–ื” ื ืจืื”

ืขื™ืงืจื•ืŸ ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”. ืœื ืคืฉื•ื˜ ื›ืžื• ืฉื–ื” ื ืจืื” ืขืงืจื•ืŸ ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”, ื”ื™ื“ื•ืข ื’ื ื›ืขืงืจื•ืŸ ื”ืื—ืจื™ื•ืช ื”ื™ื—ื™ื“ื”,
ื”ืขื™ืงืจื•ืŸ ืฉืœ ืฉื•ื ื•ืช ืื—ื™ื“ื” - ื‘ื—ื•ืจ ื—ืœืงืœืง ื‘ื™ื•ืชืจ ืœื”ื‘ื ื” ื•ืฉืืœื” ื›ืœ ื›ืš ืขืฆื‘ื ื™ืช ื‘ืจืื™ื•ืŸ ืžืชื›ื ืช.

ื”ื”ื™ื›ืจื•ืช ื”ืจืฆื™ื ื™ืช ื”ืจืืฉื•ื ื” ืฉืœื™ ืขื ื”ืขื™ืงืจื•ืŸ ื”ื–ื” ื”ืชืจื—ืฉื” ื‘ืชื—ื™ืœืช ื”ืฉื ื” ื”ืจืืฉื•ื ื”, ื›ืฉื”ืฆืขื™ืจื™ื ื•ื”ื™ืจื•ืงื™ื ื ืœืงื—ื• ืœื™ืขืจ ื›ื“ื™ ืœื”ืคื•ืš ืชืœืžื™ื“ื™ื ืžื”ื–ื—ืœื™ื - ืชืœืžื™ื“ื™ื ืืžื™ืชื™ื™ื.

ื‘ื™ืขืจ ื”ืชื—ืœืงื ื• ืœืงื‘ื•ืฆื•ืช ืฉืœ 8-9 ืื ืฉื™ื ื›ืœ ืื—ืช ื•ื”ื™ืชื” ืœื ื• ืชื—ืจื•ืช - ืื™ื–ื• ืงื‘ื•ืฆื” ืชืฉืชื” ื‘ืงื‘ื•ืง ื•ื•ื“ืงื” ื”ื›ื™ ืžื”ืจ, ื‘ืชื ืื™ ืฉื”ืจืืฉื•ืŸ ืžื”ืงื‘ื•ืฆื” ืžื•ื–ื’ ื•ื•ื“ืงื” ืœื›ื•ืก, ื”ืฉื ื™ ืฉื•ืชื” ืื•ืชื”, ื•ืœืฉืœื™ืฉื™ ื™ืฉ ื—ื˜ื™ืฃ. ื”ื™ื—ื™ื“ื” ืฉืกื™ื™ืžื” ืืช ืคืขื•ืœืชื” ืขื•ื‘ืจืช ืœืกื•ืฃ ื”ืชื•ืจ ืฉืœ ื”ืงื‘ื•ืฆื”.

ื”ืžืงืจื” ืฉื‘ื• ื’ื•ื“ืœ ื”ืชื•ืจ ื”ื™ื” ื›ืคื•ืœื” ืฉืœ ืฉืœื•ืฉ ื”ื™ื” ื™ื™ืฉื•ื ื˜ื•ื‘ ืฉืœ SRP.

ื”ื’ื“ืจื” 1. ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”.

ื”ื”ื’ื“ืจื” ื”ืจืฉืžื™ืช ืฉืœ ืขืงืจื•ืŸ ื”ืื—ืจื™ื•ืช ื”ื™ื—ื™ื“ื” (SRP) ืงื•ื‘ืขืช ืฉืœื›ืœ ื™ืฉื•ืช ื™ืฉ ืื—ืจื™ื•ืช ืžืฉืœื” ื•ืกื™ื‘ื” ืœืงื™ื•ืžื•, ื•ื™ืฉ ืœื” ืื—ืจื™ื•ืช ืื—ืช ื‘ืœื‘ื“.

ืฉืงื•ืœ ืืช ื”ืื•ื‘ื™ื™ืงื˜ "ืฉืชื™ื”" (ื˜ื™ืคืœืจ).
ื›ื“ื™ ืœื™ื™ืฉื ืืช ืขืงืจื•ืŸ SRP, ื ื—ืœืง ืืช ื”ืื—ืจื™ื•ืช ืœืฉืœื•ืฉื”:

  • ืื—ื“ ืžื•ื–ื’ (PourOperation)
  • ืื—ื“ ืฉื•ืชื” (DrinkUpOperation)
  • ืœืื—ื“ ื™ืฉ ื—ื˜ื™ืฃ (TakeBiteOperation)

ื›ืœ ืื—ื“ ืžื”ืžืฉืชืชืคื™ื ื‘ืชื”ืœื™ืš ืื—ืจืื™ ืขืœ ืžืจื›ื™ื‘ ืื—ื“ ื‘ืชื”ืœื™ืš, ื›ืœื•ืžืจ ื™ืฉ ืœื• ืื—ืจื™ื•ืช ืื˜ื•ืžื™ืช ืื—ืช โ€“ ืœืฉืชื•ืช, ืœืžื–ื•ื’ ืื• ืœื ืฉื ืฉ.

ื—ื•ืจ ื”ืฉืชื™ื™ื”, ื‘ืชื•ืจื•, ื”ื•ื ื—ื–ื™ืช ืœืคืขื•ืœื•ืช ืืœื”:

ัlass Tippler {
    //...
    void Act(){
        _pourOperation.Do() // ะฝะฐะปะธั‚ัŒ
        _drinkUpOperation.Do() // ะฒั‹ะฟะธั‚ัŒ
        _takeBiteOperation.Do() // ะทะฐะบัƒัะธั‚ัŒ
    }
}

ืขื™ืงืจื•ืŸ ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”. ืœื ืคืฉื•ื˜ ื›ืžื• ืฉื–ื” ื ืจืื”

ืœืžื”?

ื”ืžืชื›ื ืช ื”ืื ื•ืฉื™ ื›ื•ืชื‘ ืงื•ื“ ืœืงื•ืฃ-ืื“ื, ื•ื”ืงื•ืฃ-ืื“ื ืœื ืงืฉื•ื‘, ื˜ื™ืคืฉ ื•ืชืžื™ื“ ืžืžื”ืจ. ื”ื•ื ื™ื›ื•ืœ ืœื”ื—ื–ื™ืง ื•ืœื”ื‘ื™ืŸ ื‘ืขืจืš 3 - 7 ืžื•ื ื—ื™ื ื‘ื‘ืช ืื—ืช.
ื‘ืžืงืจื” ืฉืœ ืฉื™ื›ื•ืจ, ื™ืฉื ื ืฉืœื•ืฉื” ืžื”ืžื•ื ื—ื™ื ื”ืœืœื•. ืขื ื–ืืช, ืื ื ื›ืชื•ื‘ ืืช ื”ืงื•ื“ ืขื ื’ื™ืœื™ื•ืŸ ืื—ื“, ืื– ื”ื•ื ื™ื›ื™ืœ ื™ื“ื™ื™ื, ืžืฉืงืคื™ื™ื, ืžืจื™ื‘ื•ืช ื•ืื™ื ืกื•ืคื™ื•ืช ืฉืœ ื•ื™ื›ื•ื—ื™ื ืขืœ ืคื•ืœื™ื˜ื™ืงื”. ื•ื›ืœ ื–ื” ื™ื”ื™ื” ื‘ื’ื•ืคื” ืฉืœ ืฉื™ื˜ื” ืื—ืช. ืื ื™ ื‘ื˜ื•ื— ืฉืจืื™ืช ืงื•ื“ ื›ื–ื” ื‘ืื™ืžื•ืŸ ืฉืœืš. ืœื ื”ืžื‘ื—ืŸ ื”ื›ื™ ืื ื•ืฉื™ ืœื ืคืฉ.

ืžืฆื“ ืฉื ื™, ืื™ืฉ ื”ืงื•ืฃ ื ื•ืขื“ ืœื“ืžื•ืช ืื•ื‘ื™ื™ืงื˜ื™ื ืžื”ืขื•ืœื ื”ืืžื™ืชื™ ื‘ืจืืฉื•. ื‘ื“ืžื™ื•ื ื• ื”ื•ื ื™ื›ื•ืœ ืœื“ื—ื•ืฃ ืื•ืชื ื–ื” ืœื–ื”, ืœื”ืจื›ื™ื‘ ืžื”ื ื—ืคืฆื™ื ื—ื“ืฉื™ื ื•ืœืคืจืง ืื•ืชื ื‘ืื•ืชื• ืื•ืคืŸ. ื“ืžื™ื™ื ื• ืœืขืฆืžื›ื ืžื›ื•ื ื™ืช ืžื“ื’ื ื™ืฉืŸ. ื‘ื“ืžื™ื•ื ื›ื ืชื•ื›ืœื• ืœืคืชื•ื— ืืช ื”ื“ืœืช, ืœืคืจืง ืืช ืขื™ืคื•ืŸ ื”ื“ืœืช ื•ืœืจืื•ืช ืฉื ืืช ืžื ื’ื ื•ื ื™ ื”ืจืžืช ื”ื—ืœื•ื ื•ืช ืฉื‘ืชื•ื›ื ื™ื”ื™ื• ื’ืœื’ืœื™ ืฉื™ื ื™ื™ื. ืื‘ืœ ืืชื” ืœื ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื›ืœ ืจื›ื™ื‘ื™ ื”ืžื›ื•ื ื” ื‘ื•-ื–ืžื ื™ืช, ื‘"ืจืฉื™ืžื”" ืื—ืช. ืœืคื—ื•ืช "ืื™ืฉ ื”ืงื•ืคื™ื" ืœื ื™ื›ื•ืœ.

ืœื›ืŸ, ืžืชื›ื ืชื™ื ืื ื•ืฉื™ื™ื ืžืคืจืงื™ื ืžื ื’ื ื•ื ื™ื ืžื•ืจื›ื‘ื™ื ืœืงื‘ื•ืฆื” ืฉืœ ืืœืžื ื˜ื™ื ืคื—ื•ืช ืžื•ืจื›ื‘ื™ื ื•ืขื•ื‘ื“ื™ื. ืขื ื–ืืช, ื ื™ืชืŸ ืœืคืจืง ืื•ืชื• ื‘ื“ืจื›ื™ื ืฉื•ื ื•ืช: ื‘ืžื›ื•ื ื™ื•ืช ื™ืฉื ื•ืช ืจื‘ื•ืช ืฆื™ื ื•ืจ ื”ืื•ื•ื™ืจ ื ื›ื ืก ืœื“ืœืช, ื•ื‘ืžื›ื•ื ื™ื•ืช ืžื•ื“ืจื ื™ื•ืช ื›ืฉืœ ื‘ืืœืงื˜ืจื•ื ื™ืงื” ืฉืœ ื”ืžื ืขื•ืœ ืžื•ื ืข ืืช ื”ืชื ืขืช ื”ืžื ื•ืข, ืžื” ืฉื™ื›ื•ืœ ืœื”ื•ื•ืช ื‘ืขื™ื” ื‘ืžื”ืœืš ืชื™ืงื•ื ื™ื.

ืขื›ืฉื™ื•, SRP ื”ื•ื ืขื™ืงืจื•ืŸ ืฉืžืกื‘ื™ืจ ื›ื™ืฆื“ ืœืคืจืง, ื›ืœื•ืžืจ ื”ื™ื›ืŸ ืœืžืชื•ื— ืืช ื”ืงื• ื”ืžืคืจื™ื“.

ืœื“ื‘ืจื™ื•, ื™ืฉ ืฆื•ืจืš ืœืคืจืง ืœืคื™ ืขืงืจื•ืŸ ื—ืœื•ืงืช ื”"ืื—ืจื™ื•ืช", ื›ืœื•ืžืจ ืœืคื™ ืžืฉื™ืžื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืžืกื•ื™ืžื™ื.

ืขื™ืงืจื•ืŸ ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”. ืœื ืคืฉื•ื˜ ื›ืžื• ืฉื–ื” ื ืจืื”

ื ื—ื–ื•ืจ ืœืฉืชื™ื™ื” ื•ืœื™ืชืจื•ื ื•ืช ืฉืžืงื‘ืœ ืื™ืฉ ื”ืงื•ืคื™ื ื‘ืžื”ืœืš ื”ืคื™ืจื•ืง:

  • ื”ืงื•ื“ ื”ืคืš ืœื”ื™ื•ืช ื‘ืจื•ืจ ื‘ื™ื•ืชืจ ื‘ื›ืœ ืจืžื”
  • ื”ืงื•ื“ ื™ื›ื•ืœ ืœื”ื™ื›ืชื‘ ืขืœ ื™ื“ื™ ืžืกืคืจ ืžืชื›ื ืชื™ื ื‘ื• ื–ืžื ื™ืช (ื›ืœ ืื—ื“ ื›ื•ืชื‘ ืืœืžื ื˜ ื ืคืจื“)
  • ื‘ื“ื™ืงื” ืื•ื˜ื•ืžื˜ื™ืช ืคืฉื•ื˜ื” ื™ื•ืชืจ - ื›ื›ืœ ืฉื”ืืœืžื ื˜ ืคืฉื•ื˜ ื™ื•ืชืจ, ื›ืš ืงืœ ื™ื•ืชืจ ืœื‘ื“ื•ืง ืื•ืชื•
  • ื”ืงื•ืžืคื•ื–ื™ืฆื™ื” ืฉืœ ื”ืงื•ื“ ืžื•ืคื™ืขื” - ื ื™ืชืŸ ืœื”ื—ืœื™ืฃ DrinkUpOperation ืœื ื™ืชื•ื— ื‘ื• ืฉื™ื›ื•ืจ ืฉื•ืคืš ื ื•ื–ืœ ืžืชื—ืช ืœืฉื•ืœื—ืŸ. ืื• ืœื”ื—ืœื™ืฃ ืืช ืคืขื•ืœืช ื”ืžื–ื™ื’ื” ื‘ืคืขื•ืœื” ืฉื‘ื” ืžืขืจื‘ื‘ื™ื ื™ื™ืŸ ื•ืžื™ื ืื• ื•ื•ื“ืงื” ื•ื‘ื™ืจื”. ื‘ื”ืชืื ืœื“ืจื™ืฉื•ืช ื”ืขืกืงื™ื•ืช, ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื”ื›ืœ ืžื‘ืœื™ ืœื’ืขืช ื‘ืงื•ื“ ื”ืฉื™ื˜ื” Tippler.Act.
  • ืžืคืขื•ืœื•ืช ืืœื• ื ื™ืชืŸ ืœืงืคืœ ืืช ื”ื’ืจื’ืจืŸ (ื‘ืืžืฆืขื•ืช ืจืง TakeBitOperation), ืืœื›ื•ื”ื•ืœื™ (ื‘ืฉื™ืžื•ืฉ ื‘ืœื‘ื“ DrinkUpOperation ื™ืฉืจ ืžื”ื‘ืงื‘ื•ืง) ื•ืขื•ืžื“ื™ื ื‘ื“ืจื™ืฉื•ืช ืขืกืงื™ื•ืช ืจื‘ื•ืช ืื—ืจื•ืช.

(ื”ื•, ื ืจืื” ืฉื–ื” ื›ื‘ืจ ืขื™ืงืจื•ืŸ OCP, ื•ื”ืคืจืชื™ ืืช ื”ืื—ืจื™ื•ืช ืฉืœ ื”ืคื•ืกื˜ ื”ื–ื”)

ื•ื›ืžื•ื‘ืŸ, ื”ื—ืกืจื•ื ื•ืช:

  • ื ืฆื˜ืจืš ืœื™ืฆื•ืจ ืขื•ื“ ืกื•ื’ื™ื.
  • ืฉื™ื›ื•ืจ ืฉื•ืชื” ื‘ืคืขื ื”ืจืืฉื•ื ื” ื›ืžื” ืฉืขื•ืช ืžืื•ื—ืจ ื™ื•ืชืจ ืžืžื” ืฉืื ืœื ื›ืŸ.

ื”ื’ื“ืจื” 2. ืฉื•ื ื•ืช ืžืื•ื—ื“ืช.

ื”ืจืฉื• ืœื™, ืจื‘ื•ืชื™! ื’ื ืœืฉื™ืขื•ืจ ื”ืฉืชื™ื™ื” ื™ืฉ ืื—ืจื™ื•ืช ืื—ืช - ื”ื•ื ืฉื•ืชื”! ื•ื‘ื›ืœืœ, ื”ืžื™ืœื” "ืื—ืจื™ื•ืช" ื”ื™ื ืžื•ืฉื’ ืžืขื•ืจืคืœ ื‘ื™ื•ืชืจ. ืžื™ืฉื”ื• ืื—ืจืื™ ืœื’ื•ืจืœ ื”ืื ื•ืฉื•ืช, ื•ืžื™ืฉื”ื• ืื—ืจืื™ ืœื’ื™ื“ื•ืœ ื”ืคื™ื ื’ื•ื•ื™ื ื™ื ืฉื”ืชื”ืคื›ื• ื‘ืงื•ื˜ื‘.

ื”ื‘ื” ื ืฉืงื•ืœ ืฉื ื™ ื™ื™ืฉื•ืžื™ื ืฉืœ ื”ืžืฉืงื”. ื”ืจืืฉื•ืŸ, ืฉื”ื•ื–ื›ืจ ืœืขื™ืœ, ืžื›ื™ืœ ืฉืœื•ืฉ ื›ื™ืชื•ืช - ืœืžื–ื•ื’, ืœืฉืชื•ืช ื•ืœื ืฉื ืฉ.

ื”ืฉื ื™ ื ื›ืชื‘ ื‘ืืžืฆืขื•ืช ืžืชื•ื“ื•ืœื•ื’ื™ื™ืช "ืงื“ื™ืžื” ื•ืจืง ืงื“ื™ืžื”" ื•ืžื›ื™ืœ ืืช ื›ืœ ื”ื”ื™ื’ื™ื•ืŸ ื‘ืฉื™ื˜ื” ืœืคืขื•ืœ:

//ะะต ั‚ั€ะฐั‚ัŒั‚ะต ะฒั€ะตะผั  ะฝะฐ ะธะทัƒั‡ะตะฝะธะต ัั‚ะพะณะพ ะบะปะฐััะฐ. ะ›ัƒั‡ัˆะต ััŠะตัˆัŒั‚ะต ะฟะตั‡ะตะฝัŒะบัƒ
ัlass BrutTippler {
   //...
   void Act(){
        // ะฝะฐะปะธะฒะฐะตะผ
    if(!_hand.TryDischarge(from:_bottle, to:_glass, size:_glass.Capacity))
        throw new OverdrunkException();

    // ะฒั‹ะฟะธะฒะฐะตะผ
    if(!_hand.TryDrink(from: _glass,  size: _glass.Capacity))
        throw new OverdrunkException();

    //ะ—ะฐะบัƒัั‹ะฒะฐะตะผ
    for(int i = 0; i< 3; i++){
        var food = _foodStore.TakeOrDefault();
        if(food==null)
            throw new FoodIsOverException();

        _hand.TryEat(food);
    }
   }
}

ืฉื ื™ ื”ืฉื™ืขื•ืจื™ื ื”ืœืœื•, ืžื ืงื•ื“ืช ืžื‘ื˜ื• ืฉืœ ืžืชื‘ื•ื ืŸ ืžื‘ื—ื•ืฅ, ื ืจืื™ื ื‘ื“ื™ื•ืง ืื•ืชื• ื”ื“ื‘ืจ ื•ื—ื•ืœืงื™ื ืืช ืื•ืชื” ืื—ืจื™ื•ืช ืฉืœ "ืฉืชื™ื”".

ื‘ึผึดืœื‘ึผื•ึผืœ!

ืœืื—ืจ ืžื›ืŸ ื ืขื‘ื•ืจ ืœืื™ื ื˜ืจื ื˜ ื•ื ื’ืœื” ื”ื’ื“ืจื” ื ื•ืกืคืช ืฉืœ SRP - ืขืงืจื•ืŸ ื”ืฉื™ื ื•ื™ ื”ื‘ื•ื“ื“.

SCP ืงื•ื‘ืข ื›ื™ "ืœืžื•ื“ื•ืœ ื™ืฉ ืกื™ื‘ื” ืื—ืช ื•ื™ื—ื™ื“ื” ืœืฉื ื•ืช". ื›ืœื•ืžืจ, "ืื—ืจื™ื•ืช ื”ื™ื ืกื™ื‘ื” ืœืฉื™ื ื•ื™".

(ื ืจืื” ืฉื”ื—ื‘ืจ'ื” ืฉื”ืขืœื• ืืช ื”ื”ื’ื“ืจื” ื”ืžืงื•ืจื™ืช ื”ื™ื• ื‘ื˜ื•ื—ื™ื ื‘ื™ื›ื•ืœื•ืช ื”ื˜ืœืคืชื™ื•ืช ืฉืœ ืื™ืฉ ื”ืงื•ืฃ)

ืขื›ืฉื™ื• ื”ื›ืœ ื ื›ื ืก ืœืžืงื•ืžื•. ื‘ื ืคืจื“ ื ื•ื›ืœ ืœืฉื ื•ืช ืืช ื ื”ืœื™ ื”ืžื–ื™ื’ื”, ื”ืฉืชื™ื™ื” ื•ื”ื ืฉื ื•ืฉ, ืืš ื‘ืฉืชื™ื™ืŸ ืขืฆืžื• ื ื•ื›ืœ ืœืฉื ื•ืช ืจืง ืืช ืจืฆืฃ ื•ื”ืจื›ื‘ ื”ืคืขื•ืœื•ืช, ืœืžืฉืœ ืขืœ ื™ื“ื™ ื”ื–ื–ืช ื”ื—ื˜ื™ืฃ ืœืคื ื™ ื”ืฉืชื™ื™ื” ืื• ื”ื•ืกืคืช ืงืจื™ืืช ื˜ื•ืกื˜.

ื‘ื’ื™ืฉืช "ืงื“ื™ืžื” ื•ืจืง ืงื“ื™ืžื”", ื›ืœ ืžื” ืฉื ื™ืชืŸ ืœืฉื ื•ืช ืžืฉืชื ื” ืจืง ื‘ืฉื™ื˜ื” ืœืคืขื•ืœ. ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืงืจื™ื ื•ื™ืขื™ืœ ื›ืฉื™ืฉ ืžืขื˜ ื”ื™ื’ื™ื•ืŸ ื•ื–ื” ืžืฉืชื ื” ืœืขืชื™ื ืจื—ื•ืงื•ืช, ืื‘ืœ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื–ื” ืžืกืชื™ื™ื ื‘ืฉื™ื˜ื•ืช ื ื•ืจืื™ื•ืช ืฉืœ 500 ืงื•ื•ื™ื ื›ืœ ืื—ื“, ืขื ื™ื•ืชืจ ื”ืฆื”ืจื•ืช ืื ืžืžื” ืฉื ื“ืจืฉ ื›ื“ื™ ืฉืจื•ืกื™ื” ืชืฆื˜ืจืฃ ืœื ืื˜"ื•.

ื”ื’ื“ืจื” 3. ืœื•ืงืœื™ื–ืฆื™ื” ืฉืœ ืฉื™ื ื•ื™ื™ื.

ืฉืชื™ื™ื ื™ื ืœืจื•ื‘ ืœื ืžื‘ื™ื ื™ื ืœืžื” ื”ื ื”ืชืขื•ืจืจื• ื‘ื“ื™ืจื” ืฉืœ ืžื™ืฉื”ื• ืื—ืจ, ืื• ืื™ืคื” ื”ื˜ืœืคื•ืŸ ื”ื ื™ื™ื“ ืฉืœื”ื. ื–ื” ื”ื–ืžืŸ ืœื”ื•ืกื™ืฃ ืจื™ืฉื•ื ืžืคื•ืจื˜.

ื‘ื•ืื• ื ืชื—ื™ืœ ื‘ืจื™ืฉื•ื ื‘ืชื”ืœื™ืš ื”ืžื–ื™ื’ื”:

class PourOperation: IOperation{
    PourOperation(ILogger log /*....*/){/*...*/}
    //...
    void Do(){
        _log.Log($"Before pour with {_hand} and {_bottle}");
        //Pour business logic ...
        _log.Log($"After pour with {_hand} and {_bottle}");
    }
}

ืขืœ ื™ื“ื™ ืขื˜ื™ืจืชื• ืคื ื™ืžื” PourOperation, ืคืขืœื ื• ื‘ื—ื•ื›ืžื” ืžื ืงื•ื“ืช ื”ืžื‘ื˜ ืฉืœ ืื—ืจื™ื•ืช ื•ืžืงืคืกื•ืœืฆื™ื”, ืื‘ืœ ืขื›ืฉื™ื• ืื ื—ื ื• ืžื‘ื•ืœื‘ืœื™ื ืขื ืขืงืจื•ืŸ ื”ืฉื•ื ื•ืช. ื‘ื ื•ืกืฃ ืœืคืขื•ืœื” ืขืฆืžื”, ืฉื™ื›ื•ืœื” ืœื”ืฉืชื ื•ืช, ื’ื ื”ืจื™ืฉื•ื ืขืฆืžื• ื”ื•ืคืš ืœืฉื™ื ื•ื™. ืชืฆื˜ืจืš ืœื”ืคืจื™ื“ ื•ืœื™ืฆื•ืจ ืœื•ื’ืจ ืžื™ื•ื—ื“ ืขื‘ื•ืจ ืคืขื•ืœืช ื”ืžื–ื™ื’ื”:

interface IPourLogger{
    void LogBefore(IHand, IBottle){}
    void LogAfter(IHand, IBottle){}
    void OnError(IHand, IBottle, Exception){}
}

class PourOperation: IOperation{
    PourOperation(IPourLogger log /*....*/){/*...*/}
    //...
    void Do(){
        _log.LogBefore(_hand, _bottle);
        try{
             //... business logic
             _log.LogAfter(_hand, _bottle");
        }
        catch(exception e){
            _log.OnError(_hand, _bottle, e)
        }
    }
}

ื”ืงื•ืจื ื”ืžื•ืงืคื“ ื™ืฉื™ื ืœื‘ ืœื›ืš LogAfter, LogBefore ะธ OnError ื ื™ืชืŸ ื’ื ืœืฉื ื•ืช ื‘ื ืคืจื“, ื•ื‘ืื ืœื•ื’ื™ื” ืœืฉืœื‘ื™ื ื”ืงื•ื“ืžื™ื, ืชื™ืฆื•ืจ ืฉืœื•ืฉ ืžื—ืœืงื•ืช: PourLoggerBefore, PourLoggerAfter ะธ PourErrorLogger.

ื•ืœื–ื›ื•ืจ ืฉื™ืฉ ืฉืœื•ืฉ ืคืขื•ืœื•ืช ืœืฉืชื™ื™ืŸ, ืื ื—ื ื• ืžืงื‘ืœื™ื ืชืฉืขื” ืฉื™ืขื•ืจื™ ืขืฆื™ื. ื›ืชื•ืฆืื” ืžื›ืš, ื›ืœ ืžืขื’ืœ ื”ืฉืชื™ื™ื” ืžื•ืจื›ื‘ ืž-14 (!!!) ืฉื™ืขื•ืจื™ื.

ื”ึดื™ืคึผึตืจื‘ึผื•ึนืœึธื”? ื‘ึผึฐืงื•ึนืฉืึดื™! ืื™ืฉ ืงื•ืฃ ืขื ืจื™ืžื•ืŸ ืคื™ืจื•ืง ื™ืคืฆืœ ืืช ื”"ืžื–ื™ื’ื”" ืœืงื ืงืŸ, ื›ื•ืก, ืžืคืขื™ืœื™ ืžื–ื™ื’ื”, ืฉื™ืจื•ืช ืืกืคืงืช ืžื™ื, ืžื•ื“ืœ ืคื™ื–ื™ ืฉืœ ื”ืชื ื’ืฉื•ืช ืžื•ืœืงื•ืœื•ืช, ื•ื‘ืจื‘ืขื•ืŸ ื”ื‘ื ื™ื ืกื” ืœื”ืชื™ืจ ืืช ื”ืชืœื•ืช ื‘ืœื™ ืžืฉืชื ื™ื ื’ืœื•ื‘ืœื™ื™ื. ื•ืชืืžื™ืŸ ืœื™, ื”ื•ื ืœื ื™ืคืกื™ืง.

ื‘ื ืงื•ื“ื” ื–ื• ืจื‘ื™ื ืžื’ื™ืขื™ื ืœืžืกืงื ื” ืฉ-SRP ื”ื ืื’ื“ื•ืช ืžืžืžืœื›ื•ืช ื•ืจื•ื“ื•ืช, ื•ื”ื•ืœื›ื™ื ืœืฉื—ืง ื ื•ื“ืœืก...

... ืžื‘ืœื™ ืœืœืžื•ื“ ืื™ ืคืขื ืขืœ ืงื™ื•ืžื” ืฉืœ ื”ื’ื“ืจื” ืฉืœื™ืฉื™ืช ืฉืœ Srp:

"ืขืงืจื•ืŸ ื”ืื—ืจื™ื•ืช ื”ื™ื—ื™ื“ื” ืงื•ื‘ืข ื–ืืช ื“ื‘ืจื™ื ืฉื“ื•ืžื™ื ืœืฉื™ื ื•ื™ ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ืžืื•ื—ืกื ื™ื ื‘ืžืงื•ื ืื—ื“". ืื• "ืืช ื”ืฉื™ื ื•ื™ื™ื ื‘ื™ื—ื“ ื™ืฉ ืœืฉืžื•ืจ ื‘ืžืงื•ื ืื—ื“"

ื›ืœื•ืžืจ, ืื ื ืฉื ื” ืจื™ืฉื•ื ืฉืœ ืคืขื•ืœื”, ืื– ืขืœื™ื ื• ืœืฉื ื•ืช ืื•ืชื” ื‘ืžืงื•ื ืื—ื“.

ื–ื• ื ืงื•ื“ื” ืžืื•ื“ ื—ืฉื•ื‘ื” - ืฉื›ืŸ ื›ืœ ื”ื”ืกื‘ืจื™ื ืฉืœ SRP ืฉื”ื™ื• ืœืขื™ืœ ืืžืจื• ืฉืฆืจื™ืš ืœืจืกืง ืืช ื”ืกื•ื’ื™ื ื‘ื–ืžืŸ ืจื™ืกื•ืงื, ื›ืœื•ืžืจ ื”ื˜ื™ืœื• "ื’ื‘ื•ืœ ืขืœื™ื•ืŸ" ืœื’ื•ื“ืœ ื”ื—ืคืฅ, ื•ืขื›ืฉื™ื• ืื ื—ื ื• ื›ื‘ืจ ืžื“ื‘ืจื™ื ืขืœ "ื’ื‘ื•ืœ ืชื—ืชื•ืŸ". ื‘ืžื™ืœื™ื ืื—ืจื•ืช, SRP ืœื ืจืง ื“ื•ืจืฉ "ืจื™ืกื•ืง ืชื•ืš ื›ื“ื™ ืจื™ืกื•ืง", ืืœื ื’ื ืœื ืœื”ื’ื–ื™ื - "ืืœ ืชืžืขื•ืš ื“ื‘ืจื™ื ืฉืœื•ื‘ื™ื". ื–ื”ื• ื”ืงืจื‘ ื”ื’ื“ื•ืœ ื‘ื™ืŸ ื”ืชืขืจ ืฉืœ ืื•ืงืื ืœืื™ืฉ ื”ืงื•ืฃ!

ืขื™ืงืจื•ืŸ ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”. ืœื ืคืฉื•ื˜ ื›ืžื• ืฉื–ื” ื ืจืื”

ื›ืขืช ื”ืฉื•ืชื” ืืžื•ืจ ืœื”ืจื’ื™ืฉ ื˜ื•ื‘ ื™ื•ืชืจ. ื‘ื ื•ืกืฃ ืœืขื•ื‘ื“ื” ืฉืื™ืŸ ืฆื•ืจืš ืœืคืฆืœ ืืช ืœื•ื’ืจ IPourLogger ืœืฉืœื•ืฉ ืžื—ืœืงื•ืช, ืื ื• ื™ื›ื•ืœื™ื ื’ื ืœืฉืœื‘ ืืช ื›ืœ ื”ืœื•ื’ื™ื ืœืกื•ื’ ืื—ื“:

class OperationLogger{
    public OperationLogger(string operationName){/*..*/}
    public void LogBefore(object[] args){/*...*/}       
    public void LogAfter(object[] args){/*..*/}
    public void LogError(object[] args, exception e){/*..*/}
}

ื•ืื ื ื•ืกื™ืฃ ืกื•ื’ ืจื‘ื™ืขื™ ืฉืœ ืคืขื•ืœื”, ื”ืจื™ืฉื•ื ืขื‘ื•ืจื• ื›ื‘ืจ ืžื•ื›ืŸ. ื•ื”ืงื•ื“ ืฉืœ ื”ืคืขื•ืœื•ืช ืขืฆืžืŸ ื ืงื™ ื•ืœืœื ืจืขืฉื™ ืชืฉืชื™ืช.

ื›ืชื•ืฆืื” ืžื›ืš, ื™ืฉ ืœื ื• 5 ืฉื™ืขื•ืจื™ื ืœืคืชืจื•ืŸ ื‘ืขื™ื™ืช ื”ืฉืชื™ื™ื”:

  • ืคืขื•ืœืช ืžื–ื™ื’ื”
  • ืคืขื•ืœืช ืฉืชื™ื™ื”
  • ืคืขื•ืœืช ื—ืกื™ืžื”
  • ื›ึผื•ึนืจึตืช ืขึตืฆึดื™ื
  • ื—ื–ื™ืช ืฉืชื™ื™ืŸ

ื›ืœ ืื—ื“ ืžื”ื ืื—ืจืื™ ืืš ื•ืจืง ืœืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืื—ืช ื•ื™ืฉ ืœื• ืกื™ื‘ื” ืื—ืช ืœืฉื™ื ื•ื™. ื›ืœ ื”ื›ืœืœื™ื ื”ื“ื•ืžื™ื ืœืฉื™ื ื•ื™ ื ืžืฆืื™ื ื‘ืงืจื‘ืช ืžืงื•ื.

ื“ื•ื’ืžื” ืœื—ื™ื™ื ื”ืืžื™ืชื™ื™ื

ืคืขื ื›ืชื‘ื ื• ืฉื™ืจื•ืช ืœืจื™ืฉื•ื ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืœืงื•ื— b2b. ื•ืฉื™ื˜ืช ืืœื•ื”ื™ื ื”ื•ืคื™ืขื” ืขื‘ื•ืจ 200 ืฉื•ืจื•ืช ืฉืœ ืชื•ื›ืŸ ื“ื•ืžื”:

  • ืขื‘ื•ืจ ืืœ 1C ื•ืฆื•ืจ ื—ืฉื‘ื•ืŸ
  • ืขื ื—ืฉื‘ื•ืŸ ื–ื”, ืขื‘ื•ืจ ืœืžื•ื“ื•ืœ ื”ืชืฉืœื•ื ื•ืฆื•ืจ ืื•ืชื• ืฉื
  • ื‘ื“ืงื• ืฉืœื ื ื•ืฆืจ ื—ืฉื‘ื•ืŸ ืขื ื—ืฉื‘ื•ืŸ ื›ื–ื” ื‘ืฉืจืช ื”ืจืืฉื™
  • ืฆื•ืจ ื—ืฉื‘ื•ืŸ ื—ื“ืฉ
  • ื”ื•ืกืฃ ืืช ืชื•ืฆืื•ืช ื”ืจื™ืฉื•ื ื‘ืžื•ื“ื•ืœ ื”ืชืฉืœื•ื ื•ืืช ื”ืžืกืคืจ 1c ืœืฉื™ืจื•ืช ืชื•ืฆืื•ืช ื”ืจื™ืฉื•ื
  • ื”ื•ืกืฃ ืคืจื˜ื™ ื—ืฉื‘ื•ืŸ ืœื˜ื‘ืœื” ื–ื•
  • ืฆื•ืจ ืžืกืคืจ ื ืงื•ื“ื” ืขื‘ื•ืจ ืœืงื•ื— ื–ื” ื‘ืฉื™ืจื•ืช ื”ื ืงื•ื“ื•ืช. ื”ืขื‘ืจ ืืช ืžืกืคืจ ื—ืฉื‘ื•ืŸ 1c ืฉืœืš ืœืฉื™ืจื•ืช ื–ื”.

ื•ื”ื™ื• ืขื•ื“ ื›-10 ืคืขื•ืœื•ืช ืขืกืงื™ื•ืช ื‘ืจืฉื™ืžื” ื”ื–ื• ืขื ืงื™ืฉื•ืจื™ื•ืช ื ื•ืจืื™ืช. ื›ืžืขื˜ ื›ื•ืœื ื”ื™ื• ืฆืจื™ื›ื™ื ืืช ืื•ื‘ื™ื™ืงื˜ ื”ื—ืฉื‘ื•ืŸ. ื”ื™ื” ืฆื•ืจืš ื‘ืžื–ื”ื” ื”ื ืงื•ื“ื” ื•ืฉื ื”ืœืงื•ื— ื‘ืžื—ืฆื™ืช ืžื”ืฉื™ื—ื•ืช.

ืœืื—ืจ ืฉืขื” ืฉืœ ืขื™ื‘ื•ื“ ืžื—ื“ืฉ, ื”ืฆืœื—ื ื• ืœื”ืคืจื™ื“ ืืช ืงื•ื“ ื”ืชืฉืชื™ืช ื•ื—ืœืง ืžื”ื ื™ื•ืื ืกื™ื ืฉืœ ืขื‘ื•ื“ื” ืขื ื—ืฉื‘ื•ืŸ ืœืฉื™ื˜ื•ืช/ืžื—ืœืงื•ืช ื ืคืจื“ื•ืช. ืฉื™ื˜ืช ื”ืืœื•ื”ื™ื ื”ืงืœื” ืขืœ ื–ื”, ืื‘ืœ ื ื•ืชืจื• 100 ืฉื•ืจื•ืช ืงื•ื“ ืฉืคืฉื•ื˜ ืœื ืจืฆื• ืœื”ืชื™ืจ.

ืจืง ืœืื—ืจ ืžืกืคืจ ื™ืžื™ื ื”ืชื‘ืจืจ ื›ื™ ื”ืžื”ื•ืช ืฉืœ ืฉื™ื˜ื” "ืงืœืช ืžืฉืงืœ" ื–ื• ื”ื™ื ืืœื’ื•ืจื™ืชื ืขืกืงื™. ื•ืฉื”ืชื™ืื•ืจ ื”ืžืงื•ืจื™ ืฉืœ ื”ืžืคืจื˜ ื”ื˜ื›ื ื™ ื”ื™ื” ืžื•ืจื›ื‘ ืœืžื“ื™. ื•ื”ื ื™ืกื™ื•ืŸ ืœืฉื‘ื•ืจ ืืช ื”ืฉื™ื˜ื” ื”ื–ื• ืœื—ืชื™ื›ื•ืช ื”ื•ื ืฉื™ืคืจ ืืช ื”-SRP, ื•ืœื ืœื”ื™ืคืš.

ื˜ึดืงืกึดื™ื•ึผืช.

ื”ื’ื™ืข ื”ื–ืžืŸ ืœื”ืฉืื™ืจ ืืช ื”ืฉื™ื›ื•ืจ ืฉืœื ื• ื‘ืฉืงื˜. ื™ื‘ืฉื• ืืช ื”ื“ืžืขื•ืช - ืื™ืŸ ืกืคืง ืฉื ื—ื–ื•ืจ ืืœื™ื• ืžืชื™ืฉื”ื•. ืขื›ืฉื™ื• ื‘ื•ืื• ื ื ืกื— ืืช ื”ื™ื“ืข ืžืžืืžืจ ื–ื”.

ืคื•ืจืžืœื™ื–ื 1. ื”ื’ื“ืจื” ืฉืœ SRP

  1. ื”ืคืจื™ื“ื• ืืช ื”ืืœืžื ื˜ื™ื ื›ืš ืฉื›ืœ ืื—ื“ ืžื”ื ืื—ืจืื™ ืœื“ื‘ืจ ืื—ื“.
  2. ืื—ืจื™ื•ืช ื”ื™ื "ืกื™ื‘ื” ืœืฉื™ื ื•ื™". ื›ืœื•ืžืจ, ืœื›ืœ ืืœืžื ื˜ ื™ืฉ ืจืง ืกื™ื‘ื” ืื—ืช ืœืฉื™ื ื•ื™, ืžื‘ื—ื™ื ืช ื”ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™.
  3. ืฉื™ื ื•ื™ื™ื ืคื•ื˜ื ืฆื™ืืœื™ื™ื ื‘ื”ื™ื’ื™ื•ืŸ ื”ืขืกืงื™. ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืžืงื•ืžื™. ืืœืžื ื˜ื™ื ื”ืžืฉืชื ื™ื ื‘ืื•ืคืŸ ืกื™ื ื›ืจื•ื ื™ ื—ื™ื™ื‘ื™ื ืœื”ื™ื•ืช ื‘ืงืจื‘ืช ืžืงื•ื.

ืคื•ืจืžืœื™ื–ื 2. ืงืจื™ื˜ืจื™ื•ื ื™ื ื”ื›ืจื—ื™ื™ื ืœื‘ื“ื™ืงื” ืขืฆืžื™ืช.

ืœื ืจืื™ืชื™ ืžืกืคื™ืง ืงืจื™ื˜ืจื™ื•ื ื™ื ืœืžื™ืœื•ื™ ื”-SRP. ืื‘ืœ ื™ืฉ ืชื ืื™ื ื”ื›ืจื—ื™ื™ื:

1) ืฉืืœื• ืืช ืขืฆืžื›ื ืžื” ืขื•ืฉื” ื”ื›ื™ืชื”/ืฉื™ื˜ื”/ืžื•ื“ื•ืœ/ืฉื™ืจื•ืช ื–ื”. ืืชื” ื—ื™ื™ื‘ ืœืขื ื•ืช ืขืœ ื–ื” ื‘ื”ื’ื“ืจื” ืคืฉื•ื˜ื”. ( ืชื•ื“ื” ื‘ืจื™ื™ื˜ื•ืจื™ )

ื”ืกื‘ืจื™ื

ืขื ื–ืืช, ืœืคืขืžื™ื ืงืฉื” ืžืื•ื“ ืœืžืฆื•ื ื”ื’ื“ืจื” ืคืฉื•ื˜ื”

2) ืชื™ืงื•ืŸ ื‘ืื’ ืื• ื”ื•ืกืคืช ืชื›ื•ื ื” ื—ื“ืฉื” ืžืฉืคื™ืขื™ื ืขืœ ืžืกืคืจ ืžื™ื ื™ืžืœื™ ืฉืœ ืงื‘ืฆื™ื/ืžื—ืœืงื•ืช. ื‘ืื•ืคืŸ ืื™ื“ื™ืืœื™ - ืื—ื“.

ื”ืกื‘ืจื™ื

ืžืื—ืจ ืฉื”ืื—ืจื™ื•ืช (ืขืœ ืชื›ื•ื ื” ืื• ื‘ืื’) ืžื•ื‘ืœืขืช ื‘ืงื•ื‘ืฅ/ืžื—ืœืงื” ืื—ืช, ืืชื” ื™ื•ื“ืข ื‘ื“ื™ื•ืง ืื™ืคื” ืœื—ืคืฉ ื•ืžื” ืœืขืจื•ืš. ืœื“ื•ื’ืžื: ื”ืชื›ื•ื ื” ืฉืœ ืฉื™ื ื•ื™ ื”ืคืœื˜ ืฉืœ ืคืขื•ืœื•ืช ื”ืจื™ืฉื•ื ื™ื—ื™ื™ื‘ื• ืœืฉื ื•ืช ืจืง ืืช ื”ืœื•ื’ืจ. ืื™ืŸ ืฆื•ืจืš ืœืจื•ืฅ ืขืœ ืฉืืจ ื”ืงื•ื“.

ื“ื•ื’ืžื” ื ื•ืกืคืช ื”ื™ื ื”ื•ืกืคืช ื‘ืงืจืช ืžืžืฉืง ืžืฉืชืžืฉ ื—ื“ืฉื”, ื‘ื“ื•ืžื” ืœืงื•ื“ืžื•ืช. ืื ื–ื” ืžืืœืฅ ืื•ืชืš ืœื”ื•ืกื™ืฃ 10 ื™ืฉื•ื™ื•ืช ืฉื•ื ื•ืช ื•-15 ืžืžื™ืจื™ื ืฉื•ื ื™ื, ื ืจืื” ืฉืืชื” ืžื’ื–ื™ื.

3) ืื ืžืกืคืจ ืžืคืชื—ื™ื ืขื•ื‘ื“ื™ื ืขืœ ืžืืคื™ื™ื ื™ื ืฉื•ื ื™ื ืฉืœ ื”ืคืจื•ื™ืงื˜ ืฉืœืš, ืื–ื™ ื”ืกื‘ื™ืจื•ืช ืœื”ืชื ื’ืฉื•ืช ืžื™ื–ื•ื’, ื›ืœื•ืžืจ, ื”ืกื‘ื™ืจื•ืช ืฉืื•ืชื• ืงื•ื‘ืฅ/ืžื—ืœืงื” ื™ืฉืชื ื” ืขืœ ื™ื“ื™ ืžืกืคืจ ืžืคืชื—ื™ื ื‘ื• ื–ืžื ื™ืช, ื”ื™ื ืžื™ื ื™ืžืœื™ืช.

ื”ืกื‘ืจื™ื

ืื, ื‘ืขืช ื”ื•ืกืคืช ืคืขื•ืœื” ื—ื“ืฉื” "ืœืฉืคื•ืš ื•ื•ื“ืงื” ืžืชื—ืช ืœืฉื•ืœื—ืŸ", ืืชื” ืฆืจื™ืš ืœื”ืฉืคื™ืข ืขืœ ื”ื›ื•ืจืช, ืขืœ ืคืขื•ืœืช ื”ืฉืชื™ื™ื” ื•ื”ืžื–ื™ื’ื”, ืื– ื ืจืื” ืฉื”ืื—ืจื™ื•ืช ืžื—ื•ืœืงืช ื‘ืฆื•ืจื” ืขืงื•ืžื”. ื›ืžื•ื‘ืŸ ืฉื–ื” ืœื ืชืžื™ื“ ืืคืฉืจื™, ืื‘ืœ ื›ื“ืื™ ืœื ืกื•ืช ืœื”ืคื—ื™ืช ืืช ื”ื ืชื•ืŸ ื”ื–ื”.

4) ื›ืฉืฉื•ืืœื™ื ืื•ืชืš ืฉืืœืช ื”ื‘ื”ืจื” ืœื’ื‘ื™ ื”ื™ื’ื™ื•ืŸ ืขืกืงื™ (ืžืžืคืชื— ืื• ืžื ื”ืœ), ืืชื” ื ื›ื ืก ืืš ื•ืจืง ืœื›ื™ืชื”/ืงื•ื‘ืฅ ืื—ื“ ื•ืžืงื‘ืœ ืžื™ื“ืข ืจืง ืžืฉื.

ื”ืกื‘ืจื™ื

ืชื›ื•ื ื•ืช, ื›ืœืœื™ื ืื• ืืœื’ื•ืจื™ืชืžื™ื ื ื›ืชื‘ื™ื ื‘ืฆื•ืจื” ืงื•ืžืคืงื˜ื™ืช, ื›ืœ ืื—ื“ ื‘ืžืงื•ื ืื—ื“, ื•ืื™ื ื ืžืคื•ื–ืจื™ื ื‘ื“ื’ืœื™ื ื‘ืžืจื—ื‘ ื”ืงื•ื“.

5) ื”ืฉื ื‘ืจื•ืจ.

ื”ืกื‘ืจื™ื

ื”ื›ื™ืชื” ืื• ื”ืฉื™ื˜ื” ืฉืœื ื• ืื—ืจืื™ืช ืœื“ื‘ืจ ืื—ื“, ื•ื”ืื—ืจื™ื•ืช ื‘ืื” ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ื‘ืฉืžื”

AllManagersManagerService - ื›ื›ืœ ื”ื ืจืื” ืฉื™ืขื•ืจ ืืœื•ื”ื™ื
LocalPayment - ื›ื ืจืื” ืฉืœื

ืคื•ืจืžืœื™ื–ื 3. ืžืชื•ื“ื•ืœื•ื’ื™ื™ืช ื”ืคื™ืชื•ื— ื”ืจืืฉื•ื ื” ืฉืœ Occam.

ื‘ืชื—ื™ืœืช ื”ืขื™ืฆื•ื‘, ืื™ืฉ ื”ืงื•ืคื™ื ืื™ื ื• ื™ื•ื“ืข ื•ืื™ื ื• ืžืจื’ื™ืฉ ืืช ื›ืœ ื”ื“ืงื•ื™ื•ืช ืฉืœ ื”ื‘ืขื™ื” ื ืคืชืจื•ืช ื•ื™ื›ื•ืœ ืœื˜ืขื•ืช. ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ื˜ืขื•ื™ื•ืช ื‘ื“ืจื›ื™ื ืฉื•ื ื•ืช:

  • ื”ืคื•ืš ื—ืคืฆื™ื ื’ื“ื•ืœื™ื ืžื“ื™ ืขืœ ื™ื“ื™ ืžื™ื–ื•ื’ ืชื—ื•ืžื™ ืื—ืจื™ื•ืช ืฉื•ื ื™ื
  • ืžืกื’ื•ืจ ืžื—ื“ืฉ ืขืœ ื™ื“ื™ ื—ืœื•ืงืช ืื—ืจื™ื•ืช ื™ื—ื™ื“ื” ืœื”ืจื‘ื” ืกื•ื’ื™ื ืฉื•ื ื™ื
  • ื”ื’ื“ื™ืจื• ื‘ืื•ืคืŸ ืฉื’ื•ื™ ืืช ื’ื‘ื•ืœื•ืช ื”ืื—ืจื™ื•ืช

ื—ืฉื•ื‘ ืœื–ื›ื•ืจ ืืช ื”ื›ืœืœ: "ืขื“ื™ืฃ ืœืขืฉื•ืช ื˜ืขื•ืช ื’ื“ื•ืœื”", ืื• "ืื ืืชื” ืœื ื‘ื˜ื•ื—, ืืœ ืชืคืฆืœ ืืช ื–ื”". ืื, ืœืžืฉืœ, ื”ื›ื™ืชื” ืฉืœืš ืžื›ื™ืœื” ืฉืชื™ ืชื—ื•ืžื™ ืื—ืจื™ื•ืช, ืื– ื–ื” ืขื“ื™ื™ืŸ ืžื•ื‘ืŸ ื•ื ื™ืชืŸ ืœืคืฆืœ ืœืฉื ื™ื™ื ืขื ืฉื™ื ื•ื™ื™ื ืžื™ื ื™ืžืœื™ื™ื ื‘ืงื•ื“ ื”ืœืงื•ื—. ื”ืจื›ื‘ืช ื–ื›ื•ื›ื™ืช ืžืจืกื™ืกื™ ื–ื›ื•ื›ื™ืช ื”ื™ื ื‘ื“ืจืš ื›ืœืœ ืงืฉื” ื™ื•ืชืจ ื‘ืฉืœ ื”ืคื–ืจืช ื”ื”ืงืฉืจ ืขืœ ืคื ื™ ืžืกืคืจ ืงื‘ืฆื™ื ื•ื”ื™ืขื“ืจ ื”ืชืœื•ืช ื”ื›ืจื—ื™ืช ื‘ืงื•ื“ ื”ืœืงื•ื—.

ื”ื’ื™ืข ื”ื–ืžืŸ ืœืงืจื•ื ืœื–ื” ื™ื•ื

ื”ื™ืงืฃ SRP ืื™ื ื• ืžื•ื’ื‘ืœ ืœ- OOP ื•- SOLID. ื–ื” ื—ืœ ืขืœ ืฉื™ื˜ื•ืช, ืคื•ื ืงืฆื™ื•ืช, ืžื—ืœืงื•ืช, ืžื•ื“ื•ืœื™ื, ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ื•ืฉื™ืจื•ืชื™ื. ื–ื” ืชืงืฃ ื’ื ืœืคื™ืชื•ื— "figax-figax-and-prod" ื•ื’ื ืœืคื™ืชื•ื— "ืจืงื˜ื•ืช-science", ืžื” ืฉื”ื•ืคืš ืืช ื”ืขื•ืœื ืœืงืฆืช ื˜ื•ื‘ ื™ื•ืชืจ ื‘ื›ืœ ืžืงื•ื. ืื ืืชื” ื—ื•ืฉื‘ ืขืœ ื–ื”, ื–ื” ื›ืžืขื˜ ื”ืขื™ืงืจื•ืŸ ื”ื‘ืกื™ืกื™ ืฉืœ ื›ืœ ื”ื ื“ืกื”. ื”ื ื“ืกืช ืžื›ื•ื ื•ืช, ืžืขืจื›ื•ืช ื‘ืงืจื”, ื•ืื›ืŸ ื›ืœ ื”ืžืขืจื›ื•ืช ื”ืžื•ืจื›ื‘ื•ืช ื‘ื ื•ื™ื•ืช ืžืžืจื›ื™ื‘ื™ื, ื•"ืชืช-ืคืจื’ืžื ื˜ืฆื™ื”" ืžื•ื ืขืช ืžื”ืžืขืฆื‘ื™ื ื’ืžื™ืฉื•ืช, "ืคืจื’ืžื ื˜ืฆื™ื” ื™ืชืจ" ืžื•ื ืขืช ืžื”ืžืขืฆื‘ื™ื ื™ืขื™ืœื•ืช, ื•ื’ื‘ื•ืœื•ืช ืœื ื ื›ื•ื ื™ื ืฉื•ืœืœื™ื ืžื”ื ืฉื›ืœ ื•ืฉืงื˜ ื ืคืฉื™.

ืขื™ืงืจื•ืŸ ืื—ืจื™ื•ืช ื™ื—ื™ื“ื”. ืœื ืคืฉื•ื˜ ื›ืžื• ืฉื–ื” ื ืจืื”

SRP ืื™ื ื• ื”ื•ืžืฆื ืขืœ ื™ื“ื™ ื”ื˜ื‘ืข ื•ืื™ื ื• ื—ืœืง ืžื”ืžื“ืข ื”ืžื“ื•ื™ืง. ื–ื” ืคื•ืจืฅ ืžื”ืžื’ื‘ืœื•ืช ื”ื‘ื™ื•ืœื•ื’ื™ื•ืช ื•ื”ืคืกื™ื›ื•ืœื•ื’ื™ื•ืช ืฉืœื ื•, ื–ื• ืจืง ื“ืจืš ืœืฉืœื•ื˜ ื•ืœืคืชื— ืžืขืจื›ื•ืช ืžื•ืจื›ื‘ื•ืช ื‘ืืžืฆืขื•ืช ืžื•ื— ืงื•ืฃ-ืื“ื. ื”ื•ื ืื•ืžืจ ืœื ื• ืื™ืš ืœืคืจืง ืžืขืจื›ืช. ื”ื ื™ืกื•ื— ื”ืžืงื•ืจื™ ื“ืจืฉ ืžื™ื“ื” ืœื ืžื‘ื•ื˜ืœืช ืฉืœ ื˜ืœืคืชื™ื”, ืื‘ืœ ืื ื™ ืžืงื•ื•ื” ืฉื”ืžืืžืจ ื”ื–ื” ืžื ืงื” ื—ืœืง ืžืžืกืš ื”ืขืฉืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”