मैं कार्यकुशलता बनाए रखते हुए उपयोगकर्ता इंटरफ़ेस को व्यावसायिक तर्क से कैसे अलग कर सकता हूं?


19

मान लीजिए कि मैं एक रूप दिखाना चाहता हूं जो एक कॉम्बोक्सॉक्स पर 10 विभिन्न वस्तुओं का प्रतिनिधित्व करता है। उदाहरण के लिए, मैं चाहता हूं कि उपयोगकर्ता 10 टमाटरों में से एक हैम्बर्गर को चुनें जिसमें टमाटर हो।

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

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

इसके अलावा, अगर मैं गलत हूं और आपको वास्तव में फॉर्म को पूरी वस्तु भेजनी चाहिए, तो मैं तर्क से UI को कैसे अलग कर सकता हूं?


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

समस्या यह है कि उक्त वस्तु के साथ काम करने के लिए, उपयोगकर्ता द्वारा चुने जाने के बाद मुझे इसे फिर से लाना होगा।
उरई

जवाबों:


34

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

जिस तरह से मैं इसे समझता हूं, जब हम UI और लॉजिक को अलग करने की बात करते हैं , तो हमारा मतलब है करीबी युग्मन से बचना

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

ढीली युग्मन का अर्थ है कि ए को बी पता है, लेकिन बी को नहीं पता है। दूसरे शब्दों में, दो पक्षों में अलग-अलग ग्राहक और सर्वर भूमिकाएं शामिल हैं, जहां ग्राहक सर्वर को जानता है, लेकिन सर्वर क्लाइंट को नहीं जानता है।

UI और तर्क के मामले में, मेरी राय में इसे व्यवस्थित करने का सबसे अच्छा तरीका तर्क को सर्वर के रूप में और यूआई को क्लाइंट के रूप में देखना है। तो, यूआई तर्क के लिए बनाया गया है, तर्क का ज्ञान है, और तर्क को आमंत्रित करता है, जबकि तर्क यूआई के बारे में कुछ भी नहीं जानता है, और बस उन अनुरोधों का जवाब देता है जो इसे प्राप्त करता है। (और ये अनुरोध UI से आने के लिए होते हैं, लेकिन तर्क यह नहीं जानता है।)

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

इसलिए, अपने मामले में वापस आने के लिए, इस तथ्य के साथ कुछ भी गलत नहीं है कि कॉम्बो-बॉक्स को पॉप करने वाला यूआई कोड हैमबर्गर वर्ग के बारे में जानता है। अगर हैमबर्गर वर्ग कॉम्बो बॉक्स के बारे में कुछ भी जानता है तो एक समस्या होगी।

संयोग से, यह डिज़ाइन एक और चीज़ की अनुमति देता है, जिसे आपको ऐसी प्रणाली से उम्मीद करनी चाहिए: लॉजिक की इच्छा रखते हुए विभिन्न यूआई को प्लग करना संभव होना चाहिए, और पूरी चीज़ अभी भी काम करना चाहिए।


5

आपको मॉडल, दृश्य और नियंत्रक के प्रत्येक टुकड़े को अलग करना चाहिए , लेकिन ऐसा कोई कारण नहीं है कि आप (उदाहरण के लिए) नियंत्रक और दृश्य के बीच मॉडल ऑब्जेक्ट को पास नहीं कर सकते।

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

मुद्दा यह है कि आप अभी भी हैम्बर्गर के वास्तविक प्रदर्शन से अलग "लॉंच Hamburgerएस" लॉजिक और "प्रोसेस Hamburger" लॉजिक का परीक्षण कर सकते हैं ।


मै समझता हुँ। हालाँकि तब यदि मैं हैम्बर्गर वर्ग को संशोधित करता हूं, तो क्या मुझे उस प्रपत्र के कोड को भी संशोधित नहीं करना पड़ेगा जो हैम्बर्गर ऑब्जेक्ट्स से संबंधित है? यूआई-लॉजिक अलग कहाँ है?
उरई

2
हैमबर्गर मॉडल का हिस्सा है। जब आप मॉडल को संशोधित करते हैं, तो आप दृश्य और नियंत्रक को संशोधित करते हैं। मॉडल UI और तर्क के बीच अलगाव है। इसे छूने की लागत अधिक है, इसलिए इसे डिजाइन करते समय आपको सावधान रहना चाहिए।
साइमन बर्गोट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.