{"id":3083,"date":"2016-02-17T02:05:50","date_gmt":"2016-02-17T02:05:50","guid":{"rendered":"http:\/\/blog.jaringanhosting.com\/?p=3083"},"modified":"2016-02-17T02:07:20","modified_gmt":"2016-02-17T02:07:20","slug":"membuat-repository-pattern-di-c","status":"publish","type":"post","link":"https:\/\/blog.jaringanhosting.com\/index.php\/membuat-repository-pattern-di-c\/","title":{"rendered":"Membuat  Repository Pattern di c#"},"content":{"rendered":"<p>Repository Pattern memisahkan logika akses data dan peta ke entitas dalam logika bisnis. Kerjanya adalah untuk mengurangi kompleksitas &amp; 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.<\/p>\n<p><img loading=\"lazy\" class=\"alignnone\" src=\"http:\/\/i2.wp.com\/blog.falafel.com\/wp-content\/uploads\/2014\/10\/generticrepo2.png\" alt=\"\" width=\"746\" height=\"156\" \/><\/p>\n<p>Ada berbagai keuntungan dari Pola Repository termasuk:<\/p>\n<ul>\n<li>logika bisnis dapat diuji tanpa perlu sumber eksternal<\/li>\n<li>akses database logika dapat diuji secara terpisah<\/li>\n<li>Tidak ada duplikasi kode<\/li>\n<li>Strategi caching untuk sumber data dapat terpusat<\/li>\n<li>Domain pembangunan didorong lebih mudah<\/li>\n<li>Sentralisasi logika akses data, sehingga kode pemeliharaan lebih mudah<\/li>\n<\/ul>\n<p><a href=\"http:\/\/jaringanhosting.com\/\" target=\"_blank\"><img loading=\"lazy\" class=\"aligncenter\" src=\"http:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2016\/02\/banner-affiliate-jarhost-468x60.gif\" alt=\"\" width=\"468\" height=\"60\" \/><\/a><\/p>\n<p>Repositori Pattern\u00a0dapat diimplementasikan dengan menggunakan dua cara.<br \/>\n<strong>Non-Generic<\/strong><br \/>\nDalam repositori non-generik setiap entitas memiliki kelas repositori nya. Mari kita ambil contoh jika mereka dua kelas entitas seperti Pelanggan &amp; Karyawan maka kita harus membuat dua repositori yang berbeda.<br \/>\n<strong>Umum<\/strong><br \/>\nSebuah kelas repositori generik digunakan untuk semua operasi entitas seperti insert, update &amp; hapus dengan kelas tunggal.<\/p>\n<p>Langkah 1 membuat\u00a0\u00a0interface IGenericRepository<\/p>\n<pre style=\"color: #000000\"><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>\r\n   <span style=\"color: red\">{<\/span>\r\n \r\n       IQueryable <span style=\"font-weight: bold;color: #0066bb\">GetAll<\/span>();\r\n       IQueryable <span style=\"font-weight: bold;color: #0066bb\">FindBy<\/span>(Expression&lt;Func&lt;T, <span style=\"font-weight: bold;color: #333399\">bool<\/span>&gt;&gt; predicate);\r\n       <span style=\"font-weight: bold;color: #008800\">void<\/span> <span style=\"font-weight: bold;color: #0066bb\">Add<\/span>(T entity);\r\n       <span style=\"font-weight: bold;color: #008800\">void<\/span> <span style=\"font-weight: bold;color: #0066bb\">Delete<\/span>(T entity);\r\n       <span style=\"font-weight: bold;color: #008800\">void<\/span> <span style=\"font-weight: bold;color: #0066bb\">Edit<\/span>(T entity);\r\n       <span style=\"font-weight: bold;color: #008800\">void<\/span> <span style=\"font-weight: bold;color: #0066bb\">Save<\/span>();\r\n   }<\/pre>\n<p>Langkah 2 Menambahkan\u00a0<span style=\"color: #000000\">class<\/span><b style=\"color: #000000\">\u00a0GenericRepository\u00a0<\/b><\/p>\n<pre style=\"color: #000000\"><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>&lt;C, T&gt; :\r\n   IGenericRepository&lt;T&gt;\r\n      <span style=\"font-weight: bold;color: #008800\">where<\/span> T : <span style=\"font-weight: bold;color: #008800\">class<\/span>\r\n      <span style=\"font-weight: bold;color: #bb0066\">where<\/span> C : DbContext, <span style=\"font-weight: bold;color: #008800\">new<\/span>()\r\n  {\r\n \r\n      <span style=\"font-weight: bold;color: #008800\">private<\/span> C _entities = <span style=\"font-weight: bold;color: #008800\">new<\/span> C();\r\n      <span style=\"font-weight: bold;color: #008800\">public<\/span> C Context\r\n      {\r\n \r\n          <span style=\"font-weight: bold;color: #008800\">get<\/span> { <span style=\"font-weight: bold;color: #008800\">return<\/span> _entities; }\r\n          <span style=\"font-weight: bold;color: #008800\">set<\/span> { _entities = <span style=\"font-weight: bold;color: #008800\">value<\/span>; }\r\n      }\r\n \r\n      <span style=\"font-weight: bold;color: #008800\">public<\/span> <span style=\"font-weight: bold;color: #008800\">virtual<\/span> IQueryable&lt;T&gt; GetAll()\r\n      {\r\n \r\n           IQueryable&lt;T&gt; query = _entities.Set&lt;T&gt;();\r\n          <span style=\"font-weight: bold;color: #008800\">return<\/span> query;\r\n      }\r\n \r\n      <span style=\"font-weight: bold;color: #008800\">public<\/span> IQueryable&lt;T&gt; FindBy(System.Linq.Expressions.Expression&lt;Func&lt;T, <span style=\"font-weight: bold;color: #333399\">bool<\/span>&gt;&gt; predicate)\r\n      {\r\n \r\n          IQueryable&lt;T&gt; query = _entities.Set&lt;T&gt;().Where(predicate);\r\n          <span style=\"font-weight: bold;color: #008800\">return<\/span> query;\r\n      }\r\n \r\n      <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)\r\n      {\r\n          _entities.Set&lt;T&gt;().Add(entity);\r\n      }\r\n \r\n      <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)\r\n      {\r\n          _entities.Set&lt;T&gt;().Remove(entity);\r\n      }\r\n \r\n      <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)\r\n      {\r\n         _entities.Entry(entity).State = EntityState.Modified;\r\n      }\r\n \r\n      <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>()\r\n      {\r\n          _entities.SaveChanges();\r\n      }\r\n  }<\/pre>\n<p>Misalnya bagaimana memanggil generic pattern<\/p>\n<pre style=\"color: #000000\"><span style=\"font-weight: bold;color: #008800\">public<\/span> <span style=\"font-weight: bold;color: #008800\">static<\/span> List&lt;DesignationEntity&gt; GetDesignation(<span style=\"font-weight: bold;color: #333399\">int<\/span> DesignationId)\r\n       {\r\n           List rType = <span style=\"font-weight: bold;color: #008800\">null<\/span>;\r\n           IGenericRepository&lt;Designation&gt; _repository = <span style=\"font-weight: bold;color: #008800\">new<\/span> GenericRepository&lt;HRMEntities, Designation&gt;();\r\n           <span style=\"font-weight: bold;color: #008800\">try<\/span>\r\n           {\r\n               rType = _repository.FindBy(m =&gt; m.DesignationId == DesignationId || DesignationId == <span style=\"font-weight: bold;color: #6600ee\">0<\/span>).Select(m =&gt; <span style=\"font-weight: bold;color: #008800\">new<\/span> DesignationEntity\r\n               {\r\n                   DesignationId = m.DesignationId,\r\n                   DesignationName = m.DesignationName\r\n               }).ToList();\r\n           }\r\n           <span style=\"font-weight: bold;color: #008800\">catch<\/span>\r\n           {\r\n               <span style=\"font-weight: bold;color: #008800\">throw<\/span>;\r\n           }\r\n           <span style=\"font-weight: bold;color: #008800\">return<\/span> rType;\r\n       }<\/pre>\n<p>Selesai.<\/p>\n<hr \/>\n<p>&nbsp;<\/p>\n<h3><a href=\"http:\/\/www.jaringanhosting.com\" target=\"_blank\"><img loading=\"lazy\" class=\"size-full wp-image-3063 alignleft\" src=\"http:\/\/blog.jaringanhosting.com\/wp-content\/uploads\/2016\/02\/jarhost-banner-new1.jpg\" alt=\"jarhost-banner-new1\" width=\"300\" height=\"250\" \/><\/a>Alasan Memilih Kami Sebagai Partner ASP.NET Hosting Anda!<\/h3>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-170\" src=\"https:\/\/windowshostingterbaik.files.wordpress.com\/2016\/01\/centang.png\" alt=\"centang\" width=\"20\" height=\"20\" \/>\u00a0Server dan Network yang Handal<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-170\" src=\"https:\/\/windowshostingterbaik.files.wordpress.com\/2016\/01\/centang.png\" alt=\"centang\" width=\"20\" height=\"20\" \/>\u00a0Control Panel yang User-Friendly<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-170\" src=\"https:\/\/windowshostingterbaik.files.wordpress.com\/2016\/01\/centang.png\" alt=\"centang\" width=\"20\" height=\"20\" \/>\u00a0Pengalaman di bidang ASP.NET hosting, terutama \u00a0Windows Hosting selama bertahun-tahun<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-170\" src=\"https:\/\/windowshostingterbaik.files.wordpress.com\/2016\/01\/centang.png\" alt=\"centang\" width=\"20\" height=\"20\" \/>\u00a0Teknologi ASP.NET Hosting paling mutakhir<\/p>\n<p><img loading=\"lazy\" class=\"alignnone wp-image-170\" src=\"https:\/\/windowshostingterbaik.files.wordpress.com\/2016\/01\/centang.png\" alt=\"centang\" width=\"20\" height=\"20\" \/>\u00a0Standar security yang amat tinggi<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"http:\/\/www.jaringanhosting.com\" target=\"_blank\">JaringanHosting.com<\/a> 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.<\/p>\n<h4><\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/jaringanhosting.com\/\" target=\"_blank\"><img loading=\"lazy\" class=\"alignnone\" src=\"http:\/\/www.speedessays.com\/wp-content\/uploads\/2015\/11\/order_now_button.png\" alt=\"\" width=\"218\" height=\"88\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Repository Pattern memisahkan logika akses data dan peta ke entitas dalam logika bisnis. Kerjanya adalah untuk mengurangi kompleksitas &amp; meningkatkan kode usabilitas. Hal ini memungkinkan Anda untuk menulis unit test bukan tes integrasi. Ini menyembunyikan rincian akses data dari logika<\/p>\n","protected":false},"author":10337,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,630],"tags":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts\/3083"}],"collection":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/users\/10337"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/comments?post=3083"}],"version-history":[{"count":0,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/posts\/3083\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/media?parent=3083"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/categories?post=3083"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jaringanhosting.com\/index.php\/wp-json\/wp\/v2\/tags?post=3083"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}