Havuz desenini doğru kullanıyor muyuz?


14

-repositoryVeritabanından veri almak için eklenmiş bir grup ayrı sınıf kullanıyoruz ; her tablo için kendi havuzu.

Örneğin customerrepository, müşterileri almak için her türlü yöntemi olan ve vacancyrepositoryboş pozisyonları almak için her türlü yöntemi olan bir sınıfa sahibiz .

Bu şekilde bir şeyler yapmayla ilgili iki sorum var:

  1. Birden çok tabloyu kapsayan verileri almaya ne dersiniz? Örneğin, henüz bir boşluk oluşturmayan tüm müşterileri gösteren bir ekranım var. Her iki depodan bir customerrepositorykullanım yöntemi vacancyrespositoryveya her iki havuzdan sonuç döndürür mü ve hiyerarşide daha yüksek bir sınıf var mı (a diyelim dataservice) ve her iki havuzdan da sonuçları alır ve 1 sonuçta birleştirir mi?

  2. böyle bir depo ne kadar mantıkla başa çıkabilir?
    Ben sadece aktif kayıtları almak için bir depoda 'burada aktif == true' uygulamak için sorun yok, ya da bu basit mantık hiyerarşide daha yüksek bir sınıf tarafından ele alınmalıdır (diyelim a dataservice)?

Şu anda karşılaştığım örnek şudur:

Bir veya daha fazla soru içeren bir soru listemiz var.
Sorunun ayrı bir tabloda tutulan bir sonucu olabilir.
Bu nedenle, soru listesinin toplam sonucunu almak istediğinizde, questionlisttablodan, soru tablosundan ve tablodan verileri birleştirmeniz gerekir questionstatus.

Şu anda bu tablolar için 3 farklı havuzumuz var.

questionlistrepositoryListe numarası 12 için toplam sonucun ne olduğunu sorarsam, diğer iki depodan veri almak ve dolayısıyla bazı mantıklara sahip olmak gerekir, buna izin verilir mi?

Ya da questionlistdataservicehangi depoların kullanılacağını bilen var mı?

Bir şey daha var: havuzlarımız, IQueryablebir arama hizmetinin sonuçları kolayca birleştirebilmesi için bir sonuç verebilir, ancak durum böyle olmadığında, her üç tablonun tüm içeriğini veri tabanı.


1
Genellikle birden çok tablo erişiminde, baskın tablo, sorgu getirmeden önce bulunması gereken kayıt tablosu tarafından belirlenir. SOL DIŞ BİRLEŞMEDE, bu belirtilen ilk tablo ve SAĞ DIŞ BİRLEŞMEDE ikinci olur.
Neil

Yanıtlar:


15

Depo , etki alanı nesnelerini döndürür ve eşleme katmanlarının üzerine inşa edilir. Çok basit bir etki alanı için etki alanı nesneleri ve veritabanı tabloları çok aynı olabilir.

Deponuz her zaman veri yapınızın tam temsilini döndürüyorsa, aslında Tablo Veri Ağ Geçidi, diğer bir deyişle Veri Erişim Nesnesi (DAO) olabilir.

Örnek: Veritabanınızda kişi ve adres için tablolar var. Uygulama alan adınız kendi başına bir varlık değil, yalnızca Kişinin mülküdür. Bu durumda PersonRepository ve AddressRepository olmaz. Sadece PersonRepository'niz var. Alan adı, alan verilerinin nasıl kalıcı olduğu konusunda endişelenmemelidir. Bu sorumluluklar, deponun arkasında bir katmandadır.

Örneğinizden, aslında DAO'larınız var ve onlara Depolar adını vermişsiniz gibi görünüyor.


Bir havuz oluştururken, bir düzey daha derin bir Tablo veri ağ geçidine de sahip olabilirim ve depomuz aslında TDG'lerdir.
Michel

1
Yapabilirsiniz, ancak maliyeti ve faydaları tartın. DAO'ları ve Depoları kod "katmanlama" ilkesi ile ayrı tutmaya zorbalık etmeyin. Bu durumda en okunabilir olanı yapın. Veri havuzlarınız DAO'larda çok fazla rekombinasyon yapma eğilimindeyse, ayırma ve sonuçta ortaya çıkan soyutlama katmanı yararlı olabilir.
Mihai Danila
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.