Programiranje

Kako implementirati vzorec oblikovanja repozitorija v C #

Vzorci oblikovanja se uporabljajo kot rešitev za ponavljajoče se težave v vaših aplikacijah, vzorec repozitorija pa je eden najpogosteje uporabljenih vzorcev oblikovanja. Vztrajalo bo pri vaših predmetih, ne da bi morali vedeti, kako bi se ti predmeti dejansko obdržali v osnovni bazi podatkov, torej ne da bi vas motilo, kako se obstojnost podatkov dogaja spodaj. Znanje o tej obstojnosti, tj. Logika obstojnosti, je vdelano v skladišče.

V bistvu vzorec načrtovanja repozitorija olajša ločitev poslovne logike in slojev dostopa do podatkov v vaši aplikaciji, pri čemer prvi ne potrebuje nobenega znanja o tem, kako bi dejansko obstajala obstojnost podatkov.

Pri uporabi vzorca zasnove repozitorija lahko skrijete podrobnosti o tem, kako se podatki na koncu shranjujejo ali pridobivajo v shrambi podatkov in iz nje. Ta podatkovna shramba je lahko baza podatkov, datoteka xml itd. Ta vzorec načrtovanja lahko uporabite, da celo skrijete, kako se dostopa do podatkov, ki jih razkrije spletna storitev ali ORM. Martin Fowler pravi: "Posreduje med plastemi za preslikavo domene in podatkov s pomočjo vmesnika, podobnega zbirki, za dostop do domenskih objektov."

Repozitorij je definiran kot zbirka domenskih predmetov, ki se nahajajo v pomnilniku. MSDN navaja: "Uporabite repozitorij, da ločite logiko, ki pridobi podatke, in jo preslika v model entitete od poslovne logike, ki deluje na model. Poslovna logika bi morala biti agnostična glede na vrsto podatkov, ki sestavljajo plast vira podatkov Na primer, plast vira podatkov je lahko baza podatkov, SharePointov seznam ali spletna storitev. "

Izvajanje vzorca oblikovanja repozitorija v C #

V tem poglavju bomo raziskali, kako lahko programiramo vzorec oblikovanja repozitorija. Pri izvedbi vzorca oblikovanja repozitorija sodelujoče vrste vključujejo naslednje:

  1. Vmesnik IRepository - ta vmesnik je osnovni tip za vse vrste repozitorija
  2. Razred repozitorija - to je generični razred repozitorija
  3. Eden ali več razredov repozitorija, ki izvajajo vmesnik IRepository

Poglejmo zdaj nekaj kode. Naslednji razred prikazuje, kako lahko definirate osnovne razrede entitet, iz katerih bi morali izhajati vsi vaši razredi entitet.

javni abstraktni razred EntityBase

   {

javni Int64 Id {get; zaščiten komplet; }

   }

Razred je opredeljen kot abstraktno z enim samim poljem z imenom "Id". Polje "Id" je skupno vsem entitetam, ki jih običajno uporabljate, kajne? Evo, kako bi izgledal splošni vmesnik IRepository.

javni vmesnik IRepository, kjer je T: EntityBase

   {

T GetById (ID Int64);

void Create (T entiteta);

void Delete (T entiteta);

void Update (T entiteta);

   }

Generični razred repozitorija izvaja vmesnik IRepository in izvaja člane vmesnika.

javni razred Repozitorij: IRepository, kjer je T: EntityBase

   {

javna praznina Ustvari (entiteta T)

       {

// Tukaj napišite svojo logiko, da vztrajate v entiteti

       }

public void Delete (T entiteta)

       {

// Tukaj napišite svojo logiko, da izbrišete entiteto

       }

javni T GetById (dolg id)

       {

// Tukaj napišite svojo logiko za pridobivanje entitete z Id

vrzi novo NotImplementedException ();

       }

posodobitev javne praznine (entiteta T)

       {

// Tukaj napišite svojo logiko za posodobitev entitete

       }

   }

Ustvarjanje repozitorijev za določene razrede

Če želite ustvariti repozitorij za določeno entiteto, ustvarite razred, ki implementira generični vmesnik IRepository. Naslednji seznam kod prikazuje, kako je to mogoče doseči.

javni razred CustomerRepository: IRepository

   {

// Tukaj napišite svojo kodo za izvajanje vsake metode vmesnika IRepository.

   }

Podobno bi morali, če želite ustvariti ProductRepository, najprej ustvariti razred entitete Product, ki razširja razred EntityBase.

javni razred Product: EntityBase

   {

javni niz ProductName {get; set; }

javni niz Kategorija {get; set; }

   }

Razred ProductRepository bi moral izvajati generični vmesnik IRepository. Evo, kako bi izgledal razred ProductRepository.

javni razred ProductRepository: IRepository

   {

// Tukaj napišite svojo kodo za izvedbo vsake metode vmesnika IRepository.

   }

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