मुझे मध्य-करियर दार्शनिक वास्तुशिल्प संकट का सामना करना पड़ रहा है। मुझे क्लाइंट कोड (यूआई, वेब सर्विसेज, एमवीसी, एमवीपी, आदि) और सर्विस लेयर के बीच बहुत स्पष्ट रेखाएं दिखाई देती हैं। सेवा परत से लाइनें, हालांकि, मिनट से अधिक धुंधली हो रही हैं। और यह सब लिंक के साथ कोड पूछने की क्षमता और आलसी लोडिंग की अवधारणा के साथ शुरू हुआ।क्या सी # में क्वेरीबिलिटी और आलसी लोडिंग डेटा एक्सेस बनाम बिजनेस लॉजिक की लाइनों को धुंधला करती है?
मैंने एक व्यापार परत बनाई है जिसमें अनुबंध और कार्यान्वयन शामिल हैं। कार्यान्वयन के बाद अन्य अनुबंधों पर निर्भरता हो सकती है और इसी तरह। यह डीओ के साथ एक आईओसी कंटेनर के माध्यम से संभाला जाता है। एक सेवा है जो DataAccess को संभालती है और यह सब एक यूनिटऑफवर्क लौटाती है। यह यूनिटऑफवर्क एक लेनदेन बनाता है जब कमेटी विधि पर डेटा को बढ़ाया जाता है और करता है। [View this Article (Testability and Entity Framework 4.0)]:
public interface IUnitOfWork : IDisposable {
IRepository<T> GetRepository<T>() where T : class;
void Commit();
}
भंडार सामान्य है और दो कार्यान्वयन (EF4 और एक InMemory डेटासंग्रह) के खिलाफ काम करता है। टी पीओसीओ से बना है जो डेटाबेस स्कीमा या ईएफ 4 मैपिंग से उत्पन्न होता है। टेस्टेबिलिटी रिपोजिटरी डिज़ाइन में बनाई गई है। उम्मीदों के साथ परिणामों को जोर देने के लिए हम इन-मेमोरी कार्यान्वयन का लाभ उठा सकते हैं।
public interface IRepository<T> where T : class {
IQueryable<T> Table { get; }
void Add(T entity);
void Remove(T entity);
}
डेटा स्रोत सारणित होने पर, IQueryable अभी भी मुझे व्यवसाय तर्क के भीतर कहीं भी क्वेरी बनाने की क्षमता देता है। यहाँ एक उदाहरण है।
public interface IFoo {
Bar[] GetAll();
}
public class FooImpl : IFoo {
IDataAccess _dataAccess;
public FooImpl(IDataAccess dataAccess) {
_dataAccess = dataAccess;
}
public Bar[] GetAll() {
Bar[] output;
using (var work = _dataAccess.DoWork()) {
output = work.GetRepository<Bar>().Table.ToArray();
}
return output;
}
}
अब आप देख सकते हैं कि आप जटिल फ़िल्टर के साथ जुड़ने के साथ-साथ प्रश्नों को और अधिक जटिल कैसे प्राप्त कर सकते हैं।
इसलिए, मेरा प्रश्न हैं:
- इससे कोई फर्क पड़ता है BLL और दाल बीच कोई स्पष्ट भेद है कि वहाँ?।
- क्या रेमोजिटरी परत के पीछे पूछताछ योग्यता डेटा पहुंच या व्यावसायिक तर्क माना जाता है जो इनमेमरी अबास्ट्रक्शन की तरह कार्य करता है?
अतिरिक्त: जितना अधिक मैं इसके बारे में सोचता हूं, शायद दूसरा प्रश्न केवल यही था जिसे पूछा जाना चाहिए था।
+1 पहले बिंदु के लिए, खासकर – arootbeer
+1। पहले उद्देश्य, दर्शन दूसरा। –
आपका पहला बिंदु मेरी चिंता है। इवेंटहो, ईएफ 4 अपनी मैपिंग क्षमताओं के साथ सुडो डोमेन ऑब्जेक्ट्स बनाने में सक्षम है, यदि आप डीबी स्कीमा में बदलाव करते हैं, तो संभवतः आप उन परिवर्तनों को ईएफ 4 ऑब्जेक्ट्स को प्रसारित करना चाहते हैं - इस प्रकार आपके व्यावसायिक तर्क को प्रभावित करते हैं। आपके यूनिट परीक्षणों पर एक रिग्रेशन करके उस प्रभाव को कम किया जा सकता है। लेकिन एक बदलाव एक बदलाव है। –