Anda sebenarnya benar. DbContext
adalah implementasi dari pola satuan kerja dan IDbSet
merupakan implementasi dari pola repositori.
Repositori saat ini sangat populer dan digunakan secara berlebihan. Semua orang menggunakannya hanya karena ada lusinan artikel tentang membuat repositori untuk kerangka kerja entitas tetapi tidak ada yang benar-benar menggambarkan tantangan terkait dengan keputusan ini.
Alasan utama untuk menggunakan repositori biasanya:
- Sembunyikan EF dari lapisan atas
- Buat kode lebih mudah diuji
Alasan pertama adalah semacam kemurnian arsitektonik dan ide bagus bahwa jika Anda membuat lapisan atas Anda mandiri pada EF, Anda nantinya dapat beralih ke kerangka kerja ketekunan lainnya. Berapa kali Anda melihat hal seperti itu di dunia nyata? Alasan ini membuat bekerja dengan EF jauh lebih sulit karena repositori Anda harus mengekspos banyak fitur tambahan yang membungkus apa yang diizinkan oleh EF secara default.
Pada saat yang sama, membungkus kode EF dapat membuat kode Anda lebih teratur dan mengikuti aturan Separation of concern. Bagi saya ini bisa menjadi satu-satunya keuntungan nyata dari repositori dan unit kerja, tetapi Anda harus memahami bahwa mengikuti aturan ini dengan EF mungkin akan membuat kode Anda lebih mudah dikelola dan lebih mudah dibaca tetapi dalam upaya awal untuk membuat aplikasi Anda akan jauh lebih tinggi dan untuk aplikasi yang lebih kecil ini bisa menjadi kompleksitas yang tidak perlu.
Alasan kedua sebagian benar. Kerugian besar dari EF adalah arsitektur kaku yang hampir tidak bisa dipermainkan jadi jika Anda ingin menguji lapisan atas, Anda harus membungkus EF entah bagaimana untuk memungkinkan mengejek implementasinya. Tetapi ini memiliki banyak konsekuensi lain yang saya jelaskan di sini .
Saya mengikuti blog Ayende . Jika Anda pernah menggunakan NHibernate, Anda mungkin tahu artikelnya. Orang ini baru-baru ini menulis beberapa artikel yang menentang penggunaan repositori dengan NHibernate tetapi NHibernate jauh lebih baik dapat dipermainkan.