2009-06-28 18 views
13

मुझे .NET के साथ डेटा एक्सेस लेयर डिज़ाइन करना है जो शायद एक ही रिलेशनशिप डिज़ाइन के साथ एक से अधिक डेटाबेस प्रबंधन सिस्टम (माइस्क्ल और एसक्यूएल सर्वर) का उपयोग करेगा।डेटा एक्सेस लेयर डिज़ाइन पैटर्न

असल में, इसे एक डेटाबेस से दूसरे डेटाबेस में स्विच करना आसान होना चाहिए, इसलिए मैं आपको कुछ वेब साइट्स या किताबों की सिफारिश करना चाहता हूं जो सामान्य डिजाइन पैटर्न या सामान्य रूप से इसे लागू करने के लिए आपके लिए उपयोगी हैं डेटा एक्सेस परत की तरह।

धन्यवाद।

उत्तर

12

मैं मार्टिन Fowler द्वारा उद्यम अनुप्रयोग वास्तुकला के पैटर्न की सिफारिश को तैयार हैं।

प्रतिमानों की सूची अपने website

DataMapper पैटर्न पर भी है भी प्रासंगिक है।

+0

मैं वर्तमान में इस पुस्तक को पढ़ रहा हूं और मैं पूरी तरह से इसकी अनुशंसा कर सकता हूं! यह बस महान है! +1 –

0

मुझे ADO.NET मिला है इसके लिए बहुत उपयोगी है। इसमें आपके द्वारा उपयोग किए जाने वाले डेटाबेस से स्वतंत्र डेटा एक्सेस लेयर बनाने के लिए आवश्यक सभी सुविधाएं हैं।

0

NHibernate परिदृश्य के इस प्रकार संभाल करने के लिए डिज़ाइन किया गया है अगर आप को जानने के लिए यह

+0

मानक डेटासेट क्लास इस तरह के परिदृश्य को भी संभालता है, है ना? –

+0

हाँ आप सही हैं लेकिन NHibernate आपको उच्च स्तर के अमूर्तता प्रदान करता है (उदाहरण के लिए आप अब एसक्यूएल नहीं लिखते हैं, लेकिन एनएचबीर्नेट की अंतर्निहित int क्वेरी भाषा या LINC का उपयोग होने पर इसका उपयोग करते हैं) और आपके डेटा मॉडल को दूसरे पर पोर्ट करना थोड़ा आसान बनाता है डेटाबेस इंजन। – oscarkuo

2

सबसे आसान समाधान ओआरएम का उपयोग करना होगा। LLBLGen. एडाप्टर मॉडल का उपयोग करके आप उसी व्यवसाय ऑब्जेक्ट्स का उपयोग करते समय डेटा प्रदाताओं के बीच स्विच कर सकते हैं। यह MySQL और SQL सर्वर दोनों के लिए कोड उत्पन्न कर सकता है।

+0

@ बॉब: एक ओआरएम अच्छा है, लेकिन उसके प्रश्न के लिए एक की आवश्यकता नहीं है; केवल डेटाबेस स्विच करने के लिए। एडीओ.NET प्रौद्योगिकियों में से कोई भी उसके लिए ऐसा करेगा। –

+0

AFAIK ADO.NEt उदाहरण के लिए पीएल/एसक्यूएल और टीएसक्यूएल के बीच मतभेदों को हल नहीं करेगा, हालांकि यह होगा। एक अच्छा ओआरएम अमूर्तता प्रदान करेगा और आपके लिए एसक्यूएल भाग करता है। –

8

मुझे इंटरफ़ेस आधारित डीबी एक्सेस का उपयोग करना पसंद है। Ado.net के लिए हर डाटाबेस प्रदाता बुनियादी इंटरफेस को लागू करता है, और जब आप उन्हें इस्तेमाल अपने कोड कुछ ऐसा दिखाई देगा:

public static IDbConnection GetConnection(string connectionName) 
{ 
    ConnectionStringSettings ConnectString = ConfigurationManager.ConnectionStrings[connectionName]; 
    DbProviderFactory Factory = DbProviderFactories.GetFactory(ConnectString.ProviderName); 
    IDbConnection Connection = Factory.CreateConnection(); 
    Connection.ConnectionString = ConnectString.ConnectionString; 
    return Connection; 
} 

उसके बाद, आप डाटाबेस के साथ संवाद करने की जरूरत है जब: इस तकनीक के साथ

public static DataTable Dummy() 
{ 
    using (IDbConnection Connection = GetConnection("SiteSqlServer")) 
    { 
    IDbCommand Command = Connection.CreateCommand(); 
    Command.CommandText = "DummyCommand"; 
    Command.CommandType = CommandType.StoredProcedure; 

    Connection.Open(); 

    using (IDataReader reader = Command.ExecuteReader()) 
    { 
     DataTable Result = new DataTable(); 
     Result.Load(reader); 
     return Result; 
    } 
    } 
} 

आप पूरी तरह से डीबी स्वतंत्र डीएएल बना सकते हैं। निश्चित रूप से कुछ जटिल परिदृश्यों के लिए यह पर्याप्त नहीं है। लेकिन ज्यादातर यह काम करेगा, और आपको विभिन्न बाहरी libs की आवश्यकता नहीं है।

2

आम तौर पर, मैं Patterns of Enterprise Application Architecture की दूसरी जॉन नोलन की सिफारिश करता हूं।

अधिक विशेष रूप से, मैं हमेशा अनुशंसा करता हूं कि आप इंटरफ़ेस के पीछे अपना डेटा एक्सेस लेयर छुपाएं और रन-टाइम पर अपने डोमेन लॉजिक में किसी विशेष डेटा एक्सेस घटक को इंजेक्ट करने के लिए निर्भरता इंजेक्शन का उपयोग करें।

आप निर्भरता इंजेक्शन कंटेनर या do it manually का उपयोग कर सकते हैं।

तकनीकी पक्ष पर मैं माइक्रोसॉफ्ट के Entity Framework की सिफारिश करता हूं, क्योंकि आपकी डेटा एक्सेस आवश्यकताओं को डेटाबेस के संबंध में बाध्य होना प्रतीत होता है। एंटिटी फ्रेमवर्क माइक्रोसॉफ्ट के आधिकारिक ओआर/एम है और इसमें कई अलग-अलग आरडीबीएमएस, साथ ही LINQ समर्थन के लिए प्रदाता हैं।

1

यह वास्तव में आपकी परत के आकार और आपके विकासशील उत्पाद के प्रकार पर निर्भर करता है। यदि यह काफी अच्छी तरह से निहित है तो ADO.NET शायद आदर्श होगा। यदि यह एक बड़ी डीएएल परत है, और बहु-लक्षित डीबीएमएस के ग्रीनफील्ड विकास को ओआरएम उपकरण का उपयोग करना सबसे अच्छा है। वे तेज़, कुशल और परिपक्व उत्पाद हैं, और केवल एक पैरामीटर को बदलकर, पुनः लक्ष्यीकरण को दूसरे डीबी में सक्षम कर सकते हैं। स्थिर एडीओ लिखना, विरासत में गुजर रहा है।

वहाँ कई ORM उपकरण जो काम है, सब काम slightlty अलग ढंग से कर सकते हैं, और आपके बजट पर निर्भर कर रहे हैं, अपनी टीम आदि के आकार वे या तो NHibernate की तरह एक मानचित्रण वर्ग लिखते हैं, या के माध्यम से काम करने के लिए होने से काम प्रतिबिंब, यानी विशेषता मार्कअप।

मुफ्त में, यानी ओपन सोर्स, यदि आपका स्कींट, एनएचबेर्नेट आदर्श है। मैं फिलहाल इसका उपयोग कर रहा हूं, डीएएल परत बनाने के लिए, एक बड़े enteprise उत्पाद के लिए। यह उत्कृष्ट है, लेकिन मास्टर के लिए कुछ समय ले लो। NHibernate के साथ आप मानचित्रण कक्षाओं को परिभाषित करते हैं, जो निष्पादित होने पर आपके लिए डीबी मॉडल उत्पन्न करते हैं। यह संग्रहित प्रक्रियाओं का समर्थन करता है। नकारात्मकता यह है कि सीखने में कुछ समय लगता है, खासकर जटिल डेटा को सही तरीके से मैप करने के आसपास। उत्कृष्ट है। इसमें नमूने और अन्य परियोजनाओं का एक बड़ा बंडल है जो इसका उपयोग करता है। Koders.com देखें।

यदि आपके पास कुछ बजट है, तो एलएलबीएलजेन आदर्श है। यह दृढ़ता से टाइप किया जाता है और संग्रहित प्रक्रियाओं का भी समर्थन करता है।

यदि पहले से ही कुछ डेटा मॉडल उपलब्ध हैं, तो टियर डेवलपर आदर्श है। यह अनिवार्य रूप से मुफ़्त है, और आपके डेटाबेस मॉडल से कक्षाओं के एक सेट को विकसित करके काम करता है। MySQL के लिए मैपर केवल एकमात्र नकारात्मक पक्ष है। यह एक enteprise क्लास उत्पाद है जिसे ncache का समर्थन करने के लिए स्वतंत्र किया गया है, और यह एक संभावित दृष्टिकोण है।

यदि आप एमएस के साथ रहना चाहते हैं, तो वे ओआरएम की ओर बढ़ रहे हैं, और एडीओ.NET इकाई फ्रेमवर्क नामक एक उत्पाद है। कार्यात्मक रूप से यह ऊपर परिभाषित उपकरण के रूप में पूर्ण नहीं है। परिपक्वता में इसकी लगभग 3 पीढ़ी पीछे है। यह बनाम 2008 एसपी 1 में उपलब्ध है। MySQL के लिए कनेक्टर एक लागत होगी।

इसके अलावा, आप LINQ का उपयोग कर सकते हैं। अगर आपको कनेक्टर की भी आवश्यकता होगी तो यह MySQL को भी लक्षित करेगा।

आदर्श रूप से, आपकी सर्वश्रेष्ठ शर्त ORM के साथ है। यदि आप ओपन सोर्स का समर्थन नहीं कर सकते हैं, और बजट है, तो

आशा है कि मदद करता है।

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