Programavimas

Kaip įdiegti saugyklos dizaino modelį C #

Dizaino modeliai naudojami kaip pasikartojančių jūsų programų problemų sprendimas, o saugyklos modelis yra vienas iš dažniausiai naudojamų dizaino modelių. Tai išliks jūsų objektuose, nes nereikia žinoti, kaip tie objektai iš tikrųjų išliks pagrindinėje duomenų bazėje, t. Y., Jums nereikės jaudintis dėl to, kaip duomenų patvarumas vyksta po juo. Žinios apie šį patvarumą, t. Y. Atkaklumo logika, yra sukauptos saugyklos viduje.

Iš esmės, saugyklos dizaino modelis palengvina verslo logikos ir prieigos prie duomenų sluoksnių atsiejimą jūsų programoje su pirmosiomis, neturinčiomis jokių žinių apie tai, kaip iš tikrųjų vyks duomenys.

Naudodami saugyklos dizaino modelį, galite paslėpti išsamią informaciją apie tai, kaip duomenys galiausiai saugomi ar gaunami į duomenų saugyklą ir iš jos. Ši duomenų saugykla gali būti duomenų bazė, xml failas ir tt Martinas Fowleris teigia: "Tarpininkauja tarp domeno ir duomenų susiejimo sluoksnių, naudodamasis kolekcine sąsaja, kad pasiektų domeno objektus".

Saugykla apibrėžiama kaip domeno objektų, esančių atmintyje, rinkinys. MSDN teigia: "Naudokite saugyklą, kad atskirtumėte logiką, kuri gauna duomenis ir susieja juos su objekto modeliu, nuo verslo logikos, veikiančios modelį. Verslo logika turėtų būti agnostinė duomenų tipui, kurį sudaro duomenų šaltinio sluoksnis. Pavyzdžiui, duomenų šaltinio sluoksnis gali būti duomenų bazė, „SharePoint“ sąrašas arba žiniatinklio paslauga. "

Saugyklos dizaino modelio diegimas C #

Šiame skyriuje mes ištirsime, kaip mes galime užprogramuoti saugyklos dizaino modelį. Įgyvendinant saugyklos dizaino modelį, dalyvaujantys tipai apima:

  1. IR saugyklos sąsaja - ši sąsaja yra pagrindinis visų saugyklos tipų tipas
  2. Saugyklos klasė - tai bendroji saugyklos klasė
  3. Viena ar daugiau saugyklų klasių, kuriose įdiegta „IRepository“ sąsaja

Dabar įsigilinkime į tam tikrą kodą. Ši klasė parodo, kaip galite apibrėžti pagrindines esybės klases, iš kurių turėtų būti gautos visos jūsų esybės klasės.

viešoji abstrakčioji klasė „EntityBase“

   {

public Int64 Id {get; saugomas rinkinys; }

   }

Klasė apibrėžiama kaip abstrakti, turinti tik vieną lauką - pavadinimą „Id“. Laukas „Id“ yra bendras visiems subjektams, kuriuos paprastai naudojate, ar ne? Štai kaip atrodys bendroji „IRepository“ sąsaja.

viešoji sąsaja IR saugykla, kur T: EntityBase

   {

T „GetById“ („Int64“ ID);

void Create (T esybė);

void Delete (T esybė);

negaliojantis atnaujinimas (T esybė);

   }

Bendroji saugyklos klasė įgyvendina „IRepository“ sąsają ir sąsajos narius.

viešosios klasės saugykla: IR saugykla, kurioje T: EntityBase

   {

public void Sukurti (T esybė)

       {

// Parašykite savo logiką čia, kad išliktų esybė

       }

public void Ištrinti (T esybė)

       {

// Parašykite savo logiką čia, kad ištrintumėte objektą

       }

public T GetById (ilgas ID)

       {

// Parašykite savo logiką čia norėdami gauti objektą pagal Id

mesti naują NotImplementedException ();

       }

public void Update (T subjektas)

       {

// Norėdami atnaujinti objektą, čia parašykite savo logiką

       }

   }

Konkrečių klasių saugyklų kūrimas

Jei norite sukurti konkretaus objekto saugyklą, turėtumėte sukurti klasę, įgyvendinančią bendrą „IRepository“ sąsają. Šis kodų sąrašas parodo, kaip tai galima pasiekti.

viešosios klasės „CustomerRepository“: „IRepository“

   {

// Čia įrašykite savo kodą, kad įgyvendintumėte kiekvieną iš „IRepository“ sąsajos metodų.

   }

Panašiai, jei jūs sukūrėte „ProductRepository“, pirmiausia turėtumėte sukurti esybės klasės produktą, kuris pratęsia „EntityBase“ klasę.

public class Produktas: EntityBase

   {

vieša eilutė „ProductName“ {get; rinkinys; }

viešoji eilutė Kategorija {get; rinkinys; }

   }

„ProductRepository“ klasė turėtų įdiegti bendrąją „IRepository“ sąsają. Štai kaip atrodys „ProductRepository“ klasė.

viešosios klasės „ProductRepository“: „IRepository“

   {

// Čia įrašykite savo kodą, kad įgyvendintumėte kiekvieną iš „IRepository“ sąsajos metodų.

   }

$config[zx-auto] not found$config[zx-overlay] not found