Birisi bana adım adım çok basit bir örnek veya demo vererek, .NET'teki Depo Deseni'ni açıklayabilir mi?
Bunun çok yaygın bir soru olduğunu biliyorum ama şimdiye kadar tatmin edici bir cevap bulamadım.
Birisi bana adım adım çok basit bir örnek veya demo vererek, .NET'teki Depo Deseni'ni açıklayabilir mi?
Bunun çok yaygın bir soru olduğunu biliyorum ama şimdiye kadar tatmin edici bir cevap bulamadım.
Yanıtlar:
Özet olarak, veri havuzu modelinin daha geniş etkisini tarif ederim. Tüm kodunuzun, nesnelerin nasıl kalıcı olduğunu bilmeden nesneleri kullanmasına izin verir. Tablolardan nesnelere eşleme de dahil olmak üzere tüm kalıcılık bilgisi depoda güvenli bir şekilde bulunur.
Çok sık, kod tabanına dağılmış SQL sorguları bulacaksınız ve bir tabloya bir sütun eklemek için geldiğinizde bir tablonun kullanımlarını bulmaya çalışmak için kod dosyalarını aramanız gerekir. Değişimin etkisi çok geniş.
Havuz deseniyle, yalnızca bir nesneyi ve bir havuzu değiştirmeniz gerekir. Etki çok küçük.
Belki de depo desenini neden kullanacağınızı düşünmenize yardımcı olabilir. İşte bazı nedenleri:
Veri erişiminizde değişiklik yapmak için tek bir yeriniz var
Bir dizi tablodan sorumlu tek bir yeriniz var (genellikle)
Bir depoyu test için sahte bir uygulama ile değiştirmek kolaydır - bu nedenle birim testleriniz için kullanılabilir bir veritabanınızın olması gerekmez
Mesela MySQL kullanıyorsanız ve SQL Server'a geçmek istiyorsanız başka faydalar da var - ama aslında bunu pratikte hiç görmedim!
IConnection
, ICommand
vb parçası olduğunu gizler veritabanının türü. Depo genellikle daha etki alanı merkezlidir.
Bu güzel bir örnek: C # 'da Depo Desen Örneği
Temel olarak, depo, verinin veritabanından / veritabanına tam olarak nasıl alındığını / kalıcı olarak saklandığının ayrıntılarını gizler. Kapakların altında:
IDbContext
) veya ISession
doğrudan nhibernate ( ) tarafından sağlanan arayüzlerin kullanımıyla karşılaştırıldığında hiçbir avantaj sağlamaz . Doğru şekilde uygulanan bir depo TÜM kalıcılığa özgü bilgileri (mevcut Linq To Sql sağlayıcısının nasıl çalıştığı gibi) soyutlar. yani asla ifşa etmeyin IQueryable
.
IQueryable
kalıcılığa özgü bir bilgi değildir. IQueryable'ın desteği sabit kodlanmış bir dizi kadar basit olabilir veya bir XML dosyası, web hizmeti, veritabanı, düz dosya vb. Olabilir. her durumda yavaş veri erişimine yol açar, burada IQueryable'ın ortaya çıkarılması, bazı durumlarda kalıcılık deposu bu özelliğe sahipse uygulanabilir olduğunda performans geliştirmeleri yapılmasına izin verir. Ayrıca, DbContext'i gizlemek gerekirse (veya ORM yok!) Farklı bir ORM'ye geçmenizi sağlar
IN
Belirli LinqToSql sağlayıcısının bunu nasıl yaptığını bilmeden istekli / tembel yükleme veya bir sql yan tümcesi oluşturmayı deneyin .