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

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

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

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

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

यदि हम कई कार्यों को रोकते हैं, तो हमें यह जानना होगा कि आगे क्या करना है। उदाहरण के लिए,
a.a1 निष्पादित करने के बाद, हमारे पास एक निश्चित डेटा सेट
data1 और
जंजीरों के निर्देशों का एक सेट होगा, जो यह संकेत देगा कि यह फ़ंक्शन डेटा को टेम्पलेट में बदलने के लिए तैयार है। लेकिन, इस फ़ंक्शन में एक
ऑनएयर हैंडलर परिभाषित है, जिसका अर्थ है कि आपको
b.b1 को निष्पादित करने की आवश्यकता है, जो
डेटा 2 को
डेटा 1 में भी जोड़
देगा , लेकिन यह फ़ंक्शन टेम्पलेट को नहीं बदल सकता है।
बदले में, इस फ़ंक्शन का अपना
ऑन- प्रोसेसर भी हो सकता है, जो पिछले फ़ंक्शन के डेटा के आधार पर अपना डेटा बनाएगा, और यह कहेगा कि डेटा वार्मिंग प्रक्रिया को पूरा करना आवश्यक है। और इसी तरह अनंत तक।
यह पहले से बहुत बेहतर और अधिक लचीला है। मुझे आशा है कि मेरे विचार किसी को उनके शानदार विचारों के कार्यान्वयन में मदद करेंगे।
एक अच्छी प्रोग्रामिंग है!युपीडी। कीड़े पर काम करते हैं।