क्या कार्यान्वयन कार्यान्वयन अज्ञेय वास्तव में इसके लायक है?


22

मेरे पास एक प्रोजेक्ट है जो मैं वर्तमान में टॉमकैट, स्प्रिंग 4, स्प्रिंग सिक्योरिटी, MySQL और JPA w / हाइबरनेट का उपयोग करके काम कर रहा हूं।

मैंने जेपीए को उस दृष्टिकोण से चुना, जो यह माना जाता है कि ओआरएम प्रदाताओं के अंतर्निहित कार्यान्वयन को सहज बनाने के लिए, या कम से कम कम दर्दनाक है। मैं कहूंगा कि यह मानसिक रूप से कार्यान्वयन पर कल्पना का उपयोग कर रहा है (JAX-RS) जावा विकास समुदाय का डिफ़ॉल्ट दृष्टिकोण है।

मैं उत्सुक हूँ अगर यह वास्तव में एक काम करने लायक है। मुझे यकीन है कि अगर मैंने सीधे हाइबरनेट का उपयोग किया तो मुझे कुछ शक्ति प्राप्त होगी क्योंकि मैं उन विशेषताओं का उपयोग कर सकता हूं जो मुख्य जेपीए विनिर्देश का हिस्सा नहीं हैं।

मेरी चिंता का एक हिस्सा YAGNI के विचार से आता है। मैं अनिवार्य रूप से एक विशिष्ट शैली और फैशन में प्रोग्रामिंग कर रहा हूं (हाइबरनेट के बजाय जेपीए का उपयोग कर रहा हूं) ताकि भविष्य में कुछ बिंदु पर मैं अपने ओआरएम कार्यान्वयन को स्वैप कर सकूं। मुझे बहुत संदेह है कि यह उत्पाद के जीवन पर कभी भी होगा, इसलिए मैं अनिवार्य रूप से उस चीज में प्रयास कर रहा हूं जिसका लाभ शायद मैं कभी नहीं उठाऊंगा।

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


आप इकाई परीक्षण करते हैं? कार्यान्वयन पर स्विच करने का मतलब यह नहीं है कि तैयार उत्पाद।
मृदोसु

जवाबों:


26

ताकि भविष्य में किसी समय मैं अपने ORM कार्यान्वयन को स्वैप कर सकूं। मुझे बहुत संदेह है कि यह उत्पाद के जीवन पर कभी भी घटित होगा, इसलिए मैं अनिवार्य रूप से उस चीज में प्रयास कर रहा हूं जिसे मैं शायद कभी लाभ नहीं उठा पाऊंगा

मेरे अनुभव में, विशिष्ट उद्यम परियोजना कभी भी समाप्त नहीं होती है:

  1. डेटाबेस
  2. ORM
  3. भाषा

मुझे संख्याओं का पता नहीं है, लेकिन 2-स्तरीय ऐप्स का प्रतिशत मैंने लागू देखा है और फिर उन चीजों में से एक को बदलना शायद 10% से कम होगा। यदि ऐसा होता है, तो यह दुर्लभ है, और यह आमतौर पर परियोजना के पहले 2-3 महीनों के भीतर होता है जब लोग अभी भी खोज मोड में हैं। मुझे पता है कि ज्यादातर प्रणालियां 8-10 साल बाद भी अपने मूल प्लेटफार्मों पर चल रही हैं।

अधिक बार एक ORM को स्वैप करने से, क्या आप जानना चाहते हैं कि मैंने और क्या देखा है? प्रदर्शन समस्याओं के कारण SQL पर ड्रॉप करने के लिए ORM को पूरी तरह से हटा देना। तो कोई बात नहीं, उस मामले में, आपका सामान फिर से लिखना होगा।

जहां तक ​​कार्यान्वयन अज्ञेय का है, एक मिथक है। यह वास्तव में नीचे डंप करने के लिए मात्रा है। इसलिए मेरा दृष्टिकोण डेटा लेयर को गले लगाना है। इसे अपनी भाषा और डिजाइन का प्रथम श्रेणी का हिस्सा बनाएं। यह खुशहाल, अधिक सफल परियोजनाओं के लिए बनाता है।


3
पूरी तरह से सहमत हूं, यह ज्यादातर उन मुद्दों का आधार है जो मेरे पास आमतौर पर हाइबरनेट के साथ हैं - यह डेटाबेस को स्वैप करने की सुविधा के लिए SQL को उत्पन्न करता है। यह मानकर "एक एक्सेस" भी करता है कि यह टेबल कैश स्टोर करने के लिए सबसे अच्छी जगह है जो केवल शायद ही कभी आईएमओ है। Hibernate के लिए SQL ट्यूनिंग मॉड्यूल में ड्रॉप करने का मामला है जो HQL को Oracle, MySQL, SQL सर्वर आदि में बदल देता है और SQL को अनुकूलित करता है और RDBMS बेहतर काम करता है।
mcottle

5

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

जावा एप्लिकेशन लिखने वाले अधिकांश लोगों के लिए, यह काफी हद तक अप्रासंगिक है।


उन अनुप्रयोगों का उल्लेख करने के लिए +1 जहां कई DBMS के लिए समर्थन एक सुविधा है। यदि आप "स्व-होस्टिंग" के लिए अपने आवेदन की पेशकश करते हैं (कुछ उद्यम ग्राहकों को वांछनीय लगता है), तो आपको इसकी आवश्यकता हो सकती है। हालाँकि, आप शायद अभी भी एक ORM से चिपके रह सकते हैं।
सेल्के

4

मेरे अनुभव से: नहीं, यह जेपीए / हाइबरनेट के मामले में इसके लायक नहीं है

"इंटरफ़ेस के लिए प्रोग्रामिंग" इसके लायक है जब यह जेपीए जैसे सामान की बात आती है?

यह है, लेकिन विशेष रूप से जेपीए के साथ इसका कोई लेना-देना नहीं है। आप हाइबरनेट के "इंटरफेस को प्रोग्रामिंग" कर सकते हैं। यह एक मानक के तहत एक रूपरेखा को छिपाने के बारे में नहीं है, यह एसओएलआईडी के बारे में है ।

क्या आपने वास्तव में किसी उत्पाद में पूरे ORM कार्यान्वयन की अदला-बदली की है?

हां और ना। हमारी कंपनी का एक उत्पाद आंशिक रूप से हाइबरनेट से jOOQ (जिसका JPA से कोई लेना-देना नहीं है) में स्थानांतरित हो गया। यह बिल्कुल "विशिष्ट उद्यम परियोजना" नहीं थी, जिसका @codenheim ने उल्लेख किया था, इसलिए स्वैपिंग संभव थी।

मुझे एक और JPA- संगत ORM के साथ हाइबरनेट की अदला-बदली का कोई मतलब नहीं दिख रहा है।

क्या आप कभी भी किसी भी तरह से एब्स्ट्रैक्शन से बचने में सक्षम हैं जैसे कि जेपीए लीक करना?

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


3

यहां पर विरोधाभास लगने के जोखिम पर, मैं कहूंगा कि हां, यह इसके लायक है। और यह नहीं है।

समस्या आपके ORM या डेटाबेस प्रदाता को स्विच करने में इतनी नहीं है। यह चिंताओं को अलग करने और चुस्त रहने के मुद्दे पर अधिक है।

एक बार जब आप एक पुस्तकालय के कुछ कार्यान्वयन विवरण पर भरोसा करना शुरू करते हैं, तो आप चिंताओं के गहन और गहन उलझनों को बनाना शुरू करते हैं।

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

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


1

कार्यान्वयन अज्ञेयवाद के साथ समस्या यह है कि आप अपने समय में एक डेवलपर के रूप में, किसी भी तरह से समय बर्बाद करेंगे।

मैंने कई परियोजनाएँ लिखी हैं, जिन्हें हमने एक इंटरफ़ेस में लिखने में समय बर्बाद किया है, जो तब किसी भी नए तरीके से उपयोग नहीं किए गए थे, कभी भी परिवर्तित नहीं हुए थे और बस 'वर्षों से' का उपयोग किया गया था

मैं भी सॉफ्टवेयर परिवर्तित समय है कि किसी को कभी भी परिवर्तित होने की आवश्यकता की उम्मीद की बर्बादी का एक भार बर्बाद कर दिया है।

एकमात्र वास्तविक अवलोकन जो मुझे करना है, वह यह है कि पूर्व बहुत कम दर्दनाक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.