Saya memposting pertanyaan di github ke Tim EF. Saya mendapat jawaban yang mengatakan akan lebih baik untuk mengajukan pertanyaan ini di sini sehingga saya akan menyalin dan menempelnya di sini karena kami sebagai tautan sehingga orang lain dapat melihat beberapa balasan di GitHub.
Pertanyaan: Saya sedang melakukan penelitian dan seseorang menunjukkan bahwa Baris 24 dari Kelas DBContext menyatakan
DbContext adalah kombinasi dari Pola Unit Kerja dan Repositori.
Apakah ini berarti bahwa kita tidak perlu lagi mengabstraksi EF ke Repositori lalu menggunakan dan Interface untuk menyuntikkannya ke Pengontrol?
Posting asli di Github: https://github.com/aspnet/EntityFramework/issues/4899
Alasan saya menanyakan hal ini adalah sepertinya saya masuk ke suatu tempat di mana saya menambahkan banyak metode ke repositori seperti GetById, GetByName, GetWithIncludesABC, GetWithIncludes123, dll. Dan sepertinya itu akan mengotori repo di pikiran saya.
sumber
Jawaban:
Jika Anda menambahkan metode ke repositori seperti
Maka Anda lebih baik pindah ke Lapisan Layanan, dan membiarkan Lapisan Layanan menggunakan EF secara langsung. EF telah memiliki fungsionalitas yang mirip dengan metode di atas yang Anda duplikasi tanpa akhir.
Lapisan Layanan memperlihatkan metode Domain Bisnis, dan menggunakan CRUD untuk mengimplementasikannya. Misalnya, Anda mungkin memiliki metode yang disebut
TransferMoney(A, B)
, di mana A dan B sedang memeriksa akun. Ini memungkinkan Anda untuk berbicara dalam bahasa domain bisnis Anda, sementara Layer Layanan menangani CRUD untuk Anda.Satu-satunya alasan kuat yang dapat saya pikirkan di mana Anda mungkin ingin memiliki Lapisan Repositori yang terpisah adalah agar Anda dapat mengejek lapisan repositori itu atau mengganti sumber data yang berbeda untuk tujuan pengujian.
sumber
Robert Harvey mengatakan dalam jawabannya:
Inilah mengapa Pola Repositori masih relevan. Saya juga tidak setuju dengan pernyataan tim Kerangka Kerja Entitas bahwa mereka menerapkan Pola Repositori. Entity Framework masih sangat terikat dengan database. Seluruh tujuan Pola Repositori adalah untuk memisahkan dan mengabstraksi mekanisme ketekunan yang tepat digunakan dalam aplikasi Anda, sehingga tidak ada yang dari implementasi kebocoran akses data di luar lapisan repositori.
Jika Anda menggunakan API kueri EF di luar "repositori," seperti dalam objek layanan, saya akan mengatakan Anda melanggar polanya.
Sekarang, jika itu bukan masalah besar bagi database seperti fungsionalitas untuk bocor ke kode Anda yang lain, dan Anda dapat menjamin bahwa Anda tidak perlu memindahkan beberapa operasi CRUD Anda ke layanan web di masa depan, maka menggunakan EF secara langsung akan menjadi BAIK.
Pada dasarnya, Entity Framework menggantikan objek Gateway dalam Pola Repositori. Saya tidak melihatnya sebagai repositori itu sendiri.
sumber
TransferFunds()
danBuildWidget()
. Repositori hanya berisi metode CRUD.Repositori tampaknya tidak diperlukan - Microsoft dalam contohnya aplikasi microser layanan backend tidak menggunakannya:
https://github.com/Microsoft/BikeSharing360_BackendServices
Contoh aplikasi BikeSharing ditunjukkan pada Connect (); acara (saya pikir ini dapat digunakan sebagai templat untuk proyek API):
https://blogs.msdn.microsoft.com/visualstudio/2016/12/14/connectdemos-2016-bikesharing360-on-github/
sumber