Programmēšana

Kā ieviest krātuves dizaina modeli C #

Dizaina modeļi tiek izmantoti kā atkārtotu problēmu risinājums jūsu lietojumprogrammās, un krātuves modelis ir viens no visplašāk izmantotajiem dizaina modeļiem. Tas saglabās jūsu objektus bez nepieciešamības zināt, kā šie objekti faktiski tiks saglabāti pamatā esošajā datu bāzē, t.i., neuztraucoties par to, kā datu noturība notiek zemāk. Zināšanas par šo noturību, t.i., noturības loģiku, ir iekapsulētas krātuves iekšienē.

Būtībā krātuves noformējuma modelis atvieglo biznesa loģikas un datu piekļuves slāņu atsaistīšanu jūsu lietojumprogrammā ar pirmo, kam nav jābūt zināšanām par to, kā faktiski notiks datu noturība.

Izmantojot krātuves noformējuma modeli, varat paslēpt informāciju par to, kā dati tiek glabāti vai izgūti datu krātuvē un no tās. Šis datu krājums var būt datu bāze, xml fails utt. Varat izmantot šo noformējuma modeli, lai pat paslēptu, kā piekļūst datiem, kurus atklāj tīmekļa pakalpojums vai ORM. Martins Faulers norāda: "Starpojas starp domēna un datu kartēšanas slāņiem, izmantojot kolekcijai līdzīgu saskarni, lai piekļūtu domēna objektiem."

Krātuve ir definēta kā domēna objektu kolekcija, kas atrodas atmiņā. MSDN norāda: "Izmantojiet repozitoriju, lai nošķirtu loģiku, kas datus izgūst un piesaista to entītijas modelim, no uzņēmējdarbības loģikas, kas darbojas uz modeli. Biznesa loģikai jābūt agnostiskai attiecībā pret datu tipu, kas ietver datu avota slāni. . Piemēram, datu avota slānis var būt datu bāze, SharePoint saraksts vai tīmekļa pakalpojums. "

Krātuves dizaina modeļa ieviešana C #

Šajā sadaļā mēs izpētīsim, kā mēs varam ieprogrammēt krātuves dizaina modeli. Īstenojot krātuves dizaina modeli, iesaistītie veidi ietver:

  1. IR glabātavas saskarne - šī saskarne ir visu krātuvju tipu bāzes tips
  2. Repozitorija klase - tā ir vispārīgā krātuves klase
  3. Viena vai vairākas repozitorija klases, kas ievieš IRepository saskarni

Tagad iedziļināsimies kādā kodā. Šajā klasē parādīts, kā jūs varat definēt bāzes entītiju klases, no kurām jāiegūst visas jūsu entītiju klases.

publiskā abstraktā klase EntityBase

   {

public Int64 Id {get; aizsargāts komplekts; }

   }

Klase ir definēta kā abstrakta tikai ar vienu lauku - ar nosaukumu "Id". Lauks "Id" ir kopīgs visām entītijām, kuras parasti izmantojat, vai ne? Lūk, kā izskatīsies vispārējais IRepository interfeiss.

publiskā saskarne IR krātuve, kur T: EntityBase

   {

T GetById (Int64 id);

void Izveidot (T entītija);

void Dzēst (T entītija);

void Update (T entītija);

   }

Vispārīgā repozitorija klase ievieš IRepository saskarni un interfeisa dalībniekus.

publiskās klases krātuve: IR krātuve, kur T: EntityBase

   {

public void Izveidot (T entītija)

       {

// Uzrakstiet savu loģiku šeit, lai saglabātu entītiju

       }

public void Dzēst (T entītija)

       {

// Lai izdzēstu entītiju, šeit ierakstiet savu loģiku

       }

public T GetById (garš ID)

       {

// Šeit ierakstiet savu loģiku, lai izgūtu entītiju pēc Id

mest jaunu NotImplementedException ();

       }

public void Update (T entītija)

       {

// Uzrakstiet savu loģiku šeit, lai atjauninātu entītiju

       }

   }

Krātuvju veidošana noteiktām klasēm

Ja vēlaties izveidot repozitoriju konkrētai entītijai, jums jāizveido klase, kas ievieš vispārējo IRepository saskarni. Šis kodu saraksts parāda, kā to var panākt.

publiskā klase CustomerRepository: IRepository

   {

// Šeit ierakstiet savu kodu, lai ieviestu katru no IRepository saskarnes metodēm.

   }

Līdzīgi, ja izveidotu ProductRepository, vispirms jāizveido entītijas klase Produkts, kas paplašina EntityBase klasi.

publiskā klase Produkts: EntityBase

   {

publiskā virkne ProductName {get; komplekts; }

publiskā virkne Kategorija {get; komplekts; }

   }

Klasei ProductRepository jāievieš vispārējā IRepository saskarne. Lūk, kā izskatīsies klase ProductRepository.

publiskā klase ProductRepository: IRepository

   {

// Šeit ierakstiet savu kodu, lai ieviestu katru no IRepository saskarnes metodēm.

   }

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