2009-12-29 13 views
5

हम नेट में हमारी साइटों में से एक का पुनर्निर्माण करने जा रहे हैं। मैंने कई लेख पढ़े हैं और वास्तव में हमारी परियोजना को डेटा एक्सेस लेयर (डीएएल), बिजनेस लॉजिक लेयर (बीएलएल), और प्रस्तुति परत में अलग करने के विचार की तरह (हम क्लासिक एएसपी से आ रहे हैं, इसलिए यह हमारे लिए एक बड़ा कदम है)। मुझे वास्तव में लिंक से एसक्यूएल भी पसंद है।लिंक से एसक्यूएल और लॉजिकल विभाजन (डीएएल, बीएलएल)

चूंकि लिंक से एसक्यूएल का उद्देश्य तेजी से विकास करना है, क्या वास्तव में लिंक से एसक्यूएल के साथ डीएएल, बीएलएल और प्रेजेंटेशन लेयर होना संभव है? लिंक से एसक्यूएल के साथ डीएएल इकाइयों या linq कोड वापस कर देगा जो संभवतः बीएलएल में संशोधित किया जा सकता है? लिंक से एसक्यूएल के साथ डीएएल और बीएलएल के बीच संबंध सर्वसम्मति के साथ एक अस्पष्ट विषय प्रतीत होता है - और चूंकि यह हमारे लिए इतनी बड़ी छलांग है कि मैं निश्चित रूप से कुछ भी डाइविंग से पहले एक अच्छी गेम योजना बनाना चाहता हूं।

टाइप किए गए डेटासेट इस के लिए अधिक सुसज्जित लगते हैं, लेकिन अगर मैं लिंक के साथ कुछ मिल सकता हूं तो मैं उस मार्ग पर जाऊंगा।

मैं nHibernate और अन्य तृतीय पक्ष पुस्तकालयों से दूर रहना चाहता हूं।

+0

विभाजित डीएएल, बीएलएल, आदि, एन-टियर के समान नहीं है। एन-टियर आमतौर पर * भौतिक * विभाजन का तात्पर्य है। हालांकि प्रेजेंटेशन और बिजनेस लॉजिक के लिए तार्किक (उदा।, असेंबली) विभाजन होना हमेशा अच्छा होता है, लेकिन मैं तर्क दूंगा कि यह भौतिक विभाजन से अलग चिंता है। आप कौन सा हल करना चाहते हैं? –

+0

मैं तार्किक विभाजन के बारे में चिंतित हूं। –

+0

आपके पास LinqToSql के साथ एक अलग डीएएल और बीएलएल हो सकता है, लेकिन यह आपके लिए ऐसा करने के लिए है और आपको परिभाषित करना होगा कि रेखा कहां खींची जाती है। LinqToSql आपको लाइन को धुंधला करने के लिए प्रोत्साहित करता है ताकि आपको चिंताओं को स्पष्ट अलगाव बनाने के लिए सक्रिय रूप से लड़ना पड़े। –

उत्तर

5

हम जो भी वर्णन करते हैं, हम वास्तव में निर्माण कर रहे हैं, और हम इसे करने के लिए एल 2 एस का उपयोग कर रहे हैं। सहमत हैं कि डीएएल और बीएलएल के बीच का रिश्ता थोड़ा अस्पष्ट है, लेकिन हमारे पास एक अलग बीएलएल और एक अलग डीएएल है। हमारा सभी तर्क बीएलएल में है और सभी डेटा पुनर्प्राप्ति/संशोधन डीएएल (LINQ कॉल का उपयोग करके) के माध्यम से किया जाता है।

हमारा ऐप कोई टाइप किए गए डेटासेट का उपयोग नहीं करता है। हमने अपनी वस्तुओं का प्रतिनिधित्व करने के लिए इकाई वर्ग बनाए हैं। अब जब मैंने इसका कुछ महीनों का निर्माण किया है, तो मुझे नहीं लगता कि मैं (मुझे) डेटासेट पर वापस जा रहा हूं।

इसके अलावा, मैं एल 2 एस पर "तेजी से विकास के उद्देश्य से" लटका नहीं जाऊंगा। यह एक प्रोटोटाइप उपकरण की तरह ध्वनि बनाता है। हम इसे औद्योगिक ताकत उपकरण के रूप में ढूंढ रहे हैं। माइक्रोसॉफ्ट अब इसके बारे में क्या कह रहा है इसके विपरीत हो सकता है, क्योंकि वे लोग ईएफ का उपयोग करेंगे।

रैंडी

3

मैं एक कदम वापस लेने के लिए और एक बार फिर से अपनी आवश्यकताओं को देखने के लिए सलाह देते हैं।

क्या आपको वास्तविक 3 स्तरों (जो विभिन्न मशीनों पर भौतिक तैनाती है) या आपके आवेदन की तार्किक विभाजन की आवश्यकता है?

मैंने लिखा है कि मैंने पहले बड़े आवेदन पर वास्तव में यह गलती की है। मुझे भौतिक 3 स्तरों की आवश्यकता नहीं थी (और कभी इसकी आवश्यकता नहीं होगी) लेकिन इस तरह से एप्लिकेशन को डिज़ाइन किया गया। सबसे हड़ताली परिणाम यह था कि मैं Linq2Sql इकाइयों पर डिस्कनेक्टेड चेंज ट्रैकिंग का समर्थन नहीं करता है। मैंने इस सीमा को हल करने के लिए Linq2Sql Entity Base का उपयोग किया, हालांकि यह दृढ़ता अज्ञानता की अवधारणा का बहुत बुरी तरह से उल्लंघन करता है (एक हमेशा बाद में बेहतर जानता है, हुह?)।

वास्तविक एन-टायर्स में जाकर एप्लिकेशन आर्किटेक्चर पर कई अन्य प्रभाव पड़ते हैं।

आपको संदेश पास करने, डेटा-स्थानांतरण ऑब्जेक्ट इत्यादि की आवश्यकता होगी। LINQ2SQL एक सभ्य ओआरएम है, LINQ के साथ तंग एकीकरण अद्वितीय संभावनाएं प्रदान करता है। अन्य ओआरएम को अभी भी पकड़ने के लिए कुछ समय चाहिए। एनएचबर्ननेट 3.0 सुरंग के अंत में एक प्रकाश है। यदि आपके पास सरल डेटा मॉडल हैं और "प्रति टेबल" तालिका में मानचित्रण कर सकते हैं तो Linq2SQL एक महान ओआरएम है।

डिस्कनेक्ट किए गए परिवर्तन ट्रैकिंग के लिए (जिसे आपको एन-टियर जाने पर आवश्यकता होगी) अन्य ORM के बेहतर समर्थन है।

और अंत में:

इन परिस्थितियों मैं विशेष रूप से सावधान हो जाएगा के तहत (हम क्लासिक एएसपी से आ रहे हैं तो यह हमारे लिए एक बड़े पैमाने पर कदम है)। स्विचिंग प्रौद्योगिकियों को अक्सर कम करके आंका जाता है। यहां तक ​​कि आपकी टीम के सबसे स्मार्ट प्रोग्रामर भी गलत निर्णय लेते हैं क्योंकि उन्हें तकनीक के साथ अनुभव नहीं है। फिर भी नए तरीकों से जाना और अपने कौशल सेट में सुधार करना महत्वपूर्ण है। जो कभी असफल नहीं होते वे कभी भी सफल नहीं होंगे।

+0

तार्किक विभाजन, इसके बारे में खेद है। मैंने अपना विषय अपडेट किया –

0

IMHO, LINQ से SQL वर्तमान में उपलब्ध सर्वोत्तम विकल्प है। यह वास्तव में डेटा दर्द रहित और लगभग मजेदार के साथ काम करता है। :-) यदि आप LINQ से SQL में रुचि रखते हैं, तो मैं हमारी PLINQO प्रोजेक्ट पर एक नज़र डालेगा। यह एक बेहतर समग्र समाधान बनाने के लिए LINQ से SQL में कुछ महान संवर्द्धन है।

2

मैं L2S कहेंगे दाल है। अलग-अलग वर्गों में एल 2 एस + बिजनेस लॉजिक एक विलय डीएएल + बीएलएल बन जाता है, डीएएल पक्ष एल 2 एस रनटाइम होता है, और एल 2 एस-जेनरेट कोड (डेटाकॉन्टेक्स्ट, इकाई वर्ग इत्यादि) बन जाता है।

आप अभी भी उन्हें आसानी से अलग कर सकते हैं ताकि L2S- उत्पन्न भाग, और इकाइयों और डेटाकॉन्टेक्स्ट के लिए कोई भी एक्सटेंशन अलग डीएलएल में हो, और एक अलग डीएल/सेवा/आदि में अतिरिक्त व्यावसायिक तर्क हो। हालांकि कई मामलों में उन्हें अलग करने की कोई वास्तविक आवश्यकता नहीं है।

एल 2 एस का उपयोग करते समय डीएएल + बीएलएल में अलग होने का एक कारण होगा यदि आप भविष्य में सड़क पर नीचे एक और डेटा एक्सेस प्रौद्योगिकी में स्थानांतरित हो जाएंगे, या यदि आप एक से अधिक डेटा एक्सेस तकनीक का उपयोग कर रहे हैं। किसी भी एल 2 एस-विशिष्ट सामान के साथ अलग डीएएल रखने से डीएएल को स्विच करना आसान हो जाता है। यदि आप उस कारण से डीएएल + बीएलएल को अलग करना चाहते हैं, तो एल 2 एस डीएएल-डीएलएल को इकाई वर्गों, किसी व्युत्पन्न कक्षाओं या प्रक्षेपण कक्षाओं, और संस्थाओं या संग्रह (सूची इत्यादि) प्राप्त करने के तरीकों का खुलासा करना चाहिए, लेकिन डेटाकॉन्टेक्स्ट आंतरिक को डीएएल में रखना चाहिए एल 2 एस-विशिष्ट चीजों (एल 2 एस प्रश्न आदि) से बचने के लिए कक्षा बीएलएल में उलझ जाती है।

जेएमएचओ। http://www.thinqlinq.com/post.aspx/title/linq-tools

0

मैं LINQ के साथ लगता है दाल और BLL अवधारणाओं सार्थक नहीं रह रहे हैं:


के बाद से दूसरों L2S उपकरण उल्लेख किया है, यहाँ क्या वहाँ बाहर है की अधिक विस्तृत जानकारी सारांश है। इसलिए मैंने कोडक (पैरेंट) फ़ोल्डर के तहत 'डोमेन' फ़ोल्डर के तहत linq कक्षाओं और कुछ गेटर्स & सेटर्स लगाए। तब मैंने 'रिपोजिटरी' कक्षाएं और 'फ़ॉन्टएंड' कक्षाएं बनाईं।

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