Aslında haklısın. DbContext
çalışma düzeni biriminin IDbSet
bir uygulamasıdır ve arşiv modelinin bir uygulamasıdır.
Depolar şu anda çok popüler ve gereğinden fazla kullanılıyor. Herkes bunları kullanıyor çünkü varlık çerçevesi için depo oluşturmayla ilgili düzinelerce makale var ama kimse bu kararla ilgili zorlukları tanımlamıyor.
Depo kullanmanın ana nedenleri genellikle şunlardır:
- EF'yi üst katmandan gizle
- Kodu daha iyi test edilebilir hale getirin
İlk neden, bir tür mimari saflık ve üst katmanlarınızı EF üzerinde bağımsız hale getirirseniz, daha sonra diğer kalıcılık çerçevesine geçebileceğiniz harika bir fikirdir. Gerçek dünyada kaç kez böyle bir şey gördün? Bu neden, EF ile çalışmayı çok daha zor hale getirir, çünkü deponuzun EF'in varsayılan olarak izin verdiği şeyleri saran birçok ek özelliği açığa çıkarması gerekir.
Aynı zamanda EF kodunu sarmak, kodunuzu daha iyi organize edebilir ve Ayrılma kaygısı kuralını takip edebilir. Benim için bu, havuzun ve çalışma biriminin tek gerçek avantajı olabilir, ancak EF ile bu kurala uymanın kodunuzu daha iyi korunabilir ve daha iyi okunabilir hale getireceğini anlamalısınız, ancak uygulamanızı oluşturmak için ilk çabanız çok daha yüksek olacaktır ve daha küçük uygulamalar için bu gereksiz karmaşıklık olabilir.
İkinci neden kısmen doğrudur. EF'nin en büyük dezavantajı, neredeyse alay edilemeyen katı mimaridir; bu nedenle, üst katmanı birim testi yapmak istiyorsanız, uygulamasının alay edilmesine izin vermek için EF'i bir şekilde sarmalısınız. Ancak bunun, burada anlattığım birçok başka sonucu vardır .
Ayende'nin blogunu takip ediyorum . NHibernate'i daha önce kullandıysanız, muhtemelen makalelerini biliyorsunuzdur. Bu adam yakın zamanda NHibernate ile depo kullanımına karşı birkaç makale yazdı, ancak NHibernate çok daha iyi alay edilebilir.