वास्तविक दुनिया के परिदृश्य जहाँ UML संयुक्त संरचना आरेख समय बचाते हैं

सिस्टम वास्तुकला दुर्लभ रूप से सरल होती है। जैसे-जैसे सॉफ़्टवेयर बढ़ता है, घटकों के बीच की अंतःक्रियाएँ जटिल हो जाती हैं, जिससे डिज़ाइन टीमों और कार्यान्वयन टीमों के बीच अक्सर गलत संचार होता है। यहीं पर UML संयुक्त संरचना आरेख अपना काम करता है। सामान्य क्लास आरेखों के विपरीत जो स्थिर संबंधों पर ध्यान केंद्रित करते हैं, संयुक्त संरचना आरेख वर्गीकारकों (classifiers) की आंतरिक संरचना में गहराई से उतरते हैं। वे यह प्रकट करते हैं कि वस्तुएँ (objects) भागों से कैसे बनी होती हैं और वे इंटरफ़ेस के माध्यम से एक-दूसरे से कैसे अंतःक्रिया करते हैं। जटिल इंजीनियरिंग वातावरण में, इन आंतरिक तंत्रों को समझना केवल सहायक नहीं, बल्कि दक्षता के लिए आवश्यक है। 🚀

यह गाइड विशिष्ट परिदृश्यों का अन्वेषण करती है जहाँ संयुक्त संरचना आरेखों का उपयोग अस्पष्टता को कम करता है, महंगी पुनः कार्य को रोकता है और विकास जीवन चक्र को तेज़ करता है। हम इन आरेखों की संरचना का अध्ययन करेंगे और उन्हें सूक्ष्म सेवाओं (microservices) से लेकर एम्बेडेड सिस्टम तक के ठोस उपयोग मामलों पर लागू करेंगे।

Adorable kawaii-style infographic explaining UML Composite Structure Diagrams with pastel colors and cute vector icons, showcasing five time-saving scenarios: microservices architecture, embedded systems, UI frameworks, API gateways, and legacy modernization, featuring a central classifier character with friendly parts connected by ports and interfaces

मूल उपयोगिता को समझना 🧩

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

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

आरेख के प्रमुख घटक

  • वर्गीकारक: मुख्य कंटेनर या वह ‘बॉक्स’ जो सिस्टम का प्रतिनिधित्व करता है।
  • भाग: आंतरिक घटक जो वर्गीकारक को बनाते हैं।
  • पोर्ट: भागों के लिए अंतःक्रिया के बिंदु (इनपुट या आउटपुट)।
  • कनेक्टर: भागों को एक-दूसरे से या बाहर से जोड़ने वाली रेखाएँ।
  • इंटरफ़ेस: परिभाषित ऑपरेशन के समूह (प्रदान किए गए या आवश्यक)।

इन तत्वों को दृश्यमान करके, वास्तुकलाकार (architects) सत्यापित कर सकते हैं कि आंतरिक तर्क बाहरी आवश्यकताओं के साथ संगत है। यह संगति ही वह जगह है जहाँ समय बचता है—संरचनात्मक असंगतियों को शुरुआत में ही पकड़कर।

परिदृश्य 1: सूक्ष्म सेवाओं की वास्तुकला डिज़ाइन 🏗️

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

इस संदर्भ में एक संयुक्त संरचना आरेख का उपयोग करने से वास्तुकलाकार एक सेवा की आंतरिक संरचना को परिभाषित कर सकते हैं।

यह समय क्यों बचाता है

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

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

दृश्य 2: एम्बेडेड सिस्टम और हार्डवेयर इंटरैक्शन ⚙️

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

यहाँ एक कॉम्पोजिट संरचना डायग्राम हार्डवेयर-सॉफ़्टवेयर सीमा को मॉडल करके उत्कृष्ट प्रदर्शन करता है।

हार्डवेयर एकीकरण में अनुप्रयोग

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

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

दृश्य 3: जटिल UI/UX फ्रेमवर्क 🎨

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

जब डिज़ाइन सिस्टम या पुनः उपयोग योग्य घटक लाइब्रेरी बनाई जा रही हो, तो UI विजेट की आंतरिक संरचना को समझना अत्यंत महत्वपूर्ण है।

फ्रंटएंड विकास के लिए लाभ

  • घटक संरचना:यह परिभाषित करता है कि कौन से विजेट एक-दूसरे के अंदर एम्बेड हैं। एक फॉर्म कंटेनर में इनपुट फ़ील्ड भाग और सबमिट बटन भाग हो सकते हैं।
  • घटना प्रचार:यह स्पष्ट करता है कि उपयोगकर्ता घटनाएं कैसे ऊपर की ओर बबल होती हैं। बटन भाग पर क्लिक करने से माता कंटेनर भाग में एक घटना सक्रिय हो सकती है।
  • स्टाइलिंग अलगाव:यह CSS स्कोपिंग के लिए सीमाओं को परिभाषित करने में मदद करता है। सटीक संरचना को जानकर, डेवलपर सुनिश्चित कर सकते हैं कि स्टाइल घटकों के बीच लीक नहीं होते हैं।

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

दृश्य 4: API गेटवे डिज़ाइन और रूटिंग 🔗

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

एक संयुक्त संरचना चित्र आंतरिक रूटिंग तर्क को मॉडल करने में सहायता करता है।

गेटवे को संरचित करना

  • अनुरोध हैंडलर:यह विभिन्न प्रकार के अनुरोधों के लिए अलग-अलग भाग दिखाता है (उदाहरण के लिए, “AuthHandler, RateLimiter, Router).
  • जिम्मेदारी की श्रृंखला:यह भागों द्वारा अनुरोध प्रोसेस करने के क्रम को दृश्य रूप से प्रस्तुत करता है। चित्र सुनिश्चित करता है कि “AuthHandler हमेशा “Router.
  • प्रोटोकॉल रूपांतरण:यह उन भागों को मॉडल करता है जिन्हें प्रोटोकॉल के बीच रूपांतरण (जैसे HTTP से gRPC) के लिए जिम्मेदार माना जाता है।

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

दृश्य 5: पुरानी प्रणाली का आधुनिकीकरण 🔄

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

संयुक्त संरचना चित्र मौजूदा प्रणालियों के रिवर्स इंजीनियरिंग के लिए उत्कृष्ट हैं।

रिवर्स इंजीनियरिंग के लाभ

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

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

तुलना: क्लास आरेख बनाम संयुक्त संरचना आरेख 📊

मूल्य प्रस्ताव को समझने के लिए, संयुक्त संरचना आरेख की तुलना अधिक सामान्य क्लास आरेख से करना सहायक होता है। दोनों संरचनात्मक हैं, लेकिन इनका ध्यान काफी भिन्न होता है।

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

हालांकि क्लास डायग्राम सरल ऑब्जेक्ट-ओरिएंटेड डिजाइनों के लिए पर्याप्त है, यह तब अपर्याप्त हो जाता है जब किसी जटिल घटक की आंतरिक संरचना महत्वपूर्ण होती है। कॉम्पोजिट स्ट्रक्चर डायग्राम कार्यान्वयन त्रुटियों को रोकने के लिए आवश्यक स्तर की विस्तृत जानकारी प्रदान करता है।

प्रभावी मॉडलिंग के लिए सर्वोत्तम अभ्यास 📝

इन डायग्रामों के समय बचाने वाले लाभों को अधिकतम करने के लिए कुछ अभ्यासों का पालन करना चाहिए। खराब रूप से बनाए गए डायग्राम बिना किसी डायग्राम के बराबर ही भ्रामक हो सकते हैं।

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

जिनसे बचना चाहिए आम गलतियाँ ⚠️

सबसे अच्छे इरादों के साथ भी, टीमें इस मॉडलिंग तकनीक का गलत उपयोग कर सकती हैं। आम गलतियों के प्रति जागरूकता दक्षता बनाए रखने में सहायता करती है।

  • अति-इंजीनियरिंग:प्रत्येक सरल क्लास के लिए कॉम्पोजिट स्ट्रक्चर डायग्राम न बनाएं। इसे उन जटिल वर्गीकारकों के लिए सुरक्षित रखें जहाँ आंतरिक संरचना सिस्टम व्यवहार को प्रभावित करती है।
  • पोर्ट्स को नजरअंदाज करना:पोर्ट्स घटकों के बीच महत्वपूर्ण लिंक हैं। इन्हें नजरअंदाज करने से कनेक्शन का वर्णन अस्पष्ट हो जाता है। हमेशा परिभाषित करें कि एक पोर्ट किस इंटरफेस का उपयोग करता है।
  • असंगति:घटकों को संरेखित किए बिना कॉम्पोजिट स्ट्रक्चर डायग्राम को सीक्वेंस डायग्राम के साथ मिला देने से भ्रम हो सकता है। सुनिश्चित करें कि स्ट्रक्चर डायग्राम में घटक सीक्वेंस डायग्राम में वस्तुओं से मेल खाते हों।
  • केवल स्थिर:याद रखें कि यह एक संरचनात्मक आरेख है। यह समय के साथ व्यवहार को नहीं दर्शाता है। इसे जटिल अवस्था संक्रमणों को समझाने के लिए उपयोग न करें।

अन्य मॉडलिंग तकनीकों के साथ एकीकरण 🤝

UML संयुक्त संरचना आरेख की वास्तविक शक्ति तब प्रकट होती है जब इसे अन्य मॉडलिंग तकनीकों के साथ एकीकृत किया जाता है। यह एक खाली जगह में अस्तित्व में नहीं है।

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

आर्किटेक्शन टीमों के लिए अंतिम विचार 🧭

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

समय की बचत तेज़ी से ड्राइंग करने से नहीं, बल्कि स्पष्ट रूप से सोचने से होती है। जब आंतरिक संरचना परिभाषित हो जाती है, तो डेवलपर्स प्रश्न पूछने में कम समय और कोड लिखने में अधिक समय बिताते हैं। हितधारक अस्पष्ट आरेखों की समीक्षा में कम समय और सिस्टम की क्षमताओं को समझने में अधिक समय बिताते हैं।

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

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