2010-03-09 18 views
5

DAO içindeki bağlantıyı kapsüllemek daha iyi midir, yani DAO'nun bağlantı oluşturup almasını sağlayın ve daha sonra kapatın veya DAO'ya bağlantıyı iletmek ve DAO'ya harici koddaki ayrıntıları ele almak daha mı iyi?DAO'da bir bağlantıyı geçirmeli veya kapsama geçirmeli miyim?

Takip: DAO içindeki bağlantıyı kapsülleyseniz, kapatma bağlantılarını nasıl yönetiyorsunuz?

cevap

3

DAO, CRUD işlemlerini yapmalı ve bu işlemleri arayanlardan gizlemelidir. Yani bağlantıyı kapsüllemelisiniz. Diğer taraftan, üst düzeyler DAO'ları (örneğin işlemler) koordine ediyorlarsa, bağlantıyı DAO'lara de aktarabilirsiniz (ve DAO'larda değil de açtığınız aynı seviyede kapatabilirsiniz).

Alt satır, uygulamanızın her katmanının sahip olduğu sorumluluğa bağlıdır. Arayanlar, DAO'ların verileri nereden aldığını veya önemsemediğini düşünüyor mu? Değilse, bağlantıları kapsülleyiniz.

+0

Bir fabrika oluşturmayı ve DAO'nun bunu esas olarak kapsülleme olarak adlandırmasını gerektiriyordum. –

+0

DAO fabrikaları, beton DAO'lar (uygulamalar) üretmek için kullanılır. “Bir fabrika yaratıp DAO'nun buna sahip olması” ile neyi kastettiğinizi anladığımdan emin değilim! –

+0

Üzgünüm, bir DAO fabrikası değil, bağlantı fabrikası demek istedim. –

2

Bunu saf bir kullanılabilirlik ve standartlar açısından görmek gerekirse DAO'nun bağlantılara dikkat etmesini istiyorsunuz. Her şeyden sonra Veri erişiminin ana işlevidir.

Kullanımınızı düşünürseniz, DAO'yu kullanmak için DAO'yu kullanmak için bir bağlantı oluşturmak üzere veritabanı hakkında yeterince bilgi sahibi olmak için sunum/iş katmanı kodunu ister misiniz? Veritabanını taşımanız veya yeniden adlandırmanız gerekiyorsa, bağlantı noktasını kapsüllemek çok güzel.

Kendi bağlantılarını yöneten bir DAO kullanmak da, genel okunabilirliği, IMO'yu artırarak, arama kodundaki nesnelerin daha fazla kullanımını sağlar.

0

Bir DAO'nun anahtar noktasını, uygulamanın geri kalanını bilmeden veya önemsemeden uygulamayı devre dışı bırakabileceğinizi düşünüyorum. Bunu bir projede yaptım. DAO arayüzü aynı kalır ancak bağlantı detayları değişir, böylece harici olarak görünemezsiniz.