शुभ रात्रि, Habr।
यह लेख हाइबरनेट में शुरू होने वाले लोगों की खोज को सुविधाजनक बनाने का प्रयास है और मेरे जैसे ही सवाल का सामना करना पड़ता है - अर्थात्,
इस उपकरण पर सही तरीके से कैसे लिखना है । (यह प्रोग्रामर के लिए विशेष रूप से उपयोगी होगा जो कमजोर टाइप की भाषाओं से जावा में आते हैं)। कोई कोड नहीं होगा, इस तकनीक का उपयोग करने के तरीके पर बुनियादी सिद्धांत होंगे। कट के नीचे लिखा सब कुछ मेरा IMHO है, समस्या के एकमात्र संभावित समाधान का दावा नहीं करता है।
इतना
तुरंत एक आरक्षण करें कि मेरा अनुभव
स्प्रिंग डेटा जेपीए के साथ था।
चूंकि हाइबरनेट एक उद्यम ढांचा है, इसलिए उस पर कोड उदाहरण ढूंढना कठिन है जो नियमित सीआरयूडी से अधिक गहरा है। यह तथ्य गंभीरता से समझ में आता है कि हाइबर में कैसे लिखना है, फ्रेमवर्क के डेवलपर्स ने खुद को अच्छे कोड की कल्पना कैसे की - नतीजतन, मुझे इस मुद्दे पर खुद ही सोचना पड़ा। मुझे यकीन है कि मैं अकेला नहीं हूं।
@
पहली बात जो आप नोटिस कर सकते हैं वह यह है कि अमूर्त के रूप में कोई डेटाबेस नहीं है। हाइबरनेट में, कोड में डेटाबेस पर पूर्ण नियंत्रण प्राप्त करने के लिए सब कुछ किया गया है (आप Google प्रबंधन कर सकते हैं)। आपका डेटाबेस डोमेन ऑब्जेक्ट्स है जो लगभग बेवकूफ भंडारण का कार्य करता है। इसलिए एक महत्वपूर्ण नियम: उनका उपयोग किसी और चीज के लिए नहीं बल्कि भंडारण के लिए करें। उन्हें डीटीओ के कार्यों को नहीं करना चाहिए जो उपयोगकर्ता इनपुट को स्वीकार करता है, और क्रमांकन के दौरान प्रदर्शन के रूप में काम नहीं करना चाहिए। उनके पंजे हैं।
अतुल्य लेकिन सच हैसामान्य तौर पर, यह आश्चर्य की बात है कि मैंने इंटरनेट के शैक्षिक खंड (अंग्रेजी सहित) में क्रमांकन के लिए अतिरिक्त कक्षाओं का उपयोग करने का एक उदाहरण नहीं देखा, उदाहरण के लिए, जोसन में। किसने कभी कहा कि यदि आपके पास एक REST सेवा है, तो आपको प्रदर्शन कक्षाओं के बारे में चिंता करने की ज़रूरत नहीं है?)
हाँ, और REST के लिए नहीं, अंतर्ज्ञान से पता चलता है कि एक अच्छे स्वर में, यह ग्राहक को केवल वही डेटा सेट देगा, जिसकी उसे ज़रूरत है, जबकि सभी डेटा तैयार है (और आलसी आरंभीकरण के लिए क्लाइंट पर गेटर्स को कॉल करने की आवश्यकता नहीं थी)।
@
इसका तात्पर्य निम्नलिखित नियम से है - उन्हें उपयोग के प्रारूप की परवाह नहीं करनी चाहिए। चाहे हमें उत्पादों की एक सूची की आवश्यकता हो (जहां केवल नाम और विवरण होगा) या उत्पाद पृष्ठ (फ़ोटो और समीक्षाओं के साथ) - ग्राहक को एक मामले में
SimpleProductViewer (id, name, description)
, और दूसरे
ExtendedProductViewer (id, name, description, List(photos), List(reviews), rating)
SimpleProductViewer (id, name, description)
से एक
List
प्राप्त होगी
ExtendedProductViewer (id, name, description, List(photos), List(reviews), rating)
, जो कि उत्पाद सेवा वर्ग के तरीकों से उत्पन्न होगी और
केवल डेटा स्रोत के रूप में डोमेन कक्षाओं का उपयोग करेगी।
इनपुट के साथ एक ही बात। यह जावा है, यहाँ हर मामले के लिए विभिन्न क्षेत्रों के साथ डीटीओ करना ठीक है :)
एक उदाहरण के रूप में, मैं हैकनेड उत्पाद डोमेन के लिए वर्ग आधार बढ़ाऊंगा। हमारे पास पहले से क्या है:
- उत्पाद (डोमेन)
- दर्शक (सूचना के ग्राहक प्रदर्शन के लिए कक्षाएं, कोई भी संख्या हो सकती है)
- Dto (सूचना प्राप्त करने के लिए कक्षाएं किसी भी संख्या में हो सकती हैं)
- भंडार (डेटा प्राप्त करने के लिए)
- सेवा (या प्रबंधक) - अनियंत्रित व्यावसायिक तर्क के लिए एक ब्लैक बॉक्स, जो सभी पिछले बिंदुओं को जोड़ता है।
@
यह मुझे (ऐसा लगता है) लगता है कि जावा एंटरप्राइज बहुत अनुकूलित नहीं है (यह हाइबरनेट के अनुरोध पर पहले से ही देखा जा सकता है और बहुत ही तथ्य यह है कि ओओपी (हाइबरनेट) ने डेटाबेस संस्थाओं के प्रबंधन के लिए कंबल को संभाल लिया है)। इसलिए, मेरा मानना है कि इस संदर्भ में मुख्य बात फ्रेमवर्क के डेवलपर्स के विचारों के लिए कोड का पत्राचार है, न कि इष्टतम रणनीति।
@
यदि आप हाइबरनेट डोमेन को इस तरह से देखते हैं (केवल डेटा संग्रहण), तो
@ManyToOne
एक ऐसा तंत्र प्रतीत होता है, जिसका उपयोग इतनी बार नहीं किया जाता है और यह केवल पूरी तरह से निर्भर तालिकाओं पर लागू होता है - चित्र, समीक्षाएं, टिप्पणियाँ। सिद्धांत रूप में, यह सामान्य है - मेरी राय में, अपने डेटाबेस की मुख्य तालिकाओं में उनके प्रभाव को बढ़ाने के लिए आवश्यक नहीं है।
सारांश
- डोमेन का उपयोग केवल डेटा भंडारण के लिए करें, यह वांछनीय है कि वर्ग गुण लक्ष्य डेटाबेस तालिका में समाहित हैं, अर्थात, कुछ भी अतिश्योक्तिपूर्ण नहीं है (व्यापार तर्क द्वारा निर्धारित)।
- डोमेन को विस्तारित करने की कोशिश करने की आवश्यकता नहीं है - प्रदर्शन कक्षाओं का विस्तार करें, और केवल डेटा प्रदाता के रूप में डोमेन कक्षाओं का उपयोग करें।
- एक ही प्रकार की कक्षाओं का उत्पादन करने से डरो मत - समझ और उपयोग का लचीलापन अधिक महत्वपूर्ण है। अधिकतम जो कोड की मात्रा को कम करने के लिए किया जा सकता है, उन्हें डोमेन से विरासत में मिला है।
- अनुकूलन का पीछा न करें। जावा लड़कों के लिए यह महत्वपूर्ण नहीं है, हालांकि, निश्चित रूप से, यह सभी संदर्भ पर निर्भर करता है।
कुछ इस तरह।