Programovanie

Ako implementovať vzor návrhu úložiska v C #

Dizajnové vzory sa používajú ako riešenie opakujúcich sa problémov vo vašich aplikáciách a vzor Repository je jedným z najbežnejšie používaných návrhových vzorov. Bude pretrvávať, kým vaše objekty nebudú potrebné, aby ste museli vedieť, ako by tieto objekty v skutočnosti pretrvávali v základnej databáze, t. J. Bez toho, aby ste sa museli obťažovať nad tým, ako sa pod nimi pretrváva údaj. Znalosť tejto perzistencie, t.j. logiky perzistencie, je obsiahnutá vo vnútri úložiska.

Dizajnový vzor Repository v podstate uľahčuje spätné prepojenie obchodnej logiky a vrstiev prístupu k dátam vo vašej aplikácii s prvými, ktoré nemusia mať žiadne vedomosti o tom, ako by v skutočnosti perzistencia údajov prebiehala.

Pri použití návrhového vzoru úložiska môžete skryť podrobnosti o tom, ako sa údaje nakoniec ukladajú alebo načítajú do a z úložiska údajov. Týmto úložiskom údajov môže byť databáza, súbor XML atď. Tento návrhový vzor môžete použiť aj na skrytie spôsobu prístupu k údajom vystaveným webovou službou alebo serverom ORM. Martin Fowler uvádza: „Sprostredkuje medzi doménou a vrstvami mapovania údajov pomocou kolekčného rozhrania na prístup k objektom domény.“

Repozitár je definovaný ako kolekcia doménových objektov, ktoré sa nachádzajú v pamäti. MSDN uvádza: "Použite úložisko na oddelenie logiky, ktorá načítava údaje, a ich mapovania na model entity od obchodnej logiky, ktorá na model pôsobí. Obchodná logika by mala byť agnostická voči typu údajov, ktoré tvoria vrstvu zdroja údajov." Vrstva zdroja údajov môže byť napríklad databáza, zoznam SharePoint alebo webová služba. “

Implementácia návrhového vzoru úložiska v C #

V tejto časti preskúmame, ako môžeme naprogramovať vzor návrhu úložiska. Pri našej implementácii návrhového vzoru úložiska patria medzi zúčastnené typy nasledujúce:

  1. Rozhranie IRepository - toto rozhranie je základným typom pre všetky typy úložiska
  2. Trieda úložiska - toto je všeobecná trieda úložiska
  3. Jedna alebo viac tried úložiska, ktoré implementujú rozhranie IRepository

Poďme teraz kopať do nejakého kódu. Nasledujúca trieda ukazuje, ako môžete definovať základné triedy entít, z ktorých by sa mali odvodiť všetky vaše triedy entít.

verejná abstraktná trieda EntityBase

   {

public Int64 Id {get; chránená súprava; }

   }

Trieda je definovaná ako abstraktná s iba jedným poľom s názvom „Id“. Pole „Id“ je spoločné pre všetky subjekty, ktoré obvykle používate, však? Tu je príklad, ako by vyzeralo všeobecné rozhranie IRepository.

verejné rozhranie IRepository kde T: EntityBase

   {

T GetById (Int64 id);

void Create (entita T);

void Delete (entita T);

void Update (entita T);

   }

Generická trieda úložiska implementuje rozhranie IRepository a implementuje členov tohto rozhrania.

verejná trieda Repository: IRepository kde T: EntityBase

   {

public void Create (entita T)

       {

// Sem napíš svoju logiku, aby entita pretrvávala

       }

public void Delete (entita T)

       {

// Sem napíš svoju logiku, aby si vymazal entitu

       }

verejné T GetById (dlhé ID)

       {

// Sem napíš svoju logiku a načítaj entitu podľa Id

hodiť nový NotImplementedException ();

       }

public void Update (entita T)

       {

// Sem napíšte svoju logiku a aktualizujte entitu

       }

   }

Vytváranie úložísk pre konkrétne triedy

Ak chcete vytvoriť úložisko pre konkrétnu entitu, mali by ste vytvoriť triedu, ktorá implementuje všeobecné rozhranie IRepository. Nasledujúci zoznam kódov ukazuje, ako je to možné dosiahnuť.

verejná trieda CustomerRepository: IRepository

   {

// Sem napíšete svoj kód, aby ste implementovali každú z metód rozhrania IRepository.

   }

Podobne, ak by ste chceli vytvoriť ProductRepository, mali by ste najskôr vytvoriť triedu entity Produkt, ktorá rozširuje triedu EntityBase.

verejná trieda Produkt: EntityBase

   {

verejný reťazec ProductName {get; sada; }

verejný reťazec Kategória {get; sada; }

   }

Trieda ProductRepository by mala implementovať všeobecné rozhranie IRepository. Takto by vyzerala trieda ProductRepository.

verejná trieda ProductRepository: IRepository

   {

// Sem napíšete svoj kód, aby ste implementovali každú z metód rozhrania IRepository.

   }

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