2016-02-13 8 views
14

एंगुलरजेएस दो-तरफा डाटाबेसिंग प्रदान करता है।AngularJS में दो-तरफा डाटाबेसिंग क्यों एक एंटीपाटरन है?

मैंने कई एंगुलरजेएस ऐप्स बनाए और एक शक्तिशाली फीचर होने के लिए दो-तरफा डाटाबेसिंग पाया, जिससे मेरी उत्पादकता में वृद्धि हुई।

हाल ही में हालांकि मैं पोस्ट और लेखों में अधिक से अधिक आते हैं जो दावा करते हैं कि दो-तरफा डाटाबेसिंग एक एंटीपाटर है।

उदाहरण:

संसाधनों में से अधिकांश की "यूनिडायरेक्शनल Dataflow" पक्ष में तर्क है कि यह प्रतिक्रिया द्वारा/बढ़ावा दिया जाता है फ्लक्स।

इसके अलावा

कुछ समय है कि वहाँ कोई दो तरह से बाध्यकारी होगा के लिए Angular2 announced ... लेकिन ताज़ा दस्तावेज़ों से पता चलता है कि यह वास्तव फिर two-way databinding via ngModel पेशकश कर रहा है (के शीर्ष पर लागू किया property- और घटना बाध्यकारी)

हालांकि मैं अभी तक AngularJS में दो-तरफा डेटाबेस से संबंधित समस्याओं को पूरी तरह से समझ नहीं पा रहा हूं।

अन्य ग्राहक प्रौद्योगिकियों (यानी झूले, ग्रहण-आरसीपी, WinForms, WPF ...) भी दो तरह से डेटा बाइंडिंग प्रस्तुत करते हैं, और मैं दावा है कि यह एक विरोधी पैटर्न है से अधिक कभी नहीं ठोकर खाई ...

क्या कोई कैननिकल उदाहरण है जो आसानी से उन समस्याओं को दिखाता है जो AngularJS में दो-तरफा डेटाबेस से हो सकते हैं?

The video मैं ऊपर लिंक संकेत है कि $scope.watch समस्या है लगता है ... लेकिन उदाहरण $scope पर सामने आ रहा एक समारोह से जुड़ कर $scope.watch बिना लागू किया जा सकता।
यदि आप $scope (यानी controller as का उपयोग कर) से बचने से बचते हैं, तो दो-तरफा डाटाबेसिंग के साथ कौन सी समस्याएं रहती हैं?

+2

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

+0

@MartijnK आपकी टिप्पणी के लिए धन्यवाद। आपका तर्क मूल रूप से समझा रहा है कि दो-तरफा डाटाबेसिंग को कोणीय जेएस में खराब रूप से लागू किया गया है ... क्या वास्तव में यह कारण है कि दो-तरफा डाटाबेसिंग की "अवधारणा" एक एंटीपाटरन है? नॉकआउट दो-तरफा डाटाबेसिंग भी प्रदान करता है ... इसलिए नॉकआउट को ढांचे के रूप में उपयोग करते समय यह विरोधी पैटर्न नहीं है? – jbandi

+1

मुझे लगता है कि कोई भी जो दो-तरफा बाध्यकारी विरोधी पैटर्न कहता है, यह तर्क देगा कि यह इंजीनियर प्रदर्शन, रखरखाव और स्केलेबिलिटी के खर्च पर कुछ समय और प्रयास को आगे बढ़ाता है। कोणीय 1.x के मामले में, प्रत्येक पाचन चक्र गंदे चेक और कॉलबैक की एक श्रृंखला को ट्रिगर करता है जो जल्दी से हाथ से बाहर निकल सकता है अगर आपको समझ में नहीं आता कि कैसे और क्यों जोड़े जोड़े जाते हैं। यह कहने के लिए कि यह एक विरोधी पैटर्न है एक कठोर आलोचना IMHO है, लेकिन मैं देख सकता हूं कि क्यों कुछ लोग इसे नापसंद करते हैं। –

उत्तर

5

वास्तव में, दो-तरफा डेटा बाध्यकारी के साथ मुख्य समस्या प्रदर्शन है।

जब एंगुलरजेएस जारी किया गया था (1), यह सुविधा सबसे प्रमुख कारण था कि डेवलपर्स द्वारा ढांचे का अधिक उपयोग क्यों किया जाता था।

कोड की एक पंक्ति के बिना, आप एक तत्व पूरी तरह से मॉडल पक्ष या दृश्य की ओर से अपने मूल्य को बदलने के द्वारा गतिशील बना सकते हैं, मूल्य हर जगह बदल गया है मॉडल स्थापित किया जाएगा।

इस सुविधा में, सबसे महत्वपूर्ण उपकरण देख रहा है, और यह दो तरह से डेटा बाइंडिंग के साथ सभी समस्या का प्रतिनिधित्व करता है।

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

यही कारण है कि मेरी सिफारिश है: जितना संभव हो सके दर्शक से बचें।
वे नियंत्रक में लगभग वास्तव में आवश्यक नहीं हैं।

यह भी देखें:

आशा है कि यह आप के लिए और अधिक स्पष्ट है।

+0

दो-तरफा डेटा बाध्यकारी प्रदर्शन का कारण नहीं है, इसलिए पहला कारक अन्य कारकों के आधार पर सत्य और गलत है, इसलिए यह गलत है। –

+1

@MartijnK के रूप में उनकी टिप्पणी में कहा गया है, ट्रिगर घटनाओं का झुकाव मूल रूप से समस्या है। Angular.js मानते हैं कि घटनाएं गैर-शुद्ध हैं (यानी राज्य/मॉडल बदल सकती हैं) इसलिए कोणीय हमेशा मानता है कि प्रत्येक घटना के बाद सभी डेटा बदल सकते थे। –

संबंधित मुद्दे