2009-05-11 14 views
8

Rob'un yaptığı gibi, Linq'den SQL sihirbazının oluşturduğu sınıflara ve sonra bu sınıfların POCO'ları olan bir kopyasına sahibim. benim depoları ben SQL modellere bu Poços ziyade Linq dönmek:EF Varlıklar'dan daha fazla bir Deposu olan POCO nesnelerini iade etmenin artıları/eksileri nelerdir?

 
return from c in DataContext.Customer 
     where c.ID == id 
     select new MyPocoModels.Customer { ID = c.ID, Name = c.Name } 

bu yararı POCO modeller daha kolay bu yüzden bu benim kod daha sınanabilir yapacak örneği oluşturulmak olduğunu anlıyoruz.

Şimdi Linq'den SQL'e Entity Framework'e geçiyorum ve EF kitabından yaklaşık yarısıyım. Görünüşe göre, POCO'ları EF varlıklarından ziyade depolarımdan geri göndererek kaybedeceğim bir çok iyilik var.

Hala gerçekten birim testlerini benimsemedim, bu yüzden bu ekstra POCO'ları oluşturmak için çok zaman harcıyor ve kodları yazmak için yazıyormuş gibi hissediyorum. Ayrıca, objelerimi takip edememekten dolayı EF'in birçok faydasını da kaybedeceğim.

Bu ORM/Deposuyla ilgili herhangi bir kişinin göreceli bir yenisi hakkında tavsiyesi var mı? DDD gibi mesela:

Anthony

+0

Sadece Rob Conery'nin Storefront serisini takip ettiğimi ve daha küçük projelerimde Repository desenini kullanmaya başladığımı belirtmek istediğim ilk mesajımı kaçırdığımı fark ettim. – littlecharva

cevap

6

İnsanların otomatik olarak oluşturulmuş nesneleri (örneğin LINQ'dan SQL'e) sevmemesinin bir başka nedeni de yerleşik "sihir" nedeniyle.

Genellikle sihir görünmezdir ve asla fark etmezsiniz, ancak bu nesnelerden bir tanesini serileştirmek ve daha sonra (örneğin web servislerini kullanırken) seri hale getirme gibi şeyleri yapmaya çalıştığınızda, veri kaynağına dahili bağlantısı kesilir ve "sihirliyi geri koymak" için özel hackler kullanılmalıdır.

POCO'lar ile, bu tür şeyler hakkında endişelenmenize gerek yoktur ve verileriniz ile hizmet katmanlarınız arasında daha iyi bir ayırma elde edebilirsiniz. Dezavantajı, bir çok sıkıcı POCO -> sihirli nesne ve sihirli nesne -> POCO dönüşüm kodu yazmanız gerektiğidir. Ama sonuçta, özellikle büyük ya da karmaşık projeler için genellikle buna değer olduğunu düşünüyorum.

4

ana nedeni birçok insan belirli bir zihniyet ile Modeli geliştirmek ister olmasıdır. Durumlar gibi şeyler için özel bir örüntü (Spec veya State gibi) kullanmak isteyebilirler (veya enums yerine) - veya bir fabrika için örnekleme yapmak isteyebilirsiniz.

Şeyler daha karmaşık hale geldiğinde, Tabloları Nesneler olarak kullanmaya çalıştığınızda OO kesilir. Basit siteler iyi çalışıyor - ama büyük şeylere gittiğinizde çirkinleşiyor.

Her zamanki gibi - projenizin dönüşeceğini düşündüğünüz şeye bağlıdır.

2

Benim deneyim bazı karmaşık sorgular yazma başladığınızda .Include yöntem değersiz olduğunu ve kendinizi bulacaksınız ya:

a) istediğiniz veri veya b) ait kötüye almak için çok fazla sorgu yazılması Tek bir sorguda veriyi yüklemek ve daha sonra bu verileri yalnızca varlığınıza aktarmak için çok fazla kod yazmak için anonim türler. IMOCO, POCO'ların yoludur, IMHO.