2009-11-03 11 views
6

आईएम उलझन में। यह Ayende Rahien Repository is the new singleton का एक ब्लॉग प्रविष्टि है।डीएचडी रिपोजिटरीज पैटर्न एनएचबीर्नेट

मेरा मानना ​​है कि एक भंडार केवल सीआरयूडी संचालन करना चाहिए और अतिरिक्त जोड़ों को नहीं करना चाहिए अन्यथा आप अपने भंडार पर इन तरीकों से समाप्त हो जाएंगे।

  1. FindCustomer (आईडी)
  2. FindCustomerWithAddresses (आईडी)
  3. FindCustomerWith ..

तो मेरे सवाल है, जहां (क्या परत में) एक प्रश्नों संस्थाओं को पुनः प्राप्त करने करना होगा?

+0

विषय पर दो उपयोगी पोस्ट: [जिमी बोगर्ड] (http://www.lostechies.com/blogs/jimmy_bogard /archive/2009/09/02/ddd-repository-implementation-patterns.aspx) और [ग्रेग यंग] द्वारा (http://codebetter.com/blogs/gregyoung/archive/2009/01/16/ddd-the- सामान्य-repository.aspx)। मैं एक संकर दृष्टिकोण की ओर अग्रसर हूं: अधिक जटिल लोगों के लिए सरल क्रियाओं और क्वेरी ऑब्जेक्ट्स के लिए सामान्य भंडार। मैं आमतौर पर जो कुछ भी अपने तर्क (यूआई, सेवा) का उपयोग कर भंडारों का पर्दाफाश नहीं करता हूं, लेकिन सेवा-/मुखौटा जैसी पैटर्न में कार्यक्षमता प्रदान करता हूं, इसलिए इस मुखौटे परत के बाहर दोहरी दृष्टिकोण प्रकट नहीं होता है। – tijmenvdk

उत्तर

3

रिपोजिटरी लिखना संभव है जिसमें डिफ़ॉल्ट सीआरयूडी ऑपरेशन हैं। उदाहरण के लिए:

public interface IRepository<TEntity> 
{ 
    TEntity FindByIdentity(object identity); 
    TEntity FindBy(Expression<Func<TEntity, bool>> specification); 
    IList<TEntity> FindAll(); 
    IList<TEntity> FindAllBy(Expression<Func<TEntity, bool>> specification); 
    TEntity Save(TEntity saveable); 
    void Delete(TEntity deletable); 
} 

अभिव्यक्ति> मूल रूप से विशिष्टता है और प्रश्नों कि जिस तरह से संपुटित हो सकता है। अगर हमारे पास रिपोजिटरी है तो हमें कई विशिष्ट भंडार लिखने की आवश्यकता नहीं है।

वैकल्पिक पथ क्वेरी ऑब्जेक्ट बना रहा है। हम उस क्वेरी का इंटरफ़ेस कोर/बिजनेस लॉजिक लेयर और सेवाओं/डेटा परत पर कार्यान्वयन में जोड़ सकते हैं। इस तरह हमने अच्छी तरह से नाम AllPreferredCustomersQuery जैसे प्रश्नों का नाम दिया है। यह विनिर्देशों के समान है, लेकिन विनिर्देश बुनियादी ढांचे का उपयोग नहीं करते हैं और इसलिए हम इसे कोर/बिजनेस लॉजिक लेयर में जोड़ सकते हैं। क्वेरी ऑब्जेक्ट्स अधिक विन्यास योग्य हैं (उदाहरण के लिए सीमाएं जोड़ने, रणनीतियों को लाने, जुड़ने आदि)

संबंधित मुद्दे