NHibernate'de neden Havuz modeline ihtiyaç var?


13

Resmi NHibernate tabanlı ilk uygulama okuyorum .

Öğretici iyi ve takip edilmesi kolay olsa da, Havuz deseninin neden kullanıldığını merak ediyorum.

Çeşitli yılında Add, Update, Removeiçinde yöntemleri ProductRepositoryuygulanması, kod neredeyse aynıdır - hepsi işlemleri kullanıyorsanız ve fark "et" yani çağrıdır session.Saveint Add, yöntem session.Deleteiçinde removeyöntemle. ( Sayfa HTML çapa yoksun, ama gibi alakalı kodu için sayfayı arayabilir public void Remove,public void Add )

Bu kod "yanlış geliyor".

Yazar neden Havuz desenini kullanıyor - sadece NHibernate'in gösterilmesi için mi yoksa gerekli mi yoksa başka bir neden mi?

Ps. Arka planım Ruby on Rails ActiveRecord kullanarak olduğunu, bu yüzden NHibernate nasıl çalışır / kullanıldığını anlamaya çalışıyorum.


1
Aktif Kayıt modelini tercih ederseniz, NHibernate castleproject.org/activerecord
Ben Robinson

3
Bu kritik bir soru. Kullanıp kullanmama konusunda bazı tartışmalar var. Ayende depoda kullanılmaması için argümanlarını yazdı yeni Singleton

Yanıtlar:


10

Havuz modeli gerekli değildir. Diğer tüm modellerde ise iş gereksinimlerinize karşı vermeniz gereken "Mimari" bir karardır. Genel olarak, havuz Kalıbı "Varlık Kalıcılığı Ingorance" ı uygulamak için kullanılır. Örneğin bir Varlık Adresiniz varsa, kalıcılık mantığını içermeyecektir (adres.Kaydet veya adres.Güncelle gibi bir şey bulamazsınız) ancak varlığınızı devam ettirmek için sorumlu bir depo yöntemine iletirsiniz. değişiklikler


Bence evet ve hayır. NHibernate oturumunun kendisi soem türünün genel deposudur. Bu nedenle, ek bir havuz eklemek genellikle oturum nesnesine bir cephe eklemekten başka bir şey değildir.

Aslında cevabım "Depo deseni gerekli değil ..." gibi başlıyor, bu sadece iş ihtiyaçlarına karşı mimari bir karar olabilir

Buna tamamen katılıyorum. Ancak oturumun kendisinin bir havuz olduğu noktasını kaçırıyordum, hepsi bu.

9

Havuz kalıbı kullanmanın avantajı, veri erişim katmanınızı taklit etmektir, böylece iş katmanı kodunuzu DAL kodu aramadan test edebilirsiniz. Başka büyük avantajlar da var, ancak bu benim için çok hayati gibi görünüyor.


2
+1 ActiveRecord deseni, genellikle kendi veritabanını gerektiren birim testleri ile sonuçlanan (bu durumda birim testi bir entegrasyon testi haline gelir), DAL'ı alay için izole etmeyi çok zorlaştırır.
MattDavey
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.