Soru 1 ve 2 için Matthew'un cevapları ile devam edin.
Masaüstü uygulamalarının DAL'ını yapılandırmanın en iyi yolunu bulmaya çalışmak için çok zaman harcadım. Ve en iyi yol gerçekten uygulamanın ihtiyaçlarına bağlıdır. Uygulamalarımdan birinde, her bir veritabanı tablosu için bir DA sınıfına sahip olmak için yola çıktım, bu da kendisini merkezi (yani singleton) bir DataProvider sınıfıyla kaydetti ve CRUD'yi işledi. Daha sonra her DA sınıfı, tüm tablo verilerini RAM'de önbelleğe alıp almayacağını (performans!) Ve / veya diğer bilgisayarlarda çalışan diğer istemcilerde otomatik istemci güncellemelerini tetikleme yeteneğine sahip olup olmayacağına karar verebilir (çok kullanıcılı olduğunu düşünün) eşzamanlılık). Bu, yeni DAL sınıfları eklemeyi çok kolaylaştırır, çünkü tek yapmaları gereken kayıt arayüzüne uymaktır.
Her DAL'ın bu tür bir işlevselliğe ihtiyacı yoktur, ancak yeni dersler eklemeye başladığımda yaklaşımın kendisinin (yani tektonlu veri sağlayıcısı ve statik kayıtlı basit DAL sınıfları) hayatımı çok daha kolay hale getirdiğini öğrendim.
Çok basit bir uygulama olmadıkça kesinlikle CRUD'yi daha üst sınıflara inşa etmenizi tavsiye etmem. DAL, veri deposunun bir soyutlamasıdır. Veri depolama alanınızı gelecekte bir noktada değiştirmeye karar verirseniz (yalnızca MS SQL yerine MySQL kullanmak olsa bile), bunun için çok minnettar olacaksınız. Artı: BLL nesneleri iş mantığı ilişkileri tarafından yapılandırılmalıdır. DAL nesneleri, temsil ettikleri saklama kaplarının türlerine göre yapılandırılır. Farklılıklar dramatik olabilir.
Do DEĞİL DAL sınıfları statik olun. Kodlama hızında kazandığınız şey, test edilebilirlik ve esneklikte birçok kez kaybedersiniz.