Perbedaan antara Repositori dan Layanan?

106

Apa perbedaan antara repositori dan layanan? Sepertinya saya tidak memahaminya.

Saya berbicara tentang akses data melalui lapisan akses data, biasanya dengan linq ke sql.

Sangat sering saya melihat repositori dengan metode CRUD sederhana, dan layanan dengan metode bisnis yang lebih spesifik.

Kami dapat mengambil posting blog ini sebagai contoh. Jika Anda melihat antarmuka di bagian bawah (gambar), ia memiliki dua repositori dan dua layanan. Bagaimana seseorang tahu apa yang harus diletakkan di mana?

Seperti yang saya katakan, repositori tampaknya lebih untuk operasi mirip CRUD dan Layanan lebih berorientasi bisnis.

Terima kasih

alexn
sumber
Bisakah anda mengklarifikasi? Dalam konteks apa? Seperti kebanyakan kata, konteks kata-kata ini digunakan membantu untuk menentukan artinya.
David
2
Catatan: Saya tidak sedang membicarakan tentang layanan web atau sesuatu di sini. Saya berbicara tentang akses data melalui lapisan data.
alexn

Jawaban:

78

Repositori pada dasarnya adalah fasad untuk ketekunan yang menggunakan semantik gaya Koleksi (Tambah, Perbarui, Hapus) untuk menyediakan akses ke data / objek. Ini adalah cara memisahkan cara Anda menyimpan data / objek dari aplikasi lainnya.

Sebuah layanan menyediakan koordinasi atau "layanan" lain yang diperlukan untuk mengoperasikan aplikasi Anda. Mereka sangat berbeda karena Layanan biasanya tidak tahu cara mengakses data dari persistensi, dan repositori biasanya hanya mengakses data / objek untuk layanan apa pun yang mungkin Anda miliki.

jlembke
sumber
19
Saya akan mengatakan bahwa Repositori adalah jenis layanan yang digunakan untuk akses data.
Ian Ringrose
5
Itu adalah definisi yang bagus dalam arti bahwa hampir semua yang kita tulis adalah "layanan" pada tingkat tertentu, tetapi maksud dasarnya bahwa repositori adalah kumpulan objek yang hilang .
jlembke
4
Jika Anda menguji unit grok, mungkin lebih jelas untuk menganggap repositori sebagai abstraksi minimal untuk meminimalkan pemalsuan yang diperlukan untuk menghindari database.
Henry Heikkinen
repository= collectiondari backbone.jsatau repository= servicedari angular?
slideshowp2
160

Repositori adalah tempat penyimpanan data. Layanan inilah yang memanipulasi data.

Dalam perbandingan situasi dunia nyata, jika uang Anda disimpan dalam lemari besi di bank, lemari besi itu adalah tempat penyimpanannya. Teller yang menyetorkan, menarik, dll adalah layanan.

David
sumber
7
Terima kasih atas jawaban ini! Sederhana dan ringkas.
alexn
1
setuju dengan komentar di atas! Cintai penjelasan dunia nyata juga!
Kleigh
6
mm. jadi jika bank memutuskan untuk menyingkirkan vault tersebut, dan menaruh uang di bawah matrasses, teller akan tetap berinteraksi dengan Anda seperti sebelumnya, tanpa Anda harus mengetahui perubahan pada lapisan repositori.
Dennis
1
Saya menduga pelanggan ingin mengetahui tentang penerapan itu, @Dennis
Chucky
1
@Denny. Ini sebenarnya adalah salah satu keuntungan utama menggunakan pola repositori. Anda harus dapat mengubah implementasi aktual dari antarmuka repositori tanpa mengubah apa pun di layanan. Ini memiliki manfaat besar untuk pengujian unit dan membuat kode Anda digabungkan secara longgar.
Warren Parks
12

Saya akan mengatakan sebagai percobaan pertama, dalam arti umum (sampai Anda memberikan lebih banyak konteks jika Anda memilikinya):

  • sebuah repositori adalah di mana Anda menempatkan beberapa objek global, yang akan digunakan nanti.
  • sebuah layanan adalah kode logika bisnis, dibuat eksplisit (dan idealnya dipisahkan dari lapisan Presentasi, dan lapisan database?)
KLE
sumber
3
Apakah tidak apa-apa untuk melakukan hal berikut ini: Repositori saya memiliki semua panggilan database kompleks saya, kemudian dalam layanan saya, saya menyuntikkan repositori sebagai ketergantungan. Sekarang saya memiliki kode yang dapat diuji dengan mudah dan memisahkan kekhawatiran saya, karena layanan saya tidak tahu bagaimana panggilan DB dilakukan, tetapi hanya memanggil fungsi repositori yang melakukannya. Oleh karena itu logika bisnis dan akses data dipisahkan. Apakah ini pendekatan yang layak?
darophi
1
Jika semua logika ditulis dalam layanan, maka pengontrol hanya akan memanggil layanan?
Islomkhodja Hamidullakhodjaev