कोणीय 6 - सेवा इंजेक्शन के बजाय @ ngrx / store का उपयोग क्यों करें


86

मैं हाल ही में @ ngrx / store के साथ Angular 6 सीख रहा हूं, जबकि ट्यूटोरियल में से एक राज्य प्रबंधन के लिए @ ngrx / store का उपयोग करना है, हालांकि मैं दृश्य के पीछे @ ngrx / store का उपयोग करने के लाभ को नहीं समझता।

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

अब अगर हम @ ngrx / store का उपयोग कर रहे हैं, तो हमें एक्शन / स्टेट / रेड्यूसर / इफेक्ट्स / सेलेक्टर को परिभाषित करने की आवश्यकता है, जो संभवतः एक्शन या इवेंट के ऊपर हैंडल करने के लिए ४ या ५ फाइलों में लिखने की आवश्यकता है, तो कभी-कभी हमें बैकएंड एपि को भी कॉल करना होगा। सेवा का उपयोग करना, जो बहुत अधिक जटिल और निरर्थक लगता है ...

कुछ अन्य परिदृश्य में, मैं यह भी देखता हूं कि ग्रिड डेटा जैसे ऑब्जेक्ट या ऑब्जेक्ट की सूची को स्टोर करने के लिए कुछ पेज @ ngrx / store का उपयोग करता है। , यह है कि मेमोरी स्टोर के कुछ प्रकार के उपयोग के लिए?

तो वापस प्रश्न के लिए, हम यहाँ पर Angular प्रोजेक्ट में सेवा पंजीकरण स्टोर पर @ ngrx / store का उपयोग क्यों कर रहे हैं? मुझे पता है कि यह " स्टेट मैनेजमेंट " उपयोग के लिए है, लेकिन वास्तव में "स्टेट मैनेजमेंट" क्या है? क्या यह लेन-देन लॉग जैसा कुछ है और हमें इसकी आवश्यकता कब है? हम इसे फ्रंट एंड पर क्यों प्रबंधित करेंगे? कृपया अपने सुझाव या अनुभव को @ ngrx / store क्षेत्र में साझा करने के लिए स्वतंत्र महसूस करें!


8
पिछले साल मैंने एक कंपनी में एक नई नौकरी शुरू की। वे Redux के साथ कोणीय का उपयोग कर रहे थे। मैंने Redux को नहीं छुआ है, लेकिन मैं इसके बीटा रिलीज़ के बाद से ही कोणीय में विकसित हो रहा हूं। मेरी पहली धारणा थी कि यह क्या है? सिर्फ एपीआई के साथ संवाद करने और उस डेटा की सदस्यता के लिए इतनी जटिलता। उन्होंने सचमुच हर चीज़ के लिए Redux का इस्तेमाल किया! यह एक ऐसी गड़बड़ थी जिसे काम करना असंभव था। Redux / Ngrx को एक कोणीय ऐप में एकीकृत करने की वास्तव में कोई आवश्यकता नहीं है। आप सब कुछ 'कोणीय तरीके' से कर सकते हैं
डिनो

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

जवाबों:


35

मुझे लगता है कि आपको Ngrx स्टोर के बारे में उन दो पोस्टों को पढ़ना चाहिए:

अगर पहला व्यक्ति Ngrx Store द्वारा हल किए गए मुख्य मुद्दों की व्याख्या करता है, तो यह इस कथन को रिएक्ट हाउ-टू से भी उद्धृत करता है जो मूल फ्लक्स, Redux, Ngrx Store या सामान्य रूप से किसी भी स्टोर समाधान के लिए समान रूप से लागू होता है ":

आपको पता चल जाएगा कि आपको फ्लक्स की आवश्यकता कब है। यदि आपको इसकी आवश्यकता नहीं है, तो आपको इसकी आवश्यकता नहीं है।

मेरे लिए Ngrx स्टोर कई मुद्दों को हल करता है। उदाहरण के लिए जब आपको ऑब्जर्वबल्स से निपटना होता है और जब कुछ ऑब्जर्व करने योग्य डेटा के लिए जिम्मेदारी अलग-अलग घटकों के बीच साझा की जाती है। इस मामले में स्टोर एक्शन और रिड्यूसर सुनिश्चित करते हैं कि डेटा संशोधनों को हमेशा "सही तरीके" से किया जाएगा।

यह http अनुरोध कैशिंग के लिए एक विश्वसनीय समाधान भी प्रदान करता है। आप अनुरोधों और उनकी प्रतिक्रियाओं को संग्रहीत करने में सक्षम होंगे, ताकि आप सत्यापित कर सकें कि आप जो अनुरोध कर रहे हैं वह अभी तक संग्रहीत प्रतिक्रिया नहीं है।

दूसरी पोस्ट फेसबुक के अपठित संदेश काउंटर मुद्दे के साथ रिएक्ट की दुनिया में इस तरह के समाधानों के बारे में बताती है।

सेवाओं में गैर-उपयोग करने योग्य डेटा संग्रहीत करने के अपने समाधान के बारे में। जब आप निरंतर डेटा के साथ काम कर रहे हों तो यह ठीक काम करता है। लेकिन जब कई घटकों को इस डेटा को अपडेट करना होगा, तो आप संभवतः परिवर्तन का पता लगाने के मुद्दों और अनुचित अद्यतन मुद्दों का सामना करेंगे, जिसे आप हल कर सकते हैं:

  • निजी विषय सार्वजनिक अवलोकन और अगले समारोह के साथ पर्यवेक्षक पैटर्न
  • Ngrx Store

9

उदाहरण के लिए, html में सीधे डेटा का उपयोग करना और सीधे सेवा का उपयोग करना भी एक 3 विकल्प है *ngFor="let item of userService.users"। तो जब आप userService.usersऐड या अपडेट एक्शन के बाद सेवा में अपडेट होते हैं, तो HTML में स्वचालित रूप से प्रस्तुत किया जाता है, किसी भी वेधशाला या घटनाओं या स्टोर की कोई आवश्यकता नहीं है।


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

2

यदि आपके ऐप के डेटा का उपयोग कई घटकों में किया जाता है, तो डेटा को साझा करने के लिए किसी प्रकार की सेवा की आवश्यकता होती है। इसे करने के कई तरीके हैं।

एक मामूली जटिल ऐप अंततः सेवाओं में किए गए डेटा हैंडलिंग के साथ, घटकों के लिए वेधशालाओं के माध्यम से डेटा को उजागर करने के साथ फ्रंट एंड बैक बैक संरचना की तरह दिखाई देगा।

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

आपकी एपीआई कई राज्य प्रबंधन पुस्तकालयों में से एक की तरह खत्म हो जाएगी जो पहले से मौजूद हैं। वे मुश्किल समस्याओं को हल करने के लिए मौजूद हैं। यदि आपका ऐप सरल है, तो आपको उनकी आवश्यकता नहीं हो सकती है।

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