Havuz Kalıbı ve DAL Nesnesi Oluşturma


9

Bildiğim kadarıyla IRepositoryiçermelidir CRUD. Sonra bu miras IRepositorygibi diğer Interfaces IProductve uygulamak IProductbeton sınıfı ProductRepositorygibi yöntemlerle, GetAllProducts(), Top5Products().

Aynı şeyi n katmanlı mimari ile de yapabiliriz. Gibi, Oluşturma DAL Class Libraryve içinde , Productgibi yöntemlerle bir sınıf tanımlar .GetAllProducts()Top5Products()

İkisinde de DAL.Productve Repo.ProductRepositorybiz başlatmak sınıfların DB Contextarasında Entity Frameworkve ilgili verileri sorgulamak.

Arama iki benzer Repo.ProductRepositoryya da DAL.ProductyöntemleriBLL

Bu benzerlikler göz önüne alındığında, sorum Repos'un faydası nedir? Birlikte n-katmanlı mimariler kullanarak çok kolaylıkla aynısını yapabilirsiniz ( Controller, BLL Class Library, DAL Class Library).


@Neil Ben OP OP DAL aşina olduğunu düşünüyorum ve havuz aynı şeyleri yapmak için sadece diğer arayüzler olup olmadığını soruyor ya da daha fazla
Christophe

@ Christophe tam olarak, bu konuda kafam karıştı. Aynı şeyi DAL'de yapabilseydik, neden repo desenini kullanasınız?
M. Arslan

Yanıtlar:


7

Benim anlayışım:

  • DAL (Veri Erişim Katmanı) , yazılımınızda kalıcılık teknolojiniz ile uygulama mantığınız arasında bulunan bir katmanı ifade eder . Amacı, veri erişimi ile ilgili endişeleri diğer uygulama endişelerinizden ayrı tutmaktır. Bu bir olan genel bir kavram.

  • Depo , DDD'den (Etki Alanına Dayalı Tasarım) bir kavramdır.

DDD'de bir Veri Havuzu , belirli bir Toplam için tüm veri erişimi endişelerini kapsüllemekten sorumludur . Bu, Agrega'nın okuma ve yazma işlemleri sırasında tutarlılığı sağlama sorumluluğuyla birlikte gelir. Ve Agrega ilgili oluşumlar (örneğin, bir gruptur Product, Storevs.).

Yani, bir Repository's.Benim özellikle onun Agregaların kalıcılık ve tutarlılık kaygıların farkında. Sizin genel DAL büyük olasılıkla oluşacak spesifik Arşivleri

TL; DR;

  • DAL , Veri Erişimi endişelerini ortadan kaldırmak için kullanılan genel bir terimdir.
  • Depo , DDD'den benzer, ancak daha spesifik bir kavramdır.
  • DAL'niz büyük olasılıkla birkaç Depodan oluşacaktır.

4
Depo ayrıca, veritabanı kayıtlarını yansıtan nesnelerin bellek içi koleksiyonuna atıfta bulunmak için DDD'nin dışında daha genel olarak kullanılan bir terimdir . Bu bağlamda, oturur arasındaki DAL ve İş Mantığı Katmanı. Bkz. Martinfowler.com/eaaCatalog/repository.html
Robert Harvey

Neden herkes her şey için DDD kredisi vermeye çalışıyor ?!
TheCatWhisperer

1
Bugün öğrendim: P
MetaFight

2

İki farklı ve tamamlayıcı kavramı karşılaştırıyorsunuz:

  • Veri Erişim Katmanı verilerine soyut erişim niyetinde mimari bir katmandır. Erişimin nasıl soyutlanacağını söylemez.
  • Depo DAL (sonunda kalıplarının listesini görmek ait spesifik bir kalıptır bu bağlantı ). Verilere belirli bir erişimin nasıl soyutlanacağını tam olarak anlatır: veri deposuna arayüz gibi bir koleksiyon sunarak.

Örneğinizdeki DAL

İlginç bir şekilde, sınıf kitaplığı örneğinizde DAL.Productbir havuz gibi görünüyor. Bu nedenle, gerçekten bir fark görmemeniz normaldir: uygulama açısından aynıdır (bu özel durumda).
Ama buna gerek yok; Bir DAL farklı şekilde uygulanabilir, örneğin:

Depo için farklı olan nedir

Havuz kavramı, mimari modelden ve uygulamadan bağımsızdır. Katmanları veya veritabanını düşünmenize gerek yoktur. Etki alanınızı tasarlarken bilmeniz gereken tek şey, nesnelerinizin özel bir koleksiyon cadı deposu içinde kalıcılık sunan olmasıdır. Bu, onları etki alanı tasarımı için çok uygun hale getirir ve neden Etki Alanı Odaklı Tasarımın önemli bir öğesi olduklarını açıklar .

DDD'de depoların saygı duymak için daha fazla kuralı vardır: agregalara (bağımsız bir varlık veya toplam köke bağımlı bir grup ilişkili varlık) erişim sağlarlar ve toplamda tek bir havuz vardır.

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.