मुझे थोड़ा आर्किटेक्चर समस्या है। मेरे प्रोजेक्ट में मेरे पास एक बिजनेस लॉजिक लेयर (बीएलएल) है जिसमें इंटरफ़ेस के लिए मेरे सभी व्यवसाय नियम, मॉडल और ओओ एपीआई शामिल हैं। प्रत्येक ऑब्जेक्ट में स्थिर तरीके हैं जैसे getById जो कहा ऑब्जेक्ट का एक उदाहरण देता है। प्रत्येक ऑब्जेक्ट में सहेजने और हटाने जैसी विधियां भी होती हैं। यह बहुत सरल ओओ कोड है।व्यापार तर्क परत और डेटा एक्सेस परत: परिपत्र निर्भरता
अब मेरे पास एक अलग नामस्थान में निहित डेटाएप परत (डीएएल) है, प्रत्येक बीएलएल ऑब्जेक्ट के लिए मेरे पास डेटा क्लास या "रिपोजिटरी" है जो GetById निष्पादित करता है और कमांड को सहेजता है। तो एक तरह से, बीएलएल सेव करें और GetBd विधियां डेटा क्लास विधियों के चारों ओर एक पतली परत हैं।
public static NewsItem GetByID(int id)
{
return DataFactory.GetNewsItemRepository().GetNewsItemById(id);
}
डेटा क्लास बीएलएल वस्तुओं को वापस करने के लिए, उन्हें बीएलएल को जानने की आवश्यकता है। तो अब हमारे पास:
जीयूआई ---> BLL < ----> दाल
DataFactory केवल वस्तुओं है कि एक अंतरफलक को लागू देता है, तो मैं "OracleNewsItemRepository" की तरह कार्यान्वयन विवरण छुपा सकते हैं।
लेकिन अब ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग शुरू करने के बाद से मुझे उस चीज के लिए परेशान कर रहा है। मेरे वर्तमान समाधान में, बीएलएल और डीएएल दोनों को एक दूसरे को जानने की जरूरत है। यह एक परिपत्र निर्भरता है, और परिपत्र निर्भरताओं से बचने के लिए यह सबसे अच्छा अभ्यास है। इसके अलावा मैं केवल इंटरफेस (और मेरे डेटाफैक्टरी) का पर्दाफाश करना चाहता हूं, न कि मेरी कक्षाएं। यह एक अलग विधानसभा में डीएएल परत रखकर किया जा सकता है। जो समझ में आता है। हालांकि, विजुअल स्टूडियो दो असेंबली को एक दूसरे को संदर्भित करने की अनुमति नहीं देता है। इसके बारे में एक और सवाल: C# internal access modifiers
किसी भी तरह मुझे लगता है कि मुझे अपना पूरा डेटा एक्सेस पैटर्न गलत मिला है। ऐसा लगता है कि मैं ActiveMecord पैटर्न को अन्य सामग्री जैसे DataMappers के साथ जोड़ रहा हूं। मैंने मार्टिन फाउलर की साइट पर काफी समय बिताया है, लेकिन उन पैटर्नों को बहुत सामान्य कहा गया है और उन्हें एक बहुत ही अमूर्त यूएमएल आरेख द्वारा चित्रित किया गया है।
वे मेरी समस्या का समाधान नहीं करते हैं। शायद मैं थोड़ा गुदा हूं, और "सही डेटा एक्सेस पैटर्न" जैसी कोई चीज़ नहीं है। और अब मैं जो करता हूं वह बहुत गलत नहीं लगता है। लेकिन अब मैं चीजें कैसे करता हूं, लगता है ...
कोई विचार?
काम करता है, डीआई के साथ संयोजन में। मेरा बीएलएल अब इंटरफेस को जानता है। – IceHeat