2008-09-09 9 views
5

यह किसी भी भाषा के लिए विशिष्ट नहीं है, यह केवल सर्वोत्तम प्रथाओं के बारे में है। मैं जेपीए/हाइबरनेट का उपयोग कर रहा हूं (लेकिन यह कोई अन्य ओआरएम समाधान हो सकता है) और मैं जानना चाहता हूं कि आप इस स्थिति से कैसे निपटते हैं: मान लीजिए कि आपके पास कुछ ऐसा प्रश्न है जो किसी भी द्वारा प्रदर्शित नहीं किया गया है आपके डोमेन कक्षाएं क्या आप उस विशिष्ट क्वेरी का प्रतिनिधित्व करने के लिए एक विशिष्ट कक्षा बनाते हैं? क्या आप किसी अन्य प्रकार की ऑब्जेक्ट (सरणी, मानचित्र ...) में क्वेरी वापस करते हैं कुछ अन्य समाधान? मैं आपके अनुभवों और सर्वोत्तम प्रथाओं के बारे में जानना चाहता हूं।उन प्रश्नों के साथ क्या करना है जिनके पास डोमेन मॉडल में कोई प्रतिनिधित्व नहीं है?

पीएस वास्तव में मैं विशिष्ट प्रश्नों के लिए विशिष्ट objetcs बना रहा हूँ।

उत्तर

0

मैं आमतौर पर एक फ़ंक्शन लिखता हूं जो SQL का उपयोग करके एक क्वेरी करता है और फिर परिणामों को या तो सूची या शब्दकोश में डालता है (जावा में, मैं या तो एक ऐरेलिस्ट या हैश मैप का उपयोग करता हूं)।

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

चूंकि हम विशेष रूप से जावा से बात कर रहे हैं, इसलिए मैं निश्चित रूप से एक अलग फ़ाइल में एक नई कक्षा नहीं बनाऊंगा। हालांकि, केवल एक वर्ग में आवश्यक प्रश्नों के लिए, आप उस वर्ग द्वारा आवश्यक क्वेरी (ओं) उत्पन्न करने के लिए आवश्यक केवल फ़ंक्शन के साथ एक निजी स्थिर आंतरिक कक्षा बना सकते हैं।

0

कुछ प्रकार के प्रबंधक में कार्यक्षमता को लपेटने का विचार हमेशा अच्छा होता है। यह स्कीमा परिवर्तनों के कारण बेहतर परीक्षण और प्रबंधन के लिए अनुमति देता है।

एप्लिकेशन में आसान पुन: उपयोग करने की भी अनुमति देता है। कभी सीधे एसक्यूएल डालें !!! हाइबरनेट के लिए मैंने इस के लिए एचक्यूएल महान पाया है। विशेष रूप से, यदि आप नामांकित प्रश्नों का उपयोग कर सकते हैं। फ़िल्टर मान जोड़ने आदि से सावधान रहें आदि "स्ट्रिंग एपेंड" का उपयोग करें, पैरामीटर का उपयोग करें (क्या हम एसक्यूएल इंजेक्शन कह सकते हैं?)। भले ही SQL शामिल होने या मानदंड के संदर्भ में गतिशील है, फिर भी किसी प्रकार के प्रबंधक में कोई फ़ंक्शन हमेशा सर्वोत्तम होता है।

1

हमारे पास ऐसी स्थिति है जो आपके जैसा ही लगता है।

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

+0

यही वह है जो मैं अब कर रहा हूं। मुझे यह एक और व्यावहारिक समाधान मिल गया है और मुझे लगता है कि अन्य लोग भी ऐसा ही कर रहे हैं। खैर बहुत अच्छा! –

0

@DrPizza

मैं और अधिक विशिष्ट होगा। हम एक डेटाबेस

USER 
PROJECT 
TASK 
USER to TASK 1:n 
PROJECT to TASK 1:n 

मैं एक प्रश्न है कि सभी परियोजनाओं की सूची लौटाता है, लेकिन यह भी दिखा कुछ समूहीकृत जानकारी है (सभी कार्य, खुले कार्य, कार्य बंद) में तीन टेबल है। जब लौटे, क्वेरी की तरह इस

PROJECTID: 1 
NAME: New Web Site 
ALLTASK: 10 
OPENTASK: 7 
CLOSEDTASK: 3 

मैं नहीं है किसी भी डोमेन वर्ग है कि इस जानकारी का प्रतिनिधित्व कर सकता है और मैं परियोजना कक्षा में विशिष्ट विधियों बनाना चाहते हैं नहीं है (getAllTasks की तरह, getOpenTasks) की वजह से प्रत्येक लग रहा है ये विधियां एक नई क्वेरी ट्रिगर करेंगी। तो सवाल यह है कि: मैं उस जानकारी को पकड़ने के लिए एक नई कक्षा (ProjectTasksQuery की तरह somenthing) बनाते हैं? मैं सरणी या मानचित्र के भीतर जानकारी वापस करता हूं? कुछ और?

0

Data Transfer Objects पढ़ने के बाद आप बेहतर महसूस कर सकते हैं। कुछ लोग plain don't like them, लेकिन अगर यह आपके लिए उपयुक्त फिट लगता है, तो शायद यह है।

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

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