Dapatkah seseorang tolong jelaskan kepada saya Pola Repositori di .NET, langkah demi langkah memberikan contoh atau demo yang sangat sederhana.
Saya tahu ini adalah pertanyaan yang sangat umum tetapi sejauh ini saya belum menemukan jawaban yang memuaskan.
c#
asp.net
design-patterns
repository
Sa Patil
sumber
sumber
Jawaban:
Sebagai ringkasan, saya akan menjelaskan dampak yang lebih luas dari pola repositori. Ini memungkinkan semua kode Anda untuk menggunakan objek tanpa harus tahu bagaimana objek tersebut bertahan. Semua pengetahuan tentang kegigihan, termasuk pemetaan dari tabel ke objek, terkandung dengan aman di repositori.
Sangat sering, Anda akan menemukan query SQL yang tersebar di basis kode dan ketika Anda datang untuk menambahkan kolom ke tabel Anda harus mencari file kode untuk mencoba dan menemukan penggunaan tabel. Dampak dari perubahan itu sangat luas.
Dengan pola repositori, Anda hanya perlu mengubah satu objek dan satu repositori. Dampaknya sangat kecil.
Mungkin akan membantu untuk memikirkan mengapa Anda akan menggunakan pola repositori. Berikut beberapa alasannya:
Anda memiliki satu tempat untuk membuat perubahan pada akses data Anda
Anda memiliki satu tempat yang bertanggung jawab untuk satu set tabel (biasanya)
Sangat mudah untuk mengganti repositori dengan implementasi palsu untuk pengujian - jadi Anda tidak perlu memiliki database yang tersedia untuk pengujian unit Anda
Ada manfaat lain juga, misalnya, jika Anda menggunakan MySQL dan ingin beralih ke SQL Server - tetapi saya belum pernah benar-benar melihat ini dalam praktek!
sumber
IConnection
,ICommand
, dll bagian yang menyembunyikan jenis database. Repositori biasanya lebih berfokus pada domain.Ini adalah contoh yang bagus: Contoh Pola Repositori di C #
Pada dasarnya, repositori menyembunyikan rincian tentang bagaimana tepatnya data diambil / dipertahankan dari / ke database. Di bawah selimut:
sumber
IDbContext
) atau di nhibernate (ISession
) secara langsung. Sebuah repositori yang diimplementasikan dengan benar menghilangkan SEMUA informasi spesifik persistensi (seperti cara kerja penyedia Linq To Sql saat ini). yaitu tidak pernah mengeksposIQueryable
.IQueryable
bukan informasi spesifik kegigihan. Dukungan dari IQueryable dapat sesederhana array kode keras, atau bisa dari file XML, layanan web, database, file datar, dll. Saya tidak akan merekomendasikan repositori yang tidak mengekspos IQueryable seperti biasa menyebabkan akses data yang lambat dalam setiap kasus, di mana mengekspos IQueryable akan memungkinkan beberapa contoh untuk melakukan peningkatan kinerja jika berlaku jika toko kegigihan memiliki kemampuan itu. Selain itu, menyembunyikan DbContext memungkinkan Anda untuk beralih ke ORM yang berbeda jika perlu (atau tidak ORM!)IN
klausa sql tanpa mengetahui bagaimana penyedia LinqToSql tertentu melakukannya.