Havuz kavramına dayanan Bahar Veri Çerçevesinde iyi bir örnek görebilirsiniz .
Burada depoların yalnızca veri deposuyla ilgilendiğini ve nadiren herhangi bir iş mantığı içerdiğini göreceksiniz (bu hizmet katmanı için ayrılmıştır). Örneğin, tasarımlarına bir göz atın , varlıkları yaratma, yok etme ve kurtarma yöntemlerini (diğer şeylerin yanı sıra) ortaya koyan bir CRUDRepository arabirimine sahip olduklarını göreceksiniz . Ayrıca, sonuçları sıralamak ve sayfalamak vb. İçin ekstra işlevsellik ekleyen bir PagingAndSortingRepository de vardır .
Bu çerçeve, iyi bir depo tasarımını incelemek için belki de iyi bir yerdir.
Bildiğim kadarıyla, Bahar Veri Çerçevesi tarafından uygulanan kavramların birçoğu, Alanın Odaklı Tasarım: Yazılımın Kalbinde Karmaşıklıkla Mücadele adlı harika bir kitaptan geliyor , kitap Havuz tasarımına adanmış tüm bir bölüme sahip.
Bir kopyasını almayı düşünebilirsiniz.
Kitaptan küçük bir alıntı şunları açıklıyor:
REPOSITORY modeli, bu çözümleri kapsüllemek ve model odağımızı geri getirmek için basit bir kavramsal çerçevedir.
REPOSİTORY, belirli bir tipteki tüm nesneleri kavramsal bir set olarak (genellikle taklit edilir) temsil eder. Daha ayrıntılı sorgulama yeteneği dışında bir koleksiyon gibi davranır. Uygun türdeki nesneler eklenir ve kaldırılır ve REPOSITORY'nin arkasındaki makineler bunları ekler veya veritabanından siler. Bu tanım, AGGREGATES'in köklerine erken yaşam döngüsünden sonuna kadar erişim sağlamak için tutarlı bir sorumluluk kümesi toplar.
İstemciler, istemci tarafından belirtilen ölçütlere (genellikle belirli özniteliklerin değerine) göre nesneleri seçen sorgu yöntemlerini kullanarak REPOSITORY ürününden nesneleri ister. REPOSITORY, veritabanı sorgularının ve meta veri eşlemesinin makinelerini kapsülleyerek istenen nesneyi alır. Depolar, müşterinin istediği ölçütlere göre nesneleri seçen çeşitli sorgular uygulayabilir. Ayrıca, kaç örneğin bazı ölçütleri karşıladığı gibi özet bilgiler de döndürebilir. Hatta bazı sayısal özniteliklerin eşleşen tüm nesnelerindeki toplam gibi özet hesaplamaları bile döndürebilirler.
REPOSITORY, artık basit, niyeti ortaya çıkaran bir arayüzle konuşabilen ve model açısından neye ihtiyaç duyduğunu sorabilen istemciden büyük bir yük kaldırıyor. Tüm bunları desteklemek için çok sayıda karmaşık teknik altyapı gerekir, ancak arayüz basittir ve kavramsal olarak alan modeline bağlıdır.
Bu nedenle:
Genel erişime ihtiyaç duyan her nesne türü için, bu türdeki tüm nesnelerin bellek içi koleksiyonunun yanılsamasını sağlayabilecek bir nesne oluşturun. Tanınmış bir global arabirim üzerinden erişimi ayarlayın.
Veri deposuna verilerin gerçek olarak eklenmesini veya kaldırılmasını kapsayacak nesneleri eklemek ve kaldırmak için yöntemler sağlayın. Nesneleri bazı ölçütlere göre seçen ve öznitelik değerleri ölçütleri karşılayan tamamen somutlaştırılmış nesneleri veya nesne koleksiyonlarını döndüren yöntemler sağlayın, böylece gerçek depolama ve sorgu teknolojisini kapsülleyin. REPOSITORIES'yi yalnızca doğrudan erişime ihtiyaç duyan AGREGA kökleri için sağlayın. Tüm nesne depolama ve REPOSITORIES erişimine izin vererek istemciyi modele odaklayın.