Depo ve hizmet arasındaki fark?


105

Depo ile hizmet arasındaki fark nedir? Anlayamıyorum.

Tipik olarak linq to sql ile bir veri erişim katmanı aracılığıyla veri erişiminden bahsediyorum.

Basit CRUD yöntemlerine sahip depoları ve daha işletmeye özgü yöntemlere sahip hizmetleri çok sık görüyorum.

Bu blog gönderisini örnek olarak alabiliriz . En alttaki arayüzlere (resimler) bakarsanız, iki deposu ve iki servisi vardır. Neyi nereye koyacağını nasıl bilebilir?

Dediğim gibi, depolar daha çok CRUD benzeri işlemler ve Hizmetler için daha fazla iş odaklı görünüyor.

Teşekkürler


Anlatabilir misin? Hangi bağlamda? Çoğu kelime gibi, bu kelimelerin kullanıldığı bağlam, anlamın tanımlanmasına yardımcı olur.
David

2
Not: Burada web hizmetlerinden veya başka bir şeyden bahsetmiyorum. Bir veri katmanı aracılığıyla veri erişiminden bahsediyorum.
alexn

Yanıtlar:


78

Bir Depo, temelde verilere / nesnelere erişim sağlamak için Koleksiyon stili semantiğini (Ekle, Güncelle, Kaldır) kullanan bir kalıcılık cephesidir . Bu, verileri / nesneleri uygulamanın geri kalanından ayırma şeklinizi ayırmanın bir yoludur.

Bir hizmet, uygulamanızı çalıştırmak için gerekli olan koordinasyonu veya diğer "hizmetleri" sağlar. Bunlar, Hizmetler tipik olarak kalıcılıktan verilere nasıl erişileceğini bilmedikleri için çok farklıdır ve havuzlar genellikle yalnızca sahip olabileceğiniz herhangi bir hizmet için verilere / nesnelere erişir.


19
Deponun, veri erişimi için kullanılan bir hizmet türü olduğunu söyleyebilirim.
Ian Ringrose

5
Bu, yazdığımız hemen hemen her şeyin bir düzeyde bir "hizmet" olması anlamında iyi bir tanım, ancak bir havuzun bir nesneler koleksiyonu olması gerektiği yönündeki temel amacı yitiriyor .
jlembke

4
Eğer birim testi yaparsanız, veri tabanından kaçınmak için gereken alay işlemini en aza indirmek için depoları minimum soyutlama olarak düşünmek daha açık olabilir.
Henry Heikkinen

repository= collectionkimden backbone.jsveya repository= servicekimden angular?
slideshowp2

160

Depo, verilerin depolandığı yerdir. Hizmet, verileri manipüle eden şeydir.

Gerçek dünyadaki bir durum karşılaştırmasında, paranız bir bankadaki bir kasada saklanıyorsa, kasa depodur. Para yatıran, çeken vb. Veznedar hizmettir.


7
Bu cevap için teşekkürler! Basit ve öz.
alexn

1
yukarıdaki yoruma katılıyorum! Gerçek dünya açıklamasını da sevin!
Kleigh

6
mm. yani banka kasadan kurtulmaya ve parayı matrislerin altına koymaya karar verirse, veznedar, depo katmanındaki değişikliği bilmenize gerek kalmadan, daha önce olduğu gibi sizinle yine de etkileşime girecektir.
Dennis

1
Müşterinin bu uygulama hakkında bilgi sahibi olmak isteyeceğinden şüpheleniyorum, @Dennis
Chucky

1
@Dennis Evet. Bu aslında depo modelini kullanmanın temel avantajlarından biridir. Hizmette herhangi bir değişiklik yapmadan bilgi havuzu arayüzlerinin gerçek uygulamasını değiştirebilmelisiniz. Bunun, birim testi ve kodunuzu gevşek bir şekilde birleştirmek için büyük faydaları vardır.
Warren Parks

12

Genel anlamda bir ilk deneme olarak söyleyebilirim (eğer varsa daha fazla bağlam verene kadar):

  • bir depo daha sonra kullanılmak üzere, bazı küresel nesneler koyun nerede olduğunu.
  • bir hizmet , açık hale getirilmiş (ve ideal olarak Sunum katmanından ve veritabanı katmanından?) ayrılmış bir iş mantığı kodudur.

3
O zaman aşağıdakileri yapmam uygun olur mu: Depomda tüm karmaşık veritabanı çağrılarım var, sonra hizmetimde depoyu bağımlılık olarak enjekte ediyorum. Şimdi kolayca test edilebilir bir kodum var ve endişelerimi ayırdım, çünkü servisim DB çağrılarının nasıl yapıldığını bilmiyor, sadece bunu yapan havuzun işlevlerini çağırıyor. Bu nedenle iş mantığı ve veri erişimi birbirinden ayrılmıştır. Bu uygulanabilir bir yaklaşım olur mu?
darophi

1
Tüm mantık hizmetlerde yazılırsa, denetleyici yalnızca hizmeti arayacak mı?
Islomkhodja Hamidullakhodjaev
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.