2008-08-11 11 views
7

डेटाबेस परत से कनेक्ट करने और उससे संपर्क करने के कई तरीके हैं। जावा में, उदाहरण के लिए, आम उपयोगों के कच्चे एसक्यूएल की JDBC निरिक्षण आदिअपनी प्रोग्रामिंग भाषा से डेटाबेस के साथ बातचीत करने का आपका पसंदीदा तरीका क्या है?

अपनी भाषा है, जो विकल्प अपनी पसंद है और क्यों है में कर रहे हैं, रिलेशनल मानचित्रकारों वस्तु, JDBCTemplate (Spring), संग्रहित प्रक्रियाओं? आप दूसरों पर कब विचार करेंगे?

उत्तर

4

ओआरएम हर बार, कम से कम मुझे डेटाबेस के बारे में बेहतर सोचना होगा।

+0

क्या होगा यदि आप डेटाबेस से 10000 पंक्तियां पढ़ना चाहते हैं और कुल मिलाकर स्टोर करना चाहते हैं? जब आप कर सकते थे नेटवर्क पर सब कुछ खींचें: कुल में डालें .. विवरण से चुनें? –

+0

एक ओआरएम के साथ, आपको कुल प्राप्त करने के लिए 10000 पंक्तियों को पढ़ने की आवश्यकता नहीं है। उदाहरण के लिए, LinqToSql में एक संपत्ति का योग बनाने के लिए एक Sum विधि का उपयोग करना संभव है, जिसे तब उचित SQL में परिवर्तित किया जाता है जो SQL सर्वर को सभी पंक्तियों को वापस किए बिना योग की गणना करने देता है। –

+0

@Ole: LinqToSql (जो केवल SQL सर्वर का समर्थन करता है, और एंटीटी फ्रेमवर्क के पक्ष में पहले से ही मर चुका है) अभी भी एक ब्लैक बॉक्स है, क्यों स्वयं SQL को नहीं लिखते? और यदि आप एक संग्रहीत प्रक्रिया में सारांश तर्क डालते हैं, तो आपको एप्लिकेशन को अपनी तालिकाओं में कच्ची पहुंच देने की आवश्यकता नहीं है। – ObiWanKenobi

2

मैं एक व्यापार वस्तु मॉडल परत (ऑब्जेक्ट्स और ऑब्जेक्ट्स के कोलेसिटन) बनाना पसंद करता हूं।

मैं प्रत्येक ऑब्जेक्ट/संग्रह में डेटाबेस के साथ बातचीत करने की क्षमता बनाता हूं (SQL सर्वर के लिए, मैं System.Data.SqlClient का उपयोग करता हूं)। मैंने SQL सर्वर, MySQL और Oracle के लिए इस पैटर्न का उपयोग किया है।

फिर मैं अपने आवेदन कोड से वस्तुओं से बातचीत करता हूं।

ऑब्जेक्ट्स में अपना डेटाबेस सारण करके, मेरा एप्लिकेशन कोड बैकएंड डेटाबेस के बावजूद लगातार है।

4

यहाँ से मेरे लिए जाने का रास्ता है मैं वास्तव में काम करने के 3 + 1 स्तरीय तरीका पसंद है। यूआई के लिए एक स्तर, व्यापार तर्क के लिए एक, और लगातार डेटा के लिए। आखिरी बार आप कहते हैं? डोमेन ऑब्जेक्ट्स और इंटरफेस। इससे किसी भी एक या दो मुख्य स्तरों को डोमेन "टियर" लोड करना संभव हो जाता है, और कोड को काम करना चाहिए।

यह dependency injection और Inversion of Control सिद्धांतों पर भारी निर्भर करता है। डेटा/दृढ़ता स्तर केवल दो चीजें करता है। यह डेटा बनाता है, पढ़ता है, अद्यतन करता है और हटा देता है, और इसे डोमेन ऑब्जेक्ट प्रारूप में मैप करता है।

UI स्तर सटीक विपरीत करता है। यह डेटा को प्रदर्शित करता है और प्राप्त करता है जिस तरह से उपयोगकर्ता संबंधित हो सकता है, और डोमेन ऑब्जेक्ट प्रारूप से उस आउटपुट/इनपुट को मानचित्र करता है।

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

डोमेन ऑब्जेक्ट्स में कोई तर्क नहीं है, वे केवल स्तर के बीच डेटा पास करने के लिए कंटेनर हैं। इसका मतलब यह है कि आप निर्भरताओं के बारे में सोचने के बिना डोमेन ऑब्जेक्ट्स और इंटरफेस लोड कर सकते हैं।

दिन के अंत में मुझे लगता है कि मेरे पास स्पष्ट रूप से अलग-अलग स्तरों के साथ एक स्पष्ट स्पष्ट कोड आधार है। और कुछ सख्त इंटरफेस और अच्छी बेस क्लास के साथ कोडिंग का अधिकांश हिस्सा सिर्फ सॉफ्टवेयर को बता रहा है कि एक्स होने पर क्या करना है। बस यह कैसे होना चाहिए।

</rant> 

संपादित करें: ओह, हाँ। यह LINQ, SubSonic, और अन्य ORM दोनों के लिए सच है।

1

ORM वास्तव में शानदार है।

मैं अजगर के भीतर काम करते समय एसक्यूएल कीमिया का उपयोग करता हूं - यह लगभग हर डीबीएमएस के साथ काम करता है जो मैंने चलाया है।

मैकोज़ एक्स पर हल्के डेटा-संचालित अनुप्रयोगों के लिए, मैं कोर डेटा का उपयोग करता हूं, जिसमें एक्सकोड के माध्यम से एक महान डेटा मॉडलिंग टूल उपलब्ध है।

इनमें से दोनों दिखाते हैं कि ओआरएम सही है। मुझे ईजेबी के साथ कम सफलता और आनंद मिला है।

1

मुझे अभी तक LINQ दुनिया में नहीं मिला है, लेकिन मैं वास्तव में डेटाटेबल/टेबल एडाप्टर कक्षाओं से प्यार करने आया हूं जो विजुअल स्टूडियो ने एक्सएसडी डेटासेट के माध्यम से किया है। मेरे डेटाबेस स्कीमा बनाने के बाद कुछ ड्रैग और क्लिक के माध्यम से, अब मेरे पास डेटासेट/डेटाटेबल ऑब्जेक्ट है जो दृढ़ता से टाइप किया गया है और मेरे पास एडाप्टर विधियां हैं जो मेरे सभी सीआरयूडी स्टेटमेंट्स के लिए मेरी संग्रहीत प्रक्रियाओं में पैरामीट्रिज्ड प्रश्नों का उपयोग कर रही हैं। यह उन प्रक्रियाओं में से कुछ के लिए क्वेरी टेबल एडेप्टर भी बनाएगा जो सीधे किसी तालिका से बंधे नहीं हैं।

ओह, और यदि आपने अभी तक संग्रहित प्रक्रियाएं नहीं बनाई हैं और केवल टेबल हैं, तो विज़ार्ड प्रक्रियाओं या आपके लिए एसक्यूएल कथन तैयार करेगा।

यह विजुअल स्टूडियो 2005 के बाद से बाहर रहा है और मेरे नए वेब ऐप्स के साथ मेरे "संरचना" समय पर भारी कटौती कर चुका है और मैं व्यवसाय और प्रस्तुति तर्क पर अधिक ध्यान केंद्रित कर सकता हूं।

0

सी # में मैं कुछ भी नया करने के लिए LINQ to SQL प्यार करता हूँ, लेकिन मैं वास्तव में .netTiers + CodeSmith Generator का उपयोग कर डेटाबेस अगर मैं .NET 2.0 पर सी # का उपयोग कर रहा हो के लिए एक त्वरित और गंदे डेटा परत प्राप्त करने के लिए की तरह।

3

रेल पर 0-पर रूबी ने जो कुछ भी देखा है, उसके साथ फर्श को मिटा देता है। LINQ ऐसा लगता है कि यह कुछ मामलों में बेहतर हो सकता है, लेकिन ActiveRecord बस इतना लचीला है।

0

मैं Hibernate एक बहुत :)

मैं जानता हूँ कि यह एक सीखने की अवस्था है, लेकिन एक बार आप इसे महारत हासिल है, यह काफी अच्छा है की तरह है।

जरूरत नहीं कहने के लिए, मैं 3.5 एसपी 1 .NET में नई Entity Framework पर मेरे हाथ पाने के लिए इंतजार नहीं कर सकता (मैं जानता हूँ कि यह पहले से ही उपलब्ध है, लेकिन मैं थोड़ा एक्सएमएल टाइप करने के लिए आलसी हूँ :))

0

ActiveRecord , जो फाउलर के Patterns of Enterprise Architecture में पहले (मुझे लगता है) दस्तावेज एक पैटर्न है। मेरा मानना ​​है कि यह रूबी के अलावा अन्य भाषाओं में लागू किया गया है, हालांकि यह रेल में कोर टेक्नोलॉजी के रूप में जाना जाता है। जो भी हो, यह डेटाबेस का एक साफ अमूर्त है, हालांकि मुझे यह स्वीकार करना है कि मुझे थोड़ा सा गड़बड़ है और find_by_sql क्षेत्र में। लेकिन यह सिर्फ मुझे हो सकता है।

लेकिन (अब गड़बड़ी ओल्ड मैन टोपी डालना) दुनिया के सभी ओआरएम एसक्यूएल के अच्छे ज्ञान के लिए कोई विकल्प नहीं हैं, जिसके बिना मैं वास्तव में आरडीबीएमएस की अनुमति के लिए उपयोग नहीं करना चाहता हूं।

0

वर्तमान में हम ODAC उपयोग कर रहे हैं Oracle डाटाबेस से बात और Oracle संकुल का एक बहुत (PL/SQL) का उपयोग करें। एन-स्तरीय सिस्टम RemObjects के माध्यम से किया जाता है जिसका अर्थ है कि हमारे क्लाइंट में इसमें कोई एसक्यूएल नहीं है और केवल HTTP अनुरोध भेजने की क्षमता की आवश्यकता है ताकि कोई इंस्टॉलेशन ओवरहेड न हो।

यह सब बोर्लैंड डेल्फी का उपयोग करके किया जाता है और उत्पादन वातावरण में 2 साल तक चल रहा है।

1

हम एक मिश्रित दृष्टिकोण का उपयोग, क्या आवेदन के भीतर विशेष स्थिति के लिए सूट पर निर्भर करता है:

  • जब जानकारी का एक पेज लायक प्रदर्शित करने और एक उपयोगकर्ता के लिए अद्यतन करने के लिए हम उपयोग करने के लिए हाइबरनेट
  • पढ़ने अपडेट के बैच को प्रोसेस करते समय या संक्षेप में जहां अधिकांश डेटा पहले से ही डेटाबेस में है (उदाहरण के लिए दिन प्रसंस्करण का अंत) हम पीएल/एसक्यूएल (और सेट में सोचने की कोशिश करते हैं) का उपयोग करते हैं
  • जब कोई उपयोगकर्ता कोई खोज करता है या चलाता है सारांश रिपोर्ट, हम कुछ एसक्यूएल बनाने के लिए ibatis sqlmaps का उपयोग करते हैं और केवल उन फ़ील्ड को वापस लाते हैं जिनमें हम रुचि रखते हैं (नहीं टी प्रत्येक स्तंभ और निश्चित रूप से नहीं किसी भी अनावश्यक बच्चे पंक्तियाँ, urggh)
  • कुछ भी बहुत जल्दी चलाने के लिए है, हम उपयोग करेंगे जो कुछ भी दृष्टिकोण सबसे अच्छा

काम करता है यह जावा/Oracle के साथ है।

0

हम ओरेकल.ऑलेडीबीप्रोवाइडर के माध्यम से डेल्फी और ओरेकल डेटा एक्सेस कंपोनेंट्स (ओडीएसी) और एडीओ का उपयोग करते हैं।

0

पसंदीदा तरीका एक जेमस्टोन ऑब्जेक्ट रिपोजिटरी के साथ स्मॉलटॉक का उपयोग करना है। क्यूं कर? निपटने के लिए कोई ओआरएम समस्या नहीं है। अगर मैं अपने नियोक्ता द्वारा मजबूर या धमकी देता हूं तो मैं केवल कुछ और विचार करता हूं।

0

मेरा पसंदीदा तरीका ऑब्जेक्ट एब्स्ट्रक्शन लेयर रखना है। आदर्श रूप में, यह केवल स्थान है जो SQL के साथ काम करता है। लेकिन व्यवहार में, वस्तुओं को कभी-कभी एसक्यूएल-वाई चीजों को भी करने की ज़रूरत होती है। लेकिन वस्तु के बाहर कुछ भी नहीं।

अब तक, मैंने खुद को ऐसी परतें लिखी हैं क्योंकि जो उपलब्ध था वह बहुत अजीब, बहुत धीमी या बहुत बड़ी थी।

0

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

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