Redux एक पवित्र ईश्वर वस्तु पैटर्न का उपयोग कर रहा है?


15

Redux के बारे में जानने के दौरान, गॉड-ऑब्जेक्ट पैटर्न (या एंटी-पैटर्न) मेरे दिमाग में आया- दोनों में एक ही बड़ी वस्तु है, जिसमें सभी ऐप डेटा और विधियों को रखने के लिए उनमें हेरफेर किया गया है। लेकिन Redux ने कुछ अड़चनें डाल दी हैं जैसे ऑब्जेक्ट को अपरिवर्तनीय बनाना और घटनाओं को शुद्ध हस्ताक्षर बनाए रखना।

तो सवाल यह आया कि क्या Redux ईश्वर की वस्तु के एक संचित संस्करण का उपयोग कर रहा है? या फिर, जावास्क्रिप्ट का शास्त्रीय रूप से टाइप किया हुआ OOP नहीं होने के साथ कुछ करना है?


2
संक्षिप्त उत्तर: नहीं। लंबे उत्तर (वास्तव में एक प्रश्न जो उत्तर की ओर ले जाना चाहिए): क्या एक डेटाबेस एक वर्ग है? या फाइल सिस्टम के बारे में कैसे? या कैश के बारे में कैसे? क्या ये सभी ईश्वर प्रतिरूप हैं?
कोड

IMO हाँ यह है। यह Redux के बारे में पहले कथन में है: "चूंकि जावास्क्रिप्ट सिंगल-पेज अनुप्रयोगों की आवश्यकताएं तेजी से जटिल हो गई हैं, हमारे कोड को पहले से कहीं अधिक राज्य का प्रबंधन करना चाहिए।" - इसका मतलब है कि आपको अपने ऐप की स्थिति को एक बूँद के रूप में प्रबंधित करना होगा। मुझे लगता है कि यह वेब ऐप्स के लिए विशिष्ट समस्या है और इसे खराब / कभी नहीं डिज़ाइन किए गए-इन-फ्रेमवर्क द्वारा बनाया गया है जो वेब एप्लिकेशन को लागू करने के लिए उपयोग किए जाते हैं।
n13

@ n13: सिर्फ इसलिए कि यह एक केंद्रीकृत स्थान से सुलभ है इसका मतलब यह नहीं है कि यह एक बड़े पैमाने पर बूँद है। उदाहरण के लिए, मेरा डेटाबेस एक केंद्रीकृत तरीके से एक्सेस किया गया है ( DbContext) लेकिन इसका आंतरिक डेटा छोटे भागों (टेबल, स्कीमा) में विभाजित है।
12

@ कई उपखंडों के साथ एक बड़ा बूँद अभी भी एक बड़ा बूँद है। एक सादा पुराना OO मॉडल सभी डेटा को एक जरूरत-से-जानने के आधार पर कम्पार्टमेंट करता है जिसका अर्थ है कि प्रत्येक वस्तु केवल बहुत ही कम मात्रा में राज्य / डेटा से संबंधित है और सब कुछ बहुत सरल है। आप सब कुछ एक विशाल वैश्विक संरचना में संग्रहीत कर सकते हैं, लेकिन आप ऐसा नहीं करते क्योंकि यह खराब सॉफ़्टवेयर डिज़ाइन है। सॉफ्टवेयर 101.
एन

@ n13 आप तर्क को उपवर्गों (छिपे या नहीं) में अलग कर सकते हैं, अक्षर और अच्छे अभ्यास के इरादे दोनों का अनुपालन कर सकते हैं , जबकि अभी भी आपके तर्क के लिए केंद्रीयता को केंद्रीकृत कर रहे हैं। यह एकल एपीआई के रूप में माइक्रोसर्विसेज बनाम का उपयोग करने के समान तर्क है। जबकि माइक्रोसिस्टर्स एक विकल्प है, इसका मतलब यह नहीं है कि "सामान्य" REST API इसलिए बुरा व्यवहार है।
14

जवाबों:


6

ईश्वर वस्तु क्या है? विकिपीडिया से:

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

Redux स्टोर में केवल एक डेटा ऑब्जेक्ट है और केवल 2 या 3 विधियों की आवश्यकता है। इस संबंध में यह एक ईश्वर वस्तु के रूप में सोचने की कल्पना करना कठिन है। यह निश्चित रूप से नहीं है "सभी जानते हुए भी।"

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


मुझे लगता है कि ओपी सोच रहा है कि सभी रेड्यूसर एक साथ , प्लस स्टोर, एक "गॉड ऑब्जेक्ट" के रूप में गिना जाए।
user949300

1
एक कार्यक्रम के मॉडल कक्षाओं के सभी करते हैं एक साथ एक देवता वस्तु के रूप में गिनती?
डैनियल टी।

मैं तर्क देता हूं कि पारंपरिक ओओपी में वे सभी "सब कुछ" डेटा पर काम नहीं कर रहे हैं, इसलिए, वे नहीं हैं।
उपयोगकर्ता 949300

Reducers भी सभी एक ही "सब कुछ" डेटा पर काम नहीं करते हैं। एक एकल reducer एक एकल मॉडल वर्ग के बराबर है। Reducer का डेटा कक्षा के क्षेत्रों के बराबर होता है और क्रियाएं कक्षा के तरीकों के बराबर होती हैं (यानी प्रत्येक केस स्टेटमेंट एक विशिष्ट विधि के बराबर होता है।)
डैनियल टी।

2

IMO, उपरोक्त प्रश्न नहीं उठना चाहिए। कार्यात्मक प्रोग्रामिंग अवधारणाएं OOPS में अवधारणाओं के लिए तुलनीय नहीं हैं, वे बस एक ही समस्या को हल करने के विभिन्न तरीके हैं। यहाँ छवि विवरण दर्ज करें


5
क्या आपने इस तालिका की छवि को केवल प्रश्न के लिए बनाया है? मुझे लगता है कि यह पाठ के रूप में बेहतर होगा, ताकि यह तेजी से लोड हो और एक स्क्रीन रीडर के साथ देखा जा सके
फीनिक्स

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

ओओपी और एफपी के तहत आपके द्वारा उल्लेखित अधिकांश सामान को पहले कॉलम पर समस्या कथन से कोई लेना देना नहीं है। उदाहरण के लिए फ़ंक्शन-कंपोज़िशन केवल राज्य संरचना को समझना कठिन बनाता है और यह परिवर्तन है
स्की

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

0

पहला पृष्ठ यह स्पष्ट रूप से स्पष्ट करता है कि Redux एक समस्या को हल करता है जो एकल पृष्ठ वेब ऐप्स के लिए विशिष्ट है:

चूंकि जावास्क्रिप्ट सिंगल-पेज एप्लिकेशन की आवश्यकताएं तेजी से जटिल हो गई हैं, हमारे कोड को पहले से कहीं अधिक राज्य का प्रबंधन करना चाहिए। (Redux से - प्रेरणा)

मेरा खुद का अनुवाद है - वेब ऐप और वेब ऐप बनाने के लिए चौखटे गन्दे हैं और जैसा कि वे एक ब्राउज़र में चल रहे हैं, उनका सामना समस्याओं के अनूठे सेट से होता है जो वेब ऐप के बाहर उत्पन्न नहीं होते हैं।

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

लेकिन Redux केवल उन समस्याओं को प्रबंधित करने के लिए एक उपकरण है जो आपको एक ब्राउज़र में चलने वाले वेब ऐप बनाने से आने वाली सीमाओं और समस्याओं से निपटना पड़ता है।

एक iOS ऐप या किसी भी तरह का देशी ऐप के लिए, इसका कोई मतलब नहीं है। ऑब्जेक्ट मॉडल आसानी से async परिवर्तन और उपयोगकर्ता सहभागिता को संभालता है। आपको हमेशा पता रहेगा कि क्या चल रहा है। विभिन्न राज्यों को प्रस्तुत करना कोई समस्या नहीं है और MVC और अपडेट ईवेंट के साथ स्वचालित है।

आप कभी भी वेब एप्लिकेशन जैसी स्थिति का सामना नहीं करते हैं।

** यदि आपकी वास्तुकला खराब है, तो ठीक है, कुछ भी आपको बचा नहीं सकता है, यहां तक ​​कि Redux भी नहीं;)

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