Cara melaksanakan corak reka bentuk Repositori di C #

Corak reka bentuk digunakan sebagai penyelesaian untuk masalah berulang dalam aplikasi Anda, dan pola Repositori adalah salah satu corak reka bentuk yang paling banyak digunakan. Ini akan menjadikan objek anda tidak perlu lagi untuk mengetahui bagaimana objek tersebut benar-benar dapat bertahan dalam pangkalan data yang mendasari, iaitu, tanpa perlu bersusah payah tentang bagaimana kegigihan data berlaku di bawahnya. Pengetahuan tentang kegigihan ini, iaitu, logik kegigihan, dikemas di dalam Repositori.

Pada dasarnya, corak reka bentuk Repositori memudahkan penyahgabungan logik perniagaan dan lapisan akses data dalam aplikasi anda dengan yang sebelumnya tidak perlu mempunyai pengetahuan tentang bagaimana kegigihan data sebenarnya berlaku.

Dengan menggunakan corak reka bentuk Repositori, anda dapat menyembunyikan perincian bagaimana data akhirnya disimpan atau diambil ke dan dari penyimpanan data. Penyimpanan data ini dapat berupa pangkalan data, file xml, dll. Anda dapat menerapkan pola reka bentuk ini untuk menyembunyikan bagaimana data yang didedahkan oleh perkhidmatan web atau ORM diakses. Martin Fowler menyatakan: "Menengah antara domain dan lapisan pemetaan data menggunakan antara muka koleksi seperti untuk mengakses objek domain."

Repositori didefinisikan sebagai kumpulan objek domain yang berada dalam memori. MSDN menyatakan: "Gunakan Repositori untuk memisahkan logik yang mengambil data dan memetakannya ke model entiti dari logik perniagaan yang bertindak pada model. Logik perniagaan harus bersifat agnostik dengan jenis data yang merangkumi lapisan sumber data Sebagai contoh, lapisan sumber data boleh berupa pangkalan data, daftar SharePoint, atau layanan Web. "

Menerapkan corak reka bentuk Repositori di C #

Di bahagian ini kita akan meneroka bagaimana kita dapat memprogramkan corak reka bentuk Repositori. Dalam pelaksanaan corak reka bentuk Repositori kami, jenis yang disertakan meliputi yang berikut:

  1. Antara muka IRepository - antara muka ini adalah jenis asas untuk semua jenis Repositori
  2. Kelas repositori - ini adalah kelas Repositori generik
  3. Satu atau lebih kelas Repositori yang melaksanakan antara muka IRepository

Sekarang mari kita menggali beberapa kod. Kelas berikut menunjukkan bagaimana anda dapat menentukan kelas entiti asas dari mana semua kelas entiti anda harus diturunkan.

public abstract class EntityBase

   {

       public Int64 Id { get; protected set; }

   }

Kelas didefinisikan sebagai abstrak dengan hanya satu bidang - bernama "Id". Medan "Id" adalah biasa bagi semua entiti yang biasa anda gunakan, bukan? Inilah rupa antara muka IRepository generik.

public interface IRepository where T : EntityBase

   {

       T GetById(Int64 id);

       void Create(T entity);

       void Delete(T entity);

       void Update(T entity);

   }

Kelas Repositori generik melaksanakan antara muka IRepository dan menerapkan anggota antara muka.

public class Repository : IRepository where T : EntityBase

   {

       public void Create(T entity)

       {

           //Write your logic here to persist the entity

       }

       public void Delete(T entity)

       {

           //Write your logic here to delete an entity

       }

       public T GetById(long id)

       {

           //Write your logic here to retrieve an entity by Id

           throw new NotImplementedException();

       }

       public void Update(T entity)

       {

           //Write your logic here to update an entity

       }

   }

Membuat repositori untuk kelas tertentu

Sekiranya anda ingin membuat Repositori untuk entiti tertentu, anda harus membuat kelas yang menerapkan antara muka IRepository generik. Penyenaraian kod berikut menunjukkan bagaimana ini dapat dicapai.

public class CustomerRepository : IRepository

   {

       //Write your code here to implement each of the methods of the IRepository interface.

   }

Begitu juga, jika anda ingin membuat ProductRepository, anda harus terlebih dahulu membuat produk kelas entiti yang memanjangkan kelas EntityBase.

public class Product: EntityBase

   {

       public string ProductName { get; set; }

       public string Category { get; set; }

   }

Kelas ProductRepository harus melaksanakan antara muka IRepository generik. Begini rupa kelas ProductRepository.

public class ProductRepository : IRepository

   {

       //Write your code here to implement each of the methods of the IRepository interface.

   }