Repository Pattern memisahkan logika akses data dan peta ke entitas dalam logika bisnis. Kerjanya adalah untuk mengurangi kompleksitas & meningkatkan kode usabilitas. Hal ini memungkinkan Anda untuk menulis unit test bukan tes integrasi. Ini menyembunyikan rincian akses data dari logika bisnis. Dengan kata lain, logika bisnis dapat mengakses data objek tanpa memiliki pengetahuan tentang arsitektur akses data yang mendasari. Misalnya, dalam pola Repository, logika bisnis tidak menyadari apakah aplikasi menggunakan LINQ untuk SQL atau ADO.NET Entity Model ORM. Di masa depan, sumber data yang mendasari atau arsitektur dapat diubah tanpa mempengaruhi logika bisnis.
Ada berbagai keuntungan dari Pola Repository termasuk:
- logika bisnis dapat diuji tanpa perlu sumber eksternal
- akses database logika dapat diuji secara terpisah
- Tidak ada duplikasi kode
- Strategi caching untuk sumber data dapat terpusat
- Domain pembangunan didorong lebih mudah
- Sentralisasi logika akses data, sehingga kode pemeliharaan lebih mudah
Repositori Pattern dapat diimplementasikan dengan menggunakan dua cara.
Non-Generic
Dalam repositori non-generik setiap entitas memiliki kelas repositori nya. Mari kita ambil contoh jika mereka dua kelas entitas seperti Pelanggan & Karyawan maka kita harus membuat dua repositori yang berbeda.
Umum
Sebuah kelas repositori generik digunakan untuk semua operasi entitas seperti insert, update & hapus dengan kelas tunggal.
Langkah 1 membuat interface IGenericRepository
1 2 3 4 5 6 7 8 9 10 |
<span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">interface</span> IGenericRepository <span style="font-weight: bold;color: #008800">where</span> T : <span style="font-weight: bold;color: #008800">class</span> <span style="color: red">{</span> IQueryable <span style="font-weight: bold;color: #0066bb">GetAll</span>(); IQueryable <span style="font-weight: bold;color: #0066bb">FindBy</span>(Expression<Func<T, <span style="font-weight: bold;color: #333399">bool</span>>> predicate); <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Add</span>(T entity); <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Delete</span>(T entity); <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Edit</span>(T entity); <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Save</span>(); } |
Langkah 2 Menambahkan class GenericRepository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">class</span> <span style="font-weight: bold;color: #bb0066">GenericRepository</span><C, T> : IGenericRepository<T> <span style="font-weight: bold;color: #008800">where</span> T : <span style="font-weight: bold;color: #008800">class</span> <span style="font-weight: bold;color: #bb0066">where</span> C : DbContext, <span style="font-weight: bold;color: #008800">new</span>() { <span style="font-weight: bold;color: #008800">private</span> C _entities = <span style="font-weight: bold;color: #008800">new</span> C(); <span style="font-weight: bold;color: #008800">public</span> C Context { <span style="font-weight: bold;color: #008800">get</span> { <span style="font-weight: bold;color: #008800">return</span> _entities; } <span style="font-weight: bold;color: #008800">set</span> { _entities = <span style="font-weight: bold;color: #008800">value</span>; } } <span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">virtual</span> IQueryable<T> GetAll() { IQueryable<T> query = _entities.Set<T>(); <span style="font-weight: bold;color: #008800">return</span> query; } <span style="font-weight: bold;color: #008800">public</span> IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, <span style="font-weight: bold;color: #333399">bool</span>>> predicate) { IQueryable<T> query = _entities.Set<T>().Where(predicate); <span style="font-weight: bold;color: #008800">return</span> query; } <span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">virtual</span> <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Add</span>(T entity) { _entities.Set<T>().Add(entity); } <span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">virtual</span> <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Delete</span>(T entity) { _entities.Set<T>().Remove(entity); } <span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">virtual</span> <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Edit</span>(T entity) { _entities.Entry(entity).State = EntityState.Modified; } <span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">virtual</span> <span style="font-weight: bold;color: #008800">void</span> <span style="font-weight: bold;color: #0066bb">Save</span>() { _entities.SaveChanges(); } } |
Misalnya bagaimana memanggil generic pattern
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span style="font-weight: bold;color: #008800">public</span> <span style="font-weight: bold;color: #008800">static</span> List<DesignationEntity> GetDesignation(<span style="font-weight: bold;color: #333399">int</span> DesignationId) { List rType = <span style="font-weight: bold;color: #008800">null</span>; IGenericRepository<Designation> _repository = <span style="font-weight: bold;color: #008800">new</span> GenericRepository<HRMEntities, Designation>(); <span style="font-weight: bold;color: #008800">try</span> { rType = _repository.FindBy(m => m.DesignationId == DesignationId || DesignationId == <span style="font-weight: bold;color: #6600ee">0</span>).Select(m => <span style="font-weight: bold;color: #008800">new</span> DesignationEntity { DesignationId = m.DesignationId, DesignationName = m.DesignationName }).ToList(); } <span style="font-weight: bold;color: #008800">catch</span> { <span style="font-weight: bold;color: #008800">throw</span>; } <span style="font-weight: bold;color: #008800">return</span> rType; } |
Selesai.
Alasan Memilih Kami Sebagai Partner ASP.NET Hosting Anda!
Server dan Network yang Handal
Control Panel yang User-Friendly
Pengalaman di bidang ASP.NET hosting, terutama Windows Hosting selama bertahun-tahun
Teknologi ASP.NET Hosting paling mutakhir
Standar security yang amat tinggi
JaringanHosting.com adalah provider ASP.NET dan Windows hosting No #1 di Indonesia. Web Hosting kami mendapatkan Microsoft Spotlight Award dari Microsoft dan ini berdasarkan pada beberapa persyaratan utama, yaitu: WebMatrix, WebDeploy, Visual Studio 2015, ASP.NET 4.6, ASP.NET MVC 6, Silverlight 5 and Visual Studio Lightswitch.