Repository Pattern Bagian #2

Posted by Kamarudin • 1 minute read • Comments

Melanjutkan pembahasan Repository Pattern, kali ini kita akan membahas salah satu manfaat menggunakan Repository Pattern. Selain digunakan untuk menerapkan konsep separation of concern atau pemisahan kode program berdasarkan fungsinya. Pola/pattern ini juga akan mempermudah kita untuk mengganti implementasi class secara cepat karena dari sisi client/layer presentation sudah tidak tergantung dengan layer data access, sehingga jika terjadi perubahan pada metode akses data di repsository, layer presentation sama sekali tidak perlu diubah ataupun jika terjadi perubahan hanya sedikit kode yang perlu kita ubah. Desain struktur seperti ini disebut lousley coupled.

Repository mengenkapsulasi method-method untuk manipulasi dan query data dalam sebuah class yang berhubungan dengan class model/business entity. Sebuah repository biasanya memiliki method CRUD (Create, Read, Update, Delete) standar seperti : Save, Update, Delete, dan GetAll seperti yang didefenisikan di interface IBaseRepository generic/umum sebagai berikut :

Kemudian kita definisikan interface yang lebih spesifik untuk masing-masing class repository yang mewarisi interface generic IBaseRepository. Contoh interface ICategoryRepository dan IProductRepository.

Sebagai contoh kita akan membuat aplikasi menggunakan database Northwind, dengan menggunakan Entity Framework sebagai engine untuk Data Access Layernya. Karena di atas kita sudah mendefinisikan interface ICategoryRepository, kita tinggal membuat class implementasinya misal dengan nama class CategoryRepository.

Nah dari sisi client class-class Repository diakses lewat interfacenya. Pemrograman melalui interface ini menjadikan client tidak tergantung dengan layer data access, sehingga jika terjadi perubahan pada metode akses data di repsository, layer presentation sama sekali tidak perlu diubah ataupun jika terjadi perubahan hanya sedikit kode yang perlu kita ubah. Desain struktur seperti ini disebut lousley coupled.

Pada gambar di atas deklarsi objek categoryRepository tidak langsung menggunakan tipe class repository (CategoryRepository) tetapi menggunakan interface ICategoryRepository (konsep program to interfaces), tujuannya adalah untuk mempermudah kita mengganti implementasi dari class repositorynya.

Jadi kalo seandainya terjadi perubahan implementasi dari class repositorynya, kita tinggal buat class repository yang baru, kemudian mengganti implementasi classnya di sisi client. Contoh kasus class CategoryRepository di atas menggunakan Entity Framework sebagai engine untuk Data Access Layernya, karena alasan performance akhirnya kita memutuskan untuk mengganti Entity Framework dengan ORM lain yang lebih ringan misal Dapper .NET. Untuk melakukan ini kita tinggal buat class repository yang baru, misal dengan nama CategoryRepositoryDapper kemudian mengganti implementasi classnya di sisi client. Mudah bukan :blush:

Selamat MENCOBA :blush:

Comments