SORU
1 Ocak 2013, Salı


Depo desen kullanarak DEĞİL, ORM kullanmak gibi (EF)

Ben her zaman Depoyu desen kullanılan ama son projem için eğer kullanımı ve benim uygulama mükemmel miyim diye görmek istedim “İş Birimi”. Daha fazla araştırmaya başladım kendi kendime soru sormaya başladım:"Gerçekten ihtiyacım var mı?"

Şimdi bu blogu 2 özel, Ayende için bir izleme Rahien posta ile Stackoverflow yorum bir çift ile başlıyor

Bu muhtemelen sonsuza dek konuşulacak ve farklı uygulamalar bağlıdır. Bilmek istiyorum ne,

  1. bu yaklaşım, Varlık Çerçevesi bir proje için uygun olacak?
  2. bu yaklaşımı kullanarak iş mantığı hala hizmet bir katman veya uzatma yöntemleri (aşağıda açıklandığı gibi, biliyorum, uzatma yöntemi NHib oturum kullanarak) gidiyor?

Bu kadar kolay uzatma yöntemleri kullanılarak yapılır. Temiz, basit ve yeniden kullanılabilir.

public static IEnumerable GetAll(
    this ISession instance, Expression<Func<T, bool>> where) where T : class
{
    return instance.QueryOver().Where(where).List();
}

Dİ olarak bu yaklaşım ve Ninject, Context arayüzü ve benim kontrol o enjekte gerek var mı?

CEVAP
23 Kasım 2013, CUMARTESİ


Birçok yollar aşağı gitti ve farklı projeler üzerinde depoların birçok uygulama yaptım ve... havlu attım ve PES, işte bu yüzden.

Bu özel durum için kodlama

Veritabanı başka bir teknoloji değişecek sadece %1 ihtimal için kod musunuz? Eğer düşündüğün her iş gelecek devlet ve evet bu bir olasılık sonra olmalılar para için göze bir geçiş için başka bir DB teknoloji veya b) sen seçimi DB teknoloji için eğlenceli veya c) bir şey korkunç yanlış gitti ile ilk teknoloji karar için kullanın.

Neden zengin ETMENİZ sözdizimi atmak?

SERİ ve EF ile güzel bir şeyler okumak için yapabileceğin çok gelişti ve çapraz grafik nesnesi. Ve bunu yapmak için aynı esnekliği verebilir bir depo korumak yaratıyor korkunç bir görev. Benim durumumda bir depoyu ben yarattım her zamanHer ZAMANiş mantığı sorguları daha fazla karınca gerçekleştirmek ve/veya veritabanı için isabet sayısını azaltmak ya da depo katmanı içine sızıntı vardı.

Yazmam gereken bir sorgu her permütasyon için bir yöntem oluşturmak istemiyorum. De saklı yordamları yazmak olabilir. GetOrder,, GetOrderWithOrderİtemWithOrderActivity GetOrderWithOrderİtem, GetOrderByUserİd, ve bu yüzden istemiyorum... sadece ben lütfen gibi ana varlık ve traverse ve nesne grafiği eklemek istiyorum.

Depoların en saçma örnekler

GERÇEKTEN bir blog gibi çıplak kemikleri ve sorularınıza asla örnekler 'ı kadar basit olacak bir şey geliştirdiğiniz sürece ınternet depo desen çevreleyen bulun. Yaşadığım stresi anlatamam! Bunu çözmek için çamurun altından geçmek zorunda olduğu bir şey. Her zaman yarattığın o mükemmel düşünülmüş depo bir sorgu tatili/çözüm olacak ve 2. kendinizi bil bakalım nerede bu noktaya kadar teknik ve borç/erozyon başlar.

Birim benim kardeşim test yok

Ama birim test eğer bir depo yok eğer doğru değilse ne olacak? Nasıl alay eder miyim? Basit değilsin. Sağlar Her iki açıdan bak:

Hayır depo - sahte DbContext kullanarak bir İDbContext veya başka bir hile ama sen gerçekten birim test ETMENİZ için Nesneleri yok ETMENİZ için Varlıklar, çünkü sorgu belirlenen çalışma zamanı... TAMAM çok iyi bir şey değil! Şimdi onun kadar entegrasyon Bu kapak için test.

Depo - şimdi depolarınızı ve birim alay arasında katman(lar) test. Harika değil mi? Aslında değil... durumlarda yukarıda olduğumuz için sızıntı mantık içine depo katman için daha fazla sorguları gerçekleştirmek karınca ve/veya daha az vurur veritabanına nasıl birim testleri kapsayacak? Şimdi repo katmanı ve IQueryable doğru test etmek istemiyor musun? Ayrıca sağlar dürüst olmak gerekirse, birim testleri değil mi kapak olacak sorgulayan bir 20 satır .Where() maddesi ve .Include()'nın bir sürü ilişkiler ve şarkıları veritabanı yeniden için tüm bu diğer şeyler, vesaire, vesaire, vesaire her neyse, çünkü sorgu oluşturulan çalışma zamanı. Ayrıca bu yana oluşturulan bir depo tutmak için üst katmanları kalıcılık cahil, eğer şimdi değiştirmek istediğiniz veritabanı teknolojisi, bölüğünüzü testleri yoldan gitmeye garantisi aynı sonuçlara zamanı, geri entegrasyon testleri. Depoyu bütün mesele garip görünüyor

2 sent

Biz düz saklı yordamları üzerinde EF (toplu ekler, toplu siler, CTE, vb.) kullanırken zaten işlevsellik ve sözdizimi kaybetmek çok ama ben de kodu C# tür ikili gerek yok. Farklı sağlayıcılar kullanarak ve nesne grafikleri ile çalışmak için çok şeyler arasında güzel ilgili bir olasılığı var, böylece EF kullanıyoruz. Bazı soyutlamalar yararlı, bazıları ise değil.

Bu, İnternet'te bir yerlerde birileri yardımcı olur umarım

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • We've moved!

    We've moved!

    7 Ocak 2008
  • olinerd

    olinerd

    23 AĞUSTOS 2007