Programavimas

Kaip naudoti komandų dizaino šabloną C #

Dizaino modeliai yra patikrinti sprendimai, naudojami sprendžiant įprastas dizaino problemas ir sumažinant kodo sudėtingumą. Keturių dizaino modelių gauja skirstoma į tris kategorijas:

  • Kūryba - modeliai, susiję su objekto kūrimu
  • Struktūriniai - modeliai, susiję su objekto surinkimu
  • Elgesys - modeliai, susiję su objektų bendradarbiavimu ir atsakomybės atskyrimu

Komandų dizaino modelis priklauso elgesio modelio kategorijai. Šiame straipsnyje nagrinėjama, kaip mes galime dirbti su komandų dizaino modeliu C #.

Kas yra komandos dizaino modelis?

Komandų dizaino modelio tikslas yra atsieti veiksmo prašytoją nuo veiksmo vykdančio objekto. Komandų dizaino šablone užklausa įtraukiama kaip objektas, kuriame yra visa informacija apie užklausą. Tada šis objektas perduodamas įjungiančiajam objektui. Tada iškviečiantis objektas ieško tinkamo objekto komandai valdyti ir perduoda komandą objektui.

Komandų dizaino modelis yra geras pasirinkimas, kai norite įdiegti atgalinius skambučius, eilės užduotis, sekimo istoriją ir anuliuoti / perdaryti savo programoje funkcijas. Komandų šablonas yra geras pasirinkimas bandant pakartoti mechanizmus - kai jūsų programa nori pakartotinai bandyti prisijungti prie paslaugos vėliau, kuri šiuo metu neveikia ir neveikia. Komandų šablonas taip pat naudojamas pranešimų eilės programose, t. Y. Programose, kurioms reikia atsigauti po duomenų praradimo.

Komandos dizaino modelio dalyviai

Klasikiniame „Command“ modelio įgyvendinime turite keturis komponentus: komandą, iškvietėją, imtuvą ir klientą. Dalyviai komandos komandoje sudaro:

  • Komanda - suteikia sąsają operacijai vykdyti
  • „ConcreteCommand“ - išplečia „Command“ sąsają ir įgyvendina „Execute“ metodą
  • Klientas - sukuria „ConcreteCommand“ klasę
  • Kvietėjas - praneša komandai vykdyti užklausą
  • Gavėjas - pateikiama su užklausa susijusių operacijų vykdymo logika

Komandos dizaino modelio pavyzdys C #

Kitame skyriuje mes ištirsime, kaip mes galime įgyvendinti komandų dizaino modelį. Mūsų pavyzdyje įdiegsime paprastą skaičiuoklę naudodami šias klases:

  • „Command“ (komandos abstrakčios pagrindinės klasės)
  • „SimpleCalculator“ (imtuvo klasė)
  • „AddCommand“ (konkreti komandų klasė)
  • SubtractCommand (konkreti komandų klasė)
  • Dauginti komandą (konkreti komandų klasė)
  • „DivideCommand“ (konkreti komandų klasė)
  • Kvietėjas (dalyvio klasė)

Sukurkite „Command“ abstrakčią pagrindinę klasę C #

Apsvarstykite šią abstrakčią pagrindinę klasę, pavadintą „Command“, kurioje yra metodo „Execute“ deklaracija.

visuomenės abstrakčios klasės vadovybė

    {

apsaugotas „SimpleCalculator“ imtuvas;

viešoji komanda („SimpleCalculator“ imtuvas)

        {

tai.gavėjas = imtuvas;

        }

public abstract int Vykdyti ();

    }

Šis sąrašas rodo operacijas, kurios bus palaikomos mūsų paprastoje skaičiuoklėje.

public enum „CommandOption“

    {

Sudėkite, atimkite, padauginkite, padalykite

    }

Sukurkite imtuvo klasę C #

Toliau pateikiama klasė, pavadinta „SimpleCalculator“. Ši klasė veikia kaip imtuvas ir apima metodų „sudėti, atimti“, „dauginti“ ir „padalyti“ apibrėžimus.

viešosios klasės „SimpleCalculator“

    {

privatus int _x, _y;

viešasis „SimpleCalculator“ (int a, int b)

        {

_x = a;

_y = b;

        }

public int Pridėti ()

        {

grįžti _x + _y;

        }

public int Atimkite ()

        {

grįžti _x - _y;

        }

public int Padauginti ()

        {

grįžti _x * _y;

        }

public int Divide ()

        {

grįžti _x / _y;

        }

    }

Sukurkite konkrečias komandų klases C #

Konkrečios komandų klasės praplečia „Command“ abstrakčią pagrindinę klasę ir įgyvendina „Execute“ metodą, kaip parodyta žemiau.

 viešoji klasė „AddCommand“: komanda

    {

privatus „SimpleCalculator“ _kalkuliatorius;

public AddCommand („SimpleCalculator“ skaičiuoklė): pagrindas (skaičiuoklė)

        {

_kalkuliatorius = skaičiuoklė;

        }

public override int Vykdyti ()

        {

grįžti _kalkuliatorius.Pridėti ();

        }

    }

public class SubtractCommand: komanda

    {

privatus „SimpleCalculator“ _kalkuliatorius;

public SubtractCommand („SimpleCalculator“ skaičiuoklė):

bazė (skaičiuoklė)

        {

_kalkuliatorius = skaičiuoklė;

        }

public override int Vykdyti ()

        {

grįžti _kalkuliatorius.Subtract ();

        }

    }

viešoji klasė „MultiplyCommand“: „Command“

    {

privatus „SimpleCalculator“ _kalkuliatorius;

viešoji „MultiplyCommand“ („SimpleCalculator“ skaičiuoklė):

bazė (skaičiuoklė)

        {

_kalkuliatorius = skaičiuoklė;

        }

public override int Vykdyti ()

        {

grįžti _kalkuliatorius.Suplikyti ();

        }

    }

viešoji klasė „DivideCommand“: „Command“

    {

privatus „SimpleCalculator“ _kalkuliatorius;

public DivideCommand („SimpleCalculator“ skaičiuoklė):

bazė (skaičiuoklė)

        {

_kalkuliatorius = skaičiuoklė;

        }

public override int Vykdyti ()

        {

grįžti _kalkuliatorius.Skirstykite ();

        }

    }

Sukurkite „Invoker“ klasę C #

Šis kodo fragmentas iliustruoja „Invoker“ klasę. Jame yra du metodai - „SetCommand“ ir „Execute“. Nors „SetCommand“ naudojamas priskirti komandos objektą privačiai komandos nuorodai „Invoker“ klasėje, komandai vykdyti naudojama „Execute“.

 viešoji klasė „Invoker“

    {

privati ​​komanda _komanda;

public void „SetCommand“ („Command“ komanda)

        {

_komanda = komanda;

        }

public int Vykdyti ()

        {

return _command.Execute ();

        }

    }

Komandos dizaino modelis veikia C #

Galiausiai šis kodo fragmentas parodo, kaip galite atlikti paprastą skaičiavimą naudodami „SimpleCalculator“ klasę.

static void Main (string [] args)

        {

„SimpleCalculator“ skaičiuoklė = naujas „SimpleCalculator“ (15, 3);

var addCommand = new AddCommand (skaičiuoklė);

var subtractCommand = nauja „SubtractCommand“ (skaičiuoklė);

var multiplyCommand = nauja Dauginimo komanda (skaičiuoklė);

var divideCommand = nauja „DivideCommand“ (skaičiuoklė);

Invoker invoker = naujas dalyvis ();

invoker.SetCommand (addCommand);

Console.WriteLine ("Rezultatas yra {0}", invoker.Execute ());

invoker.SetCommand (subtractCommand);

Console.WriteLine ("Rezultatas yra {0}", invoker.Execute ());

invoker.SetCommand (multiplyCommand);

Console.WriteLine ("Rezultatas yra {0}", invoker.Execute ());

invoker.SetCommand (divideCommand);

Console.WriteLine ("Rezultatas yra {0}", invoker.Execute ());

Pultas.ReadLine ();

        }

Komandų dizaino modelis palaiko išplėtimą ir sumažina ryšį, kuris egzistuoja tarp komandos įjungiklio ir imtuvo. Kadangi užklausa yra sutalpinta į atskirą objektą, galite parametrus nustatyti metodais su skirtingomis užklausomis, išsaugoti užklausas eilėje ir netgi suteikti paramą pakartotinai arba anuliuotai atliekamoms operacijoms.

Padarykite daugiau naudodami C #:

  • Kaip dirbti su „AutoMapper“ C #
  • Kada naudoti abstrakčią klasę ir sąsają C #
  • Kaip dirbti su temomis C #
  • Kaip naudoti Dapper ORM C #
  • Kaip įgyvendinti saugyklos dizaino modelį C #
  • Kaip įdiegti paprastą kaupiklį C #
  • Kaip dirbti su delegatais C #
  • Kaip dirbti su „Action“, „Func“ ir „Predicate“ delegatais C #
  • Kaip dirbti su „Log4net“ C #
  • Kaip dirbti su atspindžiu C #