जावा में दृढ़ता
पिछले कुछ वर्षों में, मैंने EJB 2.0, हाइबरनेट, जेपीए और घर में रहने वाली अवधारणाओं का उपयोग करके जावा में दृढ़ता के क्षेत्र में अनुभव एकत्र किया है। वे मुझे एक सीखने की अवस्था और बहुत सारी जटिलताएं महसूस कर रहे थे। इसके अलावा, एसक्यूएल के एक बड़े प्रशंसक के रूप में, मैंने यह भी सोचा कि कई एब्सट्रैक्शन मॉडल एसक्यूएल पर बहुत अधिक अमूर्तता प्रदान करते हैं, "मापदंड", "भविष्यवाणी", "प्रतिबंध" जैसी अवधारणाएं बनाते हैं जो बहुत अच्छी अवधारणाएं हैं, लेकिन एसक्यूएल नहीं।
जावा में दृढ़ता के अमूर्तता का सामान्य विचार ऑब्जेक्ट-रिलेशनल मॉडल पर आधारित लगता है, जहां RDBMS किसी भी तरह OO दुनिया के साथ मेल खाते हैं। ओआरएम-डिबेट हमेशा एक भावनात्मक रहा है, क्योंकि ऐसा कोई समाधान मौजूद नहीं है जो सभी को सूट करता हो - अगर ऐसा समाधान मौजूद भी हो सकता है।
jOOQ
ओआरएम से संबंधित समस्याओं से कैसे बचा जाए, इसके बारे में मेरी व्यक्तिगत पसंद संबंधपरक दुनिया से चिपकी रहती है। अब डेटा मॉडल प्रतिमान का चुनाव चर्चा का विषय नहीं होना चाहिए क्योंकि यह एक व्यक्तिगत प्राथमिकता है, या डेटा मॉडल सबसे अच्छी समस्या है। मैं जो चर्चा शुरू करना चाहता हूं, वह मेरे अपने दृढ़ता उपकरण के आसपास है जिसे jOOQ कहा जाता है । मैंने आधुनिक दृढ़ता वाले उपकरणों के अधिकांश लाभ प्रदान करने के लिए jOOQ डिज़ाइन किया है:
- SQL पर आधारित एक डोमेन विशिष्ट भाषा
- स्रोत कोड पीढ़ी जावा के लिए अंतर्निहित डेटाबेस स्कीमा मैपिंग
- कई RDBMS के लिए समर्थन
कुछ सुविधाओं को जोड़ना जो कुछ आधुनिक दृढ़ता के उपकरण हैं (मुझे गलत होने पर सही करें):
- जटिल एसक्यूएल के लिए समर्थन - यूनियनों, नेस्टेड चयन, स्व-जॉइन, अलियासिंग, केस क्लॉज, अंकगणितीय अभिव्यक्ति
- गैर-मानक एसक्यूएल - संग्रहीत प्रक्रियाओं, यूडीटी, ईएनयूएमएस, देशी कार्यों, विश्लेषणात्मक कार्यों के लिए समर्थन
: कृपया अधिक जानकारी के लिए प्रलेखन पेज पर विचार http://www.jooq.org/learn.php । आप देखेंगे कि Linq में C # के लिए बहुत ही समान दृष्टिकोण लागू किया गया है, हालांकि Linq SQL के लिए विशेष रूप से डिज़ाइन नहीं किया गया है।
प्रश्न
अब, यह कहते हुए कि मैं एसक्यूएल का बहुत बड़ा प्रशंसक हूं, मुझे आश्चर्य है कि क्या अन्य डेवलपर्स jOOQ (या लाइनर) के लिए मेरा उत्साह साझा करेंगे या नहीं। क्या इस तरह का दृष्टिकोण दृढ़ता को बनाए रखना एक व्यवहार्य है? आपके द्वारा देखे जा सकने वाले फायदे / नुकसान क्या हैं? मैं jOOQ कैसे सुधार सकता हूं, और आपकी राय में क्या कमी है? मैं गलत या व्यावहारिक रूप से कहां गया?
महत्वपूर्ण लेकिन रचनात्मक जवाब की सराहना की
मैं समझता हूं कि बहस एक भावनात्मक है। वहाँ कई महान उपकरण हैं जो पहले से ही समान चीजें करते हैं। मैं जिस चीज में दिलचस्पी रखता हूं, वह आपके अपने अनुभव या लेखों के आधार पर महत्वपूर्ण लेकिन रचनात्मक प्रतिक्रिया है, जो आपने पढ़ी होगी।