Προγραμματισμός

Πώς να εφαρμόσετε το σχέδιο σχεδίασης αποθετηρίου στο C #

Τα μοτίβα σχεδίασης χρησιμοποιούνται ως λύση σε επαναλαμβανόμενα προβλήματα στις εφαρμογές σας και το μοτίβο αποθετηρίου είναι ένα από τα πιο ευρέως χρησιμοποιούμενα μοτίβα σχεδίασης. Θα παραμείνει τα αντικείμενά σας χωρίς να χρειάζεται να γνωρίζουμε πώς αυτά τα αντικείμενα θα παραμείνουν στην υποκείμενη βάση δεδομένων, δηλαδή, χωρίς να χρειάζεται να ανησυχείτε για το πώς συμβαίνει η επιμονή δεδομένων από κάτω. Η γνώση αυτής της επιμονής, δηλ. Η λογική της εμμονής, ενσωματώνεται μέσα στο αποθετήριο.

Ουσιαστικά, το σχέδιο σχεδίασης αποθετηρίου διευκολύνει την αποσύνδεση της επιχειρησιακής λογικής και των επιπέδων πρόσβασης δεδομένων στην εφαρμογή σας, με την πρώτη να μην χρειάζεται να γνωρίζει πώς θα συνέβαινε πραγματικά η διατήρηση δεδομένων.

Κατά τη χρήση του μοτίβου σχεδίασης αποθετηρίου, μπορείτε να αποκρύψετε τις λεπτομέρειες του τρόπου με τον οποίο τα δεδομένα αποθηκεύονται ή ανακτώνται τελικά από και προς την αποθήκευση δεδομένων. Αυτή η αποθήκευση δεδομένων μπορεί να είναι μια βάση δεδομένων, ένα αρχείο xml, κ.λπ. Μπορείτε να εφαρμόσετε αυτό το μοτίβο σχεδίασης για να αποκρύψετε ακόμη και τον τρόπο πρόσβασης στα δεδομένα που εκτίθενται από μια υπηρεσία ιστού ή ένα ORM. Ο Martin Fowler δηλώνει: "Διαμεσολαβεί μεταξύ των επιπέδων χαρτογράφησης τομέα και δεδομένων χρησιμοποιώντας μια διεπαφή τύπου συλλογής για πρόσβαση σε αντικείμενα τομέα."

Ένα αποθετήριο ορίζεται ως μια συλλογή αντικειμένων τομέα που βρίσκονται στη μνήμη. Το MSDN δηλώνει: "Χρησιμοποιήστε ένα αποθετήριο για να διαχωρίσετε τη λογική που ανακτά τα δεδομένα και τα αντιστοιχίζει στο μοντέλο οντοτήτων από την επιχειρηματική λογική που ενεργεί στο μοντέλο. Η επιχειρηματική λογική θα πρέπει να είναι αγνωστικη για τον τύπο δεδομένων που περιλαμβάνει το επίπεδο προέλευσης δεδομένων Για παράδειγμα, το επίπεδο προέλευσης δεδομένων μπορεί να είναι μια βάση δεδομένων, μια λίστα SharePoint ή μια υπηρεσία Web. "

Εφαρμογή του σχεδίου σχεδίασης αποθετηρίου στο C #

Σε αυτήν την ενότητα θα διερευνήσουμε πώς μπορούμε να προγραμματίσουμε το σχέδιο σχεδίασης αποθετηρίου. Κατά την εφαρμογή μας του σχεδίου σχεδίασης αποθετηρίου, οι συμμετέχοντες τύποι περιλαμβάνουν τα ακόλουθα:

  1. Διεπαφή IRepository - αυτή η διεπαφή είναι ο βασικός τύπος για όλους τους τύπους αποθετηρίων
  2. Κατηγορία αποθετηρίου - αυτή είναι η γενική κλάση αποθετηρίου
  3. Μία ή περισσότερες κλάσεις αποθετηρίου που εφαρμόζουν τη διεπαφή IRepository

Ας σκάψουμε τώρα κάποιον κώδικα. Η ακόλουθη κλάση δείχνει πώς μπορείτε να ορίσετε βασικές κλάσεις οντοτήτων από τις οποίες πρέπει να προέρχονται όλες οι κλάσεις οντοτήτων σας.

δημόσια αφηρημένη τάξη EntityBase

   {

δημόσιο αναγνωριστικό Int64 {get; προστατευμένο σετ; }

   }

Η τάξη ορίζεται ως αφηρημένη με ένα μόνο πεδίο - με το όνομα "Id". Το πεδίο "Id" είναι κοινό σε όλες τις οντότητες που χρησιμοποιείτε γενικά, έτσι δεν είναι; Δείτε πώς θα μοιάζει η γενική διεπαφή IRepository.

δημόσια διεπαφή IRepository όπου T: EntityBase

   {

T GetById (Int64 id);

άκυρο Δημιουργία (οντότητα Τ);

άκυρο Διαγραφή (οντότητα Τ).

άκυρη ενημέρωση (οντότητα T) ·

   }

Η γενική κλάση αποθετηρίου εφαρμόζει τη διεπαφή IRepository και εφαρμόζει τα μέλη της διεπαφής.

δημόσιος κλάσης αποθετήριο: IR αποθετήριο όπου T: EntityBase

   {

δημόσιο κενό Δημιουργία (οντότητα Τ)

       {

// Γράψτε τη λογική σας εδώ για να διατηρήσετε την οντότητα

       }

δημόσιο κενό Διαγραφή (οντότητα Τ)

       {

// Γράψτε τη λογική σας εδώ για να διαγράψετε μια οντότητα

       }

δημόσιο T GetById (μεγάλο αναγνωριστικό)

       {

// Γράψτε τη λογική σας εδώ για να ανακτήσετε μια οντότητα με αναγνωριστικό

ρίξτε νέο NotImplementedException ();

       }

δημόσια ακύρωση ενημέρωσης (οντότητα T)

       {

// Γράψτε τη λογική σας εδώ για να ενημερώσετε μια οντότητα

       }

   }

Δημιουργία αποθετηρίων για συγκεκριμένες τάξεις

Εάν θέλετε να δημιουργήσετε ένα αποθετήριο για μια συγκεκριμένη οντότητα, θα πρέπει να δημιουργήσετε μια κλάση που εφαρμόζει τη γενική διεπαφή IRepository. Η ακόλουθη λίστα κωδικών δείχνει πώς μπορεί να επιτευχθεί αυτό.

δημόσια κλάση CustomerRepository: IRepository

   {

// Γράψτε τον κωδικό σας εδώ για να εφαρμόσετε καθεμία από τις μεθόδους της διεπαφής IRepository.

   }

Ομοίως, εάν επρόκειτο να δημιουργήσετε ένα ProductRepository, πρέπει πρώτα να δημιουργήσετε ένα προϊόν κλάσης οντοτήτων που επεκτείνει την κλάση EntityBase.

Δημόσια τάξη Προϊόν: EntityBase

   {

δημόσια συμβολοσειρά ProductName {get; σειρά; }

δημόσια συμβολοσειρά Κατηγορία {get; σειρά; }

   }

Η κλάση ProductRepository θα πρέπει να εφαρμόζει τη γενική διεπαφή IRepository. Δείτε πώς θα μοιάζει η κλάση ProductRepository.

δημόσια κλάση ProductRepository: IRepository

   {

// Γράψτε τον κωδικό σας εδώ για να εφαρμόσετε καθεμία από τις μεθόδους της διεπαφής IRepository.

   }