ब्लैकबोर्ड पैटर्न का आधुनिक जावा कार्यान्वयन?


11

क्या ब्लैकबोर्ड पैटर्न के जावा में एक व्यावहारिक आधुनिक अनुप्रयोग के लिए जगह है जो "द प्रोगैमैटिक प्रोग्रामर" में विस्तृत है ? क्या कोई विशेष पुस्तकालय है जो इस अवधारणा के कार्यान्वयन में सहायता करने का प्रयास करता है? वर्तमान सॉफ्टवेयर समुदाय (विशेष रूप से जावा) में इस पैटर्न पर आम सहमति क्या है?

हालांकि यह विचार पेचीदा है, मुझे लगता है कि पुस्तक का यह भाग पुराना हो सकता है।

यदि आप इस अवधारणा से परिचित नहीं हैं: http://flylib.com/books/en/1.315.1.55/1/


शायद इसे भी जांचना चाहते हैं: stackoverflow.com/questions/1204667/…
Steven Evers

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

जवाबों:


6

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

स्प्रिंग समान है, प्रत्येक संदर्भ XML फ़ाइल (उदाहरण के लिए) स्प्रिंग संदर्भ (व्हाइटबोर्ड) से ऑब्जेक्ट का योगदान और उपयोग कर सकती है।

OSGi और इसकी सेवा रजिस्ट्री एक व्हाइटबोर्ड कार्यान्वयन का एक और उदाहरण है। यहाँ इस बात का वर्णन है कि OSGi कैसे आधारित OSGi आधारित सिस्टम में इवेंट हैंडलिंग के नियंत्रण के लिए व्हाइटबोर्ड पैटर्न का उपयोग करता है और उसका समर्थन करता है

यहां स्प्रिंग डायनामिक मॉड्यूल, OSGi और व्हाइटबोर्ड पैटर्न (पृष्ठ 51) के बीच संबंध पर एक ट्यूटोरियल पेपर दिया गया है ।

मेरा अनुभव यह है कि व्हाइटबोर्ड पैटर्न के अपने स्वयं के कार्यान्वयन का समर्थन करने के लिए विशेष रूप से गाइस भी बहुत शक्तिशाली है। यदि आपकी अधिकांश वस्तुओं को Guice Injector (व्हाइटबोर्ड) से इंजेक्ट किया जा रहा है, तो उन्हें किसी भी अन्य व्हाइटबोर्ड के साथ एक विशेष वर्ग की आवश्यकताओं के साथ इंजेक्ट करना आसान है। तो आप एक विशिष्ट सफेद बोर्ड (जैसे कि आपके डोमेन के बारे में एक से युक्त तथ्य) को बूट कर सकते हैं। (आप स्प्रिंग, OSGi या कई अन्य के साथ भी ऐसा कर सकते हैं, हालांकि शायद सीधे तौर पर नहीं)।


3
यदि कोई अन्य व्यक्ति इस बारे में सोच रहा है, तो व्हाइटबोर्ड और ब्लैकबोर्ड विनिमेय शब्द प्रतीत होते हैं। व्हाइटबोर्ड वे हैं जिन्हें बारबरा लिस्कोव ने बुलाया था, लेकिन यह शब्द ब्लैकबोर्ड के पक्ष में (अधिकतर) उपयोग से बाहर हो गया है।
राउटर

2

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

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


1
मुझे लगता है कि रेटागर्स को थोड़ा बहुत डर लग गया। मैं एक डिजाइन पैटर्न की तुलना में इस वास्तुशिल्प पैटर्न के बारे में अधिक विचार करूंगा। फैक्टरी पैटर्न की तुलना में SOA के अनुरूप। शायद मुझे 'पैटर्न' शब्द का इस्तेमाल नहीं करना चाहिए था
smp7d

मुझे लगता है कि मेरा जवाब खड़ा है; ब्लैकबोर्ड एक "पैटर्न" है जिसका उपयोग आवश्यकताओं-विशिष्ट कार्यान्वयनों को बनाने के लिए किया जाता है, और इस पैटर्न का सामान्य प्रयोजन के कार्यान्वयन के लिए इरादा नहीं है। SOA का आपका उदाहरण अभी भी एक अवधारणा है; आप यह जानकर कि "यूएएस इंजन" के रूप में सोचा जा सकता है कि Microsoft का WCF एक "SOA इंजन" के रूप में क्या हो सकता है, यह जानने के बिना एक सार्थक "SOA इंजन" का निर्माण नहीं किया जा सकता है, लेकिन वास्तव में यह एक प्रॉक्सी वास्तुकला है जिसे संचार को सरल बनाने के लिए SOA डिजाइन पर लागू किया जा सकता है। विवरण; यह आपके कार्यान्वयन के बिना बेकार है और इनर-प्लेटफॉर्म पर सीमाएं हैं, लेकिन यह .NET है इसलिए हम उम्मीद करते हैं कि)।
कीथ्स

आपका उत्तर निश्चित रूप से योग्यता के बिना नहीं है। हालांकि, ऐसी तकनीकें हो सकती हैं जो इस पैटर्न के उपयोग में सहायता करती हैं। सिर्फ इसलिए कि सभी आवश्यकताओं को पूरा करने के लिए वेब सेवा कार्यक्षमता का कोई एकीकृत कार्यान्वयन नहीं है, इसका मतलब यह नहीं है कि इस क्षेत्र में मदद करने के लिए जावा में पुस्तकालय और पैकेज नहीं हैं। फिर भी, मैं अपने प्रश्न को और अधिक स्पष्ट करने के लिए संपादित करूंगा। धन्यवाद।
smp7d 14

0

ब्लैकबोर्ड पैटर्न के उपयोग का समर्थन करने के लिए OpeBBS (ओपन ब्लैकबार्ड सिस्टम) एक जावा कार्यान्वयन की तरह दिखता है।

उनकी वेबसाइट से :

OpenBBS लचीला वर्कफ़्लोज़ के विकास के लिए एक खुली और एक्स्टेंसिबल ब्लैकबोर्ड प्रणाली है। लचीलापन ब्लैकबोर्ड पैटर्न को अपनाने के माध्यम से प्राप्त किया जाता है। OpenBBS मॉड्यूलर और एम्बेड करने योग्य है जो इसे वर्कफ़्लो के लिए एक लाइटवेट समाधान बनाता है।

Sourceforge पर स्रोत, जार, और javadoc पाया जा सकता है । Javadoc उन वर्गों के बारे में बहुत कुछ बताता है जिनकी आप अपेक्षा करेंगे (ब्लैकबोर्ड, ब्लैकबोर्डकंट्रोल, कंट्रोलप्लान, नॉलेजसोर्स, ...)।

केवल नकारात्मक पक्ष यह है कि यह नवीनतम (और केवल?) रिलीज 2007 से लगता है।

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