ऑक्टोपस की कथा



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

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

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

भाग एक: "Cthulhu, आओ"


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

ऑक्टोपस क्यों? क्योंकि यह सब एक ऑक्टोपस की तरह लगता है। ऑक्टोपस एक सामान्य क्षेत्र प्रणाली है जो वर्णन करती है:

  • खेतों को प्रदर्शित करने के लिए कौन सा मंच;
  • किस प्रकार की प्रस्तुति योजना के लिए जिम्मेदार है (उत्पाद निर्माण, फ़िल्टर, कार्ड प्रदर्शन, और इसी तरह)।

ऑक्टोपस में टेंटेकल्स, या टेंटेकल्स (हुसर्स, चुप रहें!) हैं - जिसे हम ट्री ब्रांच कहते हैं, जो यह बताता है कि फॉर्म में कुछ फ़ील्ड्स को कैसे प्रदर्शित किया जाना चाहिए। यह हो सकता है:

  • इनपुट फ़ील्ड;
  • चयन क्षेत्र
  • फ़ील्ड समूह;
  • पाठ फ़ील्ड।

HTML मार्कअप की तरह कुछ, जहां टैग होते हैं, और टैग में ऐसे पैरामीटर और मूल्य होते हैं जो उपयोगकर्ता किसी पूर्वनिर्धारित सूची से प्रवेश या चयन करता है।

जो ऑक्टोपस नाम के लिए "के लिए" और "के खिलाफ" लगभग समान रूप से विभाजित थे, लेकिन सिस्टम शुरू होने के कुछ समय बाद, यह स्पष्ट हो गया कि, इस नाम के लिए धन्यवाद, हर कोई तुरंत स्पष्ट रूप से समझ गया कि क्या चर्चा की जा रही थी।

भाग दो: संरचना


हमने जल जीव को अपनी नई प्रणाली का नाम बनने दिया, लेकिन सब कुछ समुद्र के लटों से टुकड़े-टुकड़े होने के लिए नहीं बचा था, अधिक शास्त्रीय पदनामों के लिए एक जगह थी। मैं सभी तत्वों की सूची दूंगा:

  • ऑक्टोपस - समग्र रूप से संरचना के लिए जिम्मेदार है।
  • टेंटकल - प्रत्येक व्यक्तिगत शाखा के प्रदर्शन का वर्णन करता है। widget फ़ील्ड क्लाइंट को दी जाती है, जो इंगित करता है कि फ़ील्ड को कैसे प्रदर्शित किया जाए।
  • विशेषता - दर्ज मूल्य को संग्रहीत करता है।
  • शब्दकोश - एक सूची से चयन के लिए संभावित मूल्यों की एक सूची शामिल है।
  • टैग - में एक मूल्य होता है जिसे सूची से चुना जा सकता है।
  • पैरामीटर - विशेषता या तम्बू को ग्राहकों के सत्यापन और प्रतिक्रिया के लिए विभिन्न मापदंडों के साथ पूरक किया जा सकता है।
  • निर्भरता - एक संरचना जो एक क्षेत्र की प्रतिक्रिया को दूसरे की पसंद के बारे में बताती है।

ऑक्टोपस को प्राप्त करने वाला ग्राहक उत्पाद को बनाने या संपादित करने या ऊपर वर्णित संरचना के अनुसार खोज करने के लिए पृष्ठ आकर्षित कर सकता है। भरने के बाद, डेटा बैकएंड द्वारा सहेजा जाता है और अनुक्रमण की खोज के लिए भेजा जाता है, जो संपादकों को जल्दी से नए क्षेत्र बनाने और तुरंत खोज में उनका उपयोग करने की अनुमति देता है।

भाग तीन: प्रस्तुति


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

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

इसे कैसे लागू किया जाता है?

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

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

भाग चार: खोज


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

ऐसा करने के लिए, हम अपनी खोज में विज्ञापन के साथ आने वाली सभी विशेषताओं को भेजते हैं, जहां डेटा अनुक्रमित होता है, जो आपको निर्दिष्ट मापदंडों द्वारा विज्ञापन को तुरंत खोजने की अनुमति देता है। संपादक किसी भी समय ऑक्टोपस व्यवस्थापक पैनल में नए फ़ील्ड बना सकते हैं, और उपयोगकर्ता विज्ञापन बनाते या खोजते समय तुरंत उनका उपयोग कर सकते हैं।

भाग पांच: एकीकरण


B2B पार्टनर अपनी पहुंच बढ़ाने के लिए यूलिया के साथ हमारे विज्ञापन डेटाबेस को साझा करने के लिए काम करते हैं। उदाहरण के लिए, यदि हम कार पार्टनर के साथ सहयोग लेते हैं, तो बाहरी सेवा में प्रत्येक विज्ञापन के लिए भारी संख्या में फ़ील्ड हैं। हमारे ऑक्टोपस के साथ दोस्तों के कार विज्ञापन डेटाबेस कैसे बनाएं? उत्तर सरल है - मानचित्रण का उपयोग करना; या, यदि भागीदार सत्यापित है, तो हम आपको सीधे हमारे सिस्टम में फ़ील्ड बनाने की अनुमति दे सकते हैं।

कफका के माध्यम से हम एक साथी के साथ एक संचार चैनल का आयोजन करते हैं और प्राप्त करते हैं:

  • भागीदार उत्पादों के लिए फ़ील्ड लेआउट अपडेट करना;
  • माल खुद और उनके साथ जोड़तोड़।

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

भाग छह: समस्याएं


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

हमने ऑक्टोपस योजनाओं के बैकएंड जारी को दो चरणों में विभाजित करने का निर्णय लिया:

  • एक अपरिवर्तनीय पेड़ प्राप्त करना, जिसे हम स्थानीय कैश में डालते हैं, पृष्ठभूमि में हर एन मिनट में अपडेट किया जाता है।
  • शाखा जोड़तोड़: निर्भरता के साथ एक पेड़ को पूरक करना और कैश के बिना प्रतिक्रिया का निर्माण करना।

इस दृष्टिकोण ने कैश की समस्या को हल कर दिया, और खेतों का वापसी समय कम से कम हो गया।

भाग सात: ए / बी टेस्ट


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

हमने यह कैसे किया?

उत्पाद श्रेणियों के साथ ऑक्टोपस कनेक्शन के स्तर पर, हमने प्रयोग में लाने के लिए एक परीक्षण बनाया। सकारात्मक मामले में, एक अन्य ऑक्टोपस दिया गया था और उपयोगकर्ता ने खेतों का एक अलग सेट देखा।

हमने अन्य ऑक्टोपस स्तरों पर भी ए / बी परीक्षण पेश किए: टेंटेकल्स और शब्दकोशों में।

भाग आठ: और कहाँ आवेदन करें?


जूलिया में, ऑक्टोपस का उपयोग न केवल उत्पाद कार्ड भरने और उन्हें खोजने के लिए किया जाता है। ऑक्टोपस योजनाएं आपको किसी भी सिस्टम संस्थाओं में संलग्न करने की अनुमति देती हैं, और वर्तमान में, ऑक्टोपस का उपयोग उपयोगकर्ता के व्यक्तिगत खाते में और माल की डिलीवरी में किया जाता है।

भाग नौ: एक उदाहरण


शब्द शब्द हैं, लेकिन एक उदाहरण के बिना इसे समझना मुश्किल है। उंगलियों पर समझाएं। "रियल एस्टेट" अनुभाग में उत्पाद बनाने के लिए खेतों की संरचना लें।

उदाहरण JSON श्रेणी से बिक्री के लिए अपार्टमेंट - अपार्टमेंट पैरामीटर
 { "title":" ", "widget":"group", "order":17, "params":{ "required":false }, "subfields":[ { "title":"", "widget":"section", "order":18, "params":{ "required":false }, "subfields":[ { "title":"  ", "widget":"select", "order":19, "slug":"komnat_v_kvartire", "type":"tag_id", "attribute_id":1374, "values":[ { "id":1, "value":"1 ", "order":1 }, { "id":2, "value":"2 ", "order":2 }, { "id":3, "value":" ", "order":3 }, { "id":4, "value":"", "order":4 } ], "params":{ "required":true } }, { "title":"", "widget":"input_int", "order":20, "slug":"realty_etaj", "type":"int", "attribute_id":1543, "params":{ "required":true, "min_value":1, "max_value":500 } } ] }, { "title":"", "widget":"section", "order":21, "params":{ "required":false }, "subfields":[ { "title":" ", "widget":"input_float", "order":22, "slug":"realty_obshaya_ploshad", "type":"float", "attribute_id":1541, "params":{ "required":true, "unit":"²", "min_value":1, "max_value":100000 } } ] }, { "title":"", "widget":"section", "order":25, "params":{ "required":false }, "subfields":[ { "title":" ", "widget":"input_float", "order":25, "slug":"building_flat_ceiling_height", "type":"float", "attribute_id":1518, "params":{ "required":false, "min_value":1, "max_value":10, "unit":"" } } ] } ] } 


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

टेंटेकल्स को एक-दूसरे के अंदर घोंसला बनाया जा सकता है, और इसलिए कि ग्राहक समझता है कि क्या और कैसे प्रदर्शित करना है, हमने widget प्रॉपर्टी को पेश किया, जो क्लाइंट को बताता है कि हम इस जगह में क्या दिखाना चाहते हैं: फ़ील्ड्स, टेक्स्ट ब्लॉक, इंडेंटेशन या एक पूर्ण फ़ील्ड का समूह।


भाग दस: ऑक्टोपस निर्भरता


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

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

उदाहरण: एक उपयोगकर्ता एक कार की बिक्री में प्रवेश करता है, एक बीएमडब्ल्यू ब्रांड का चयन करता है, और मॉडल क्षेत्र में केवल वे मॉडल हैं जो इस ब्रांड के हैं।

इसे इस तरह लागू किया जाता है:

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


निष्कर्ष में


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

Source: https://habr.com/ru/post/hi479924/


All Articles