यह वही रास्ता था
वर्षों से, मैंने अपने सॉफ़्टवेयर समाधानों को इस तरह व्यवस्थित किया है:
- डेटा एक्सेस लेयर (DAL) डेटा एक्सेस करने के व्यवसाय को अमूर्त करने के लिए
- व्यावसायिक तर्क परत (BLL) डेटा सेट, प्रमाणीकरण को संभालने आदि के लिए व्यावसायिक नियम लागू करने के लिए
- उपयोगिताएँ (Util) जो कि सामान्य उपयोगिता विधियों का एक पुस्तकालय है जिसे मैंने समय के साथ बनाया है।
- प्रेजेंटेशन लेयर जो कि वेब, डेस्कटॉप, मोबाइल, जो भी हो।
जिस तरह से अब है
पिछले चार वर्षों से या तो मैं माइक्रोसॉफ्ट के एंटिटी फ्रेमवर्क का उपयोग कर रहा हूं (मैं मुख्य रूप से एक .NET देव हूं) और मुझे पता चल रहा है कि डीएएल इस तथ्य के कारण साफ से अधिक बोझिल हो रहा है कि एंटिटी फ्रेमवर्क पहले ही कर चुका है। मेरा DAL जो काम करता था: यह एक डेटाबेस के खिलाफ CRUDs चलाने के व्यवसाय को रोकता है।
इसलिए, मैं आम तौर पर एक डीएएल के साथ समाप्त होता हूं जिसमें इस तरह की विधियों का एक संग्रह होता है:
public static IQueryable<SomeObject> GetObjects(){
var db = new myDatabaseContext();
return db.SomeObjectTable;
}
फिर, BLL में, इस विधि का उपयोग इस प्रकार किया जाता है:
public static List<SomeObject> GetMyObjects(int myId){
return DAL.GetObjects.Where(ob => op.accountId == myId).ToList();
}
यह निश्चित रूप से एक सरल उदाहरण है क्योंकि बीएलएल में आमतौर पर तर्क की कई और पंक्तियां लागू होती हैं, लेकिन इस तरह के सीमित दायरे के लिए डीएएल को बनाए रखना थोड़ा अधिक लगता है।
क्या केवल डीएएल को छोड़ना बेहतर नहीं होगा और केवल मेरे बीएलएल तरीके लिखें:
public static List<SomeObject> GetMyObjects(int myId){
var db = new myDatabaseContext();
return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList();
}
मैं ऊपर बताए गए कारणों से भविष्य की परियोजनाओं से डीएएल को छोड़ने पर विचार कर रहा हूं, लेकिन ऐसा करने से पहले, मैं एक परियोजना पर सड़क से नीचे उतरने से पहले आपकी बाधा / दूरदर्शिता / राय के लिए समुदाय को यहाँ पर चुनाव करना चाहता था और मुझे एक समस्या का पता चला ' टी प्रत्याशित
किसी भी विचार की सराहना की है।
अपडेट करें
सर्वसम्मति से ऐसा प्रतीत होता है कि एक अलग डीएएल आवश्यक नहीं है, लेकिन विक्रेता के लॉक इन से बचने के लिए यह एक अच्छा विचार है। उदाहरण के लिए, अगर मेरे पास एक डीएएल है जो ईएफ कॉल को अलग कर रहा है जैसा कि ऊपर सचित्र है, अगर मैं। कभी किसी अन्य विक्रेता के लिए स्विच करें मुझे अपने बीएलएल को फिर से लिखने की आवश्यकता नहीं है। डीएएल में केवल उन बुनियादी प्रश्नों को फिर से लिखना होगा। ऐसा कहने के बाद, मुझे ऐसा परिदृश्य देखना कठिन हो रहा है जिसमें ऐसा होगा। मैं पहले से ही एक Oracle db का EF मॉडल बना सकता हूँ, MSSQL एक दिया गया है, मुझे पूरा यकीन है कि MySql भी संभव है (??) इसलिए मुझे यकीन नहीं है कि अतिरिक्त कोड कभी सार्थक आरओआई प्रदान करेगा।
GetMyObjects(int myId)
है GetObjects.Where(ob => op.accountId == myId).ToList()
।