मुझे लगता है कि मैं मंडलियों में चारों ओर दौड़ रहा हूं। मुझे लगता है कि सही भंडार पैटर्न LINQ to SQL का उपयोग कर रहा है, इस बारे में मेरा दिमाग नहीं लग रहा है। यदि आप Rob Conery'sMVC Storefront से परिचित हैं, तो आप देखेंगे कि उनका कार्यान्वयन LINQ- जेनरेट किए गए मॉडल को किसी अन्य वर्ग के साथ लपेटता है और LINQ- जेनरेट किए गए व्यक्ति को data transfer object (डीटीओ) के रूप में उपयोग करता है। यह इस तरह दिखता है:LINQ से SQL और रिपोजिटरी पैटर्न
//Custom wrapper class.
namespace Data
{
public class Customer
{
public int Id {get;set;}
public string Name {get;set;}
public IList<Address> Addresses {get;set;}
}
}
//Linq-Generated Class - severly abbreviated
namespace SqlRepository
{
public class Customer
{
public int Id {get;set;}
public string Name {get;set;}
public EntitySet<Address> {get;set;}
}
}
//Customer Repository
namespace SqlRepository
{
public class UserRepository : IUserRepository
{
private _db = new DB(); //This is the Linq-To-Sql datacontext
public IQueryable GetCusomters()
{
return
from c in _db.Customers
select new Customer // This is the wrapper class not the gen'd one
{
Id = c.Id,
Name = c.Name,
Addresses = new LazyList(c.Addresses)
};
}
क्या यह इस तरह से कर रही है (एक आवरण वर्ग का प्रयोग करके) का लाभ है, के रूप में जिस तरह से माइक Hadlow Using the IRepository pattern with LINQ to SQL IRepository < टी के बारे में उनकी संस्करण में में पता चलता है करने के लिए विरोध> जहां वह सिर्फ डीटीओ वस्तुओं को भंडार से लौटाता है?
व्यापार तर्क को लागू और चेक किया जाना चाहिए? क्या यह अलग-अलग परत में सभी को एक साथ संग्रह/अद्यतन पर भंडार द्वारा बुलाया जाता है, या यह रैपर वर्ग में अंतर्निहित है?
लेकिन जब आप NHIBERNATE की तरह कुछ स्विच करते हैं तो आप अपने भंडार में उपयोग किए गए एसक्यूएल एक्सटेंशन विधियों के साथ linq के साथ क्या करते हैं? एक नया भंडार बनाएँ? – zsharp
यह एक महान स्पष्टीकरण है। समस्या मुझे लगता है कि बहुत से लोगों के पास है (पढ़ें "मैं") एल 2 एस ऑब्जेक्ट्स को पूरी तरह से एक डीएएल के अलावा कुछ और करने का प्रयास कर रहा है। लेकिन सत्यापन के लिए सभी प्रकार के हुक बनाने के लिए उस एमएस की गलती का हिस्सा नहीं है? – Micah
2-स्तरीय आर्किटेक्चर के साथ कुछ भी गलत नहीं है, अगर यह आवश्यक है। उस स्थिति में, एल 2 एस एक अच्छा उत्पाद है, और मॉडल उत्पन्न करने वाली मॉडल ऑब्जेक्ट्स बहुत अनुकूलन और एक्स्टेंसिबल हैं। समस्या एन-स्तरीय पैटर्न तक बढ़ रही है, मुझे लगता है कि एल 2 एस जैसे प्रोजेक्ट को तोड़ना शुरू हो जाता है –