दिलचस्प पोस्ट
मल्टीसेट, मैप और हैश मैप जटिलता START_STICKY Android KitKat पर काम नहीं करता डॉकरफाइल में सीएमडी और एंट्रीपॉइंट में क्या अंतर है? इकाई फ़्रेमवर्क में इनहेरिएटेड प्रकार बदलना मैक ओएस एक्स पर पायथन 3 के लिए पीईपी कैसे स्थापित करें? किसी कॉलबैक को किसी अन्य फ़ंक्शन में पैरामीटर के रूप में कैसे पास करें ISNULL का उपयोग करके एक विशिष्ट निदान की जाँच करने के लिए COALESCE का उपयोग करना है? ट्विटर बूटस्ट्रैप 3 के लिए राइट टू वाम समर्थन मान के लिए दस्तावेज कहाँ है () Enum की विधि? सी C ++ का सबसेट नहीं है? डिवाइस प्रकार का पता लगाएं एचटीएमएल 5 <ऑडियो> फीका और फीका आउट के साथ प्लेबैक जावा से शेल कमांड चलाएं आलसी छवियाँ gridView में डाउनलोड करें हमें ग्राहक पक्ष और सर्वर साइड सत्यापन दोनों की आवश्यकता क्यों है?

JSF सेवा स्तर

मुझे यकीन नहीं है कि जेएसएफ में एमवीसी पर्यावरण के साथ मेरा दृष्टिकोण जाने का सबसे अच्छा तरीका है। चूंकि मैं जेएसएफ से सबसे अधिक प्राप्त करने की कोशिश कर रहा हूं, मैं यह जानना चाहूंगा कि मेरा सर्विस लेयर (या मॉडल, एमवीसी के शब्दों में बोल रहा है) को 'डिज़ाइन' किया जाना चाहिए।

मुझे पता है कि दृश्य-नियंत्रक का अनुपात 1 से 1 होना चाहिए (अपवाद का खंडन किया गया) अब मुझे अपना सर्विस लेयर कैसे डिजाइन करना चाहिए? क्या मुझे एक बड़ी सेवा का उपयोग करना चाहिए (ऐसा नहीं लगता है)? यदि नहीं, तो मुझे अपनी सेवाओं को किस प्रकार विभाजित करना चाहिए?

ध्यान दें, मेरी सेवा बीन्स (एमवीसी के नियमों में नियंत्रक) से बुलाएगी और सर्विस ही डीएओ को आवश्यक होने पर जेपीए का उपयोग कर देगा

अग्रिम में धन्यवाद

वेब के समाधान से एकत्रित समाधान "JSF सेवा स्तर"

सेवा स्तर (बिजनेस मॉडल) को मुख्य इकाई (डेटा मॉडल) के चारों ओर डिज़ाइन किया जाना चाहिए। User लिए User , Product लिए Product , OrderService लिए Order आदि। आपको बिल्कुल एक बड़ी सर्विस क्लास नहीं होना चाहिए। यह चरम तंग युग्मन है

सेवा स्तर एपीआई के रूप में ही, जावा ईई 6 सर्विस प्लयर एपीआई के रूप में ईजेबी 3.1 प्रदान करता है। अंधेरे J2EE की उम्र में, लंबे समय से पहले जब ईजेबी 2.0 भयानक था, तो स्प्रिंग अधिक बार सर्विस लेयर एपीआई के रूप में इस्तेमाल किया गया था। कुछ अभी भी इसे आजकल का उपयोग करते हैं, लेकिन जावा EE 6 के बाद से वसंत से सीखा सभी अच्छे सबक शामिल किए गए हैं, यह ज़रूरत से ज़्यादा ज़रूर बन गया है। ध्यान दें कि ईजेबी (और जेपीए) टॉमकैट जैसी बेर्बोन सर्विसलेट कंटेनरों में उपलब्ध नहीं है आपको इसके ऊपर ओपनएजेबी उदाहरण के लिए स्थापित करना होगा (या सिर्फ टॉमी में अपग्रेड करें)

सर्विस लेयर एपीआई पसंद के बावजूद, सर्वोत्तम सेवा परत में व्यवसाय की नौकरी पूरी करने से आपके जेएसएफ बैकिंग बीन (एक्शन) श्रोता तरीके को यथासंभव चालाक रखना होगा। ध्यान दें कि सेवा स्तर स्वयं से कोई भी JSF निर्भरता नहीं होना चाहिए। इसलिए किसी भी (में) javax.faces.* प्रत्यक्ष आयात javax.faces.* सेवा स्तर कोड में खराब डिजाइन इंगित करता है आपको बैकिंग बीन में विशेष कोड पंक्तियां रखनी चाहिए (यह आम तौर पर कोड है जो सेवा कॉल परिणाम के आधार पर चेस संदेश जोड़ता है) इस तरह से सेवा परत अन्य मोर्चे की समाप्ति के लिए पुन: उपयोग योग्य होता है, जैसे कि जेएक्स-आरएस या सादे सर्विसलेट्स भी।

आपको समझना चाहिए कि जावा ईई अनुप्रयोग में सेवा स्तर का मुख्य लाभ कंटेनर प्रबंधित लेनदेन की उपलब्धता है। एक @Stateless ईजेबी पर एक सेवा विधि कॉल प्रभावी रूप से एक एकल डीबी लेनदेन के रूप में गिना जाता है। इसलिए यदि किसी एक डीएओ ऑपरेशन में से किसी एक के दौरान @PersistenceContext EntityManager का उपयोग करते हुए अपवाद होता है जिसे सेवा विधि कॉल द्वारा लागू किया जाता है, तो एक पूर्ण रोलबैक शुरू हो जाएगा इस तरह आप गंदे डीबी राज्य के बदले एक साफ डीबी राज्य के साथ खत्म हो जाते हैं, क्योंकि उदाहरण के लिए पहली डीबी मैनिप्युलेशन क्वेरी सफल हुई, लेकिन दूसरा नहीं।

यह भी देखें:

  • संस्थाओं के लिए मास्टर-विस्तार पृष्ठों का निर्माण करना, उन्हें कैसे लिंक करना है और किस बीन क्षेत्र को चुनना है
  • जब यह आवश्यक है या स्प्रिंग या ईजेबी 3 या उन सभी को एक साथ उपयोग करने के लिए सुविधाजनक है?
  • जेएसएफ नियंत्रक, सेवा और डीएओ

सेवा और मॉडल संस्थाओं के बीच 1: 1 का अनुपात शायद आपके ऐप में कुछ संस्थाओं में नहीं है। लेकिन अगर यह एक बड़ा ऐप है, तो बहुत अधिक सेवाएं मिलेंगी।

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

डीएओ और मॉडल संस्थाओं के बीच का अनुपात 1: 1 है प्रत्येक डीएओ अपनी इकाई की सीआरयूडी संचालन और पूछताछ करता है। यदि एक विधि को 2 संबंधित संस्थाओं से पूछना चाहिए, तो व्यापार अवधारणाओं के आधार पर इसे अधिक उपयुक्त डीएओ में डाल दें।

JSF प्रस्तुति परत में मुझे न तो 1: 1 अनुपात पृष्ठ और नियंत्रकों के बीच है, जो बहुत अधिक नियंत्रक होगा। मैं एक समूह में प्रत्येक सेवा के उपयोग मामलों को करने के लिए आवश्यक सभी पृष्ठों को एक उलझन में रखता हूं। तो अनुपात 1: 1 नियंत्रकों और सेवाओं के बीच होता है, प्रत्येक सेवा को नियंत्रक में इंजेक्शन करता है जिनके पन्नों के उपयोग के मामलों में इसका इस्तेमाल होता है।

बेशक, ये सामान्य सिद्धांत हैं आपके पास कुछ खास मामलों में ऐसे एप्लिकेशन होंगे जो उन्हें तोड़ दिया, लेकिन वे कुछ ही हैं।

आपके पास बहुत अधिक सेवाएं और नियंत्रक नहीं हो सकते हैं, लेकिन बहुत कम नहीं हैं, क्योंकि तब उनके पास बहुत अधिक तर्क और फ़ील्ड होगा आपको समझौता करना चाहिए