मैंने इस पर काफी गौर किया है और "पूर्ण" समाधान नहीं पाया है। रिपॉजिटरी पैटर्न एमवीसी अनुप्रयोगों के लिए आश्चर्यजनक रूप से काम करता है जहां संदर्भ कम रहता है क्योंकि यह एक अल्पकालिक नियंत्रक में मौजूद है, लेकिन समस्या तब होती है जब आप उसी संरचना को एक wpf ऐप पर लागू करने की कोशिश करते हैं जहां वीएम लंबे समय तक बना रह सकता है।
मैंने अतीत में इस समाधान का उपयोग किया है जो कि रेपो पैटर्न के कई हिस्सों की तुलना में बहुत अधिक सरल है, मैंने देखा है कि चीजों को एक अत्यधिक मात्रा में बाहर करने का प्रयास किया जाता है, जिसके परिणामस्वरूप कोड की अपठनीय मात्राएं पास होती हैं जो डिबग करना मुश्किल होता है। ये रहे कदम ...
- अपनी डेटा एक्सेस लेयर के रूप में कार्य करने के लिए EDMX के लिए एक अलग प्रोजेक्ट बनाएँ
- एक ही परियोजना के तहत एक "रिपॉजिटरी" फ़ोल्डर बनाएं
"कार्य की इकाई" के रूप में कार्य करने के लिए एक बेस क्लास "BaseRepository" बनाएं। IDisposable
आपको इसका उपयोग करने की अनुमति देगा using(){}
और partial
आपको अन्य रिपॉजिटरी को लागू करने की अनुमति देगा
public partial class MyEntityRepository : IDisposable
{
MyEntities context = new MyEntities();
public void Dispose()
{
context.Dispose();
}
}
"MyOtherRepository" नामक एक अन्य फ़ाइल बनाएं। एक ही आंशिक वर्ग बनाएं, लेकिन उस फ़ाइल को शामिल करने के तरीके के आधार पर तरीकों को लागू करें
public partial class MyEntityRepository
{
public void MyOtherMethodSave(EntityObject obj)
{
//work with context
...
context.SaveChanges();
}
}
अब आपके वीएम में आप ऐसा कर सकते हैं ...
using(MyEntityRepository repo = new MyEntityRepository())
{
repo.MyOtherMethodSave(objectToSave);
}
यह आपके सभी रिपॉजिटरी को एक वर्ग के तहत समूहित करता है ताकि आपको अलग-अलग संदर्भ से निपटना न पड़े। यह आपको तरीकों को अलग-अलग फाइलों में समूहित करके अलग-अलग रिपोज का प्रबंधन करने की अनुमति देता है और कोड दोहराव को रोकने में मदद करता है। उसके ऊपर, आपके संदर्भ उतने ही कम रहते हैं जितने कि वे इस पैटर्न का उपयोग किए बिना थे।
नुकसान यह है कि बड़े सिस्टम के साथ, आपके पास बहुत सारे तरीके हो सकते हैं जो आपके रेपो के तहत बंडल हो जाते हैं। उस मामले में एक समाधान कुछ बुनियादी सामान्य आदेशों जैसे "ढूंढना" या "जोड़ना" को लागू करना होगा, और अपने संबंधित भंडार में विशिष्ट लोगों को लागू करना होगा।