2008-10-30 17 views
6

मैं ईजेबी 3 (हाइबरनेट + ऐप के लिए ग्लासफ़िश और वेब सेवा परत, वेब यूआई के लिए ग्लासफ़िश पर लिफ्ट) का उपयोग कर जावा में एक बहु-स्तरीय वित्तीय प्रसंस्करण अनुप्रयोग विकसित करने की प्रक्रिया में हूं और मैं मैं अपने व्यापार तर्क कहां रखना है इस सवाल के साथ संघर्ष कर रहा हूं।ईजेबी 3 बिजनेस लॉजिक पैटर्न और प्रैक्टिस

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

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

मेरा मूल प्रश्न यह है कि आप निर्णय लेने के लिए कौन से सिद्धांत और दिशानिर्देश सुझा सकते हैं कि व्यवसाय तर्क सत्र बीन या पीओजेओ में जाना चाहिए या नहीं? जटिल ऑब्जेक्ट ग्राफ़ दिए जाने पर, इकाई के आसनों को पारित करने के लिए यह कब समझ में आता है?

उत्तर

1

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

विकेट और मॉडलों की इसकी अवधारणा को इस निर्णय के साथ बहुत कुछ करना पड़ा। उनके लोड करने योग्य DetachableModel इकाइयों को साफ करता है जब वे उपयोग में नहीं होते हैं, जबकि अभी भी आईडी पर रहते हैं। एक लोड() विधि लागू की जाती है जो जानता है कि जब इकाई की आवश्यकता होती है तो इकाई को कैसे प्राप्त किया जाए, मेरे मामले में एक स्टेटलेस सत्र बीन को कॉल करके; और एक persist() विधि स्टेटलेस बीन परिवर्तनों को जारी रखने के लिए कहते हैं। यह मॉडल वर्ग वह है जो मैं वास्तव में पास करता हूं। विकेट केवल प्रदर्शन और इनपुट सत्यापन से संबंधित तर्क को संभालता है, और मुझे केवल मॉडल वर्गों में ईजेबी इंजेक्ट करने की आवश्यकता है। शायद आप अपने ऐप में कुछ ऐसा ही बना सकते हैं (मुझे नहीं पता कि लिफ्ट को क्या पेशकश करनी है ...)।

यह मेरे लिए अच्छी तरह से काम किया है, लेकिन मेरे पास विशेष रूप से जटिल व्यावसायिक तर्क नहीं है और तर्कों और एकल पृष्ठों की छोटी इकाइयों में बने रहने वाले किसी भी बदलाव को अलग कर सकते हैं।

0

जब भी आपको कई "सिस्टम" सेवाओं (इंजेक्शन आदि) की आवश्यकता होती है, तो स्टेटलेस बीन का उपयोग करें। अन्यथा - पीओजेओ। पीओजेओ अधिक लचीला हैं।

हालांकि सरल (एक्सेसर?) विधियां (जैसे webservices और सेम में) कुछ सरल काम कर सकते हैं और परिणाम वापस कर सकते हैं।

+0

"सिस्टम" सेवाओं द्वारा, आप दृढ़ता संदर्भ, लेनदेन इत्यादि जैसी चीजों का जिक्र कर रहे हैं? मैं पूछता हूं क्योंकि मेरा एप्लिकेशन कई बाहरी सेवाओं का उपयोग करता है जिनके लिए इंजेक्शन निर्भरता (कनेक्शन कॉन्फ़िगरेशन और सामान) की आवश्यकता होती है जिन्हें मैं गुइस के साथ संभालना चाहता हूं। –

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