2016-04-30 7 views
30

कोणीय एक दो-तरफा डेटा बाध्यकारी कार्यक्षमता के कारण एमवीवी * डिजाइन सिद्धांत को कम या कम कर रहा था।कोणीय 2: एमवीसी, एमवीवीएम या एमवी *?

कोणीय 2 घटक-आधारित यूआई को अपना रहा है, एक ऐसी अवधारणा जो डेवलपर्स को प्रतिक्रिया देने के लिए परिचित हो सकती है। एक अर्थ में, कोणीय 1.x नियंत्रक और निर्देश नए कोणीय 2 घटक में धुंधला हो जाते हैं।

इसका मतलब है कि कोणीय 2 में कोई नियंत्रक नहीं हैं और कोई निर्देश नहीं है। इसके बजाए, एक घटक में एक चयनकर्ता होता है जो घटक टैग के अनुरूप एचटीएमएल टैग के अनुरूप होता है और घटक के लिए एक HTML टेम्पलेट निर्दिष्ट करने के लिए @View।

Angular2 अभी भी लागू करता है दो तरह से डेटा-बाइंडिंग लेकिन अगर मैं एक @Component कि लेख की एक सूची प्रदर्शित करता है और एक class उस लेख वस्तु को परिभाषित करता है है, उदाहरण के लिए मॉडल शामिल नहीं है:

class Article { 
title: string; 
link: string; 
votes: number; 

constructor(title: string, link: string, votes?: number){ 
    this.title = title; 
    this.link = link; 
    this.votes = votes || 0; 
} 

यह, एमवीसी पैटर्न में मॉडल माना जाएगा।

तो इस पर विचार करें कि डिजाइन पैटर्न Angular निकटतम का पालन करता है?

उत्तर

6

मैं एम ** नोटेशन (दुर्व्यवहार और धुंधला प्रकार) का उपयोग करने के लिए बहुत उत्सुक नहीं हूं।

वर्ग (आपके मामले में अनुच्छेद) मॉडल

घटक विलीन हो जाती है दृश्य (टेम्पलेट में) और नियंत्रक (प्रतिनिधित्व करता है: फिर भी मेरी राय में यह डाल करने के लिए सबसे आसान और सबसे प्रभावी तरीके से Angular2 में वह यह है कि टाइपप्रति तर्क)

मुझे आशा है कि यह मदद करता है

16

दोनों कोणीय 1 & कोणीय 2 हैं निम्नलिखित MVC (मॉडल, देखें, नियंत्रक) पैटर्न।

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

कोणीय 2 में, टेम्पलेट दृश्य है, कक्षा नियंत्रक & सेवा है (जब यह डेटा पुनर्प्राप्त करने के लिए उपयोग की जाती है) मॉडल है।

क्योंकि कोणीय क्लाइंट साइड फ्रेमवर्क है, एमवीसी पैटर्न कोणीय को एमवीवीसी (मॉडल, व्यू, व्यू कंट्रोलर) कहा जा सकता है।

+0

थोड़ा और समझा सकता है कि क्यों 'एमवीवीसी'? धन्यवाद। – Anatoly

+4

सेवा मॉडल नहीं है। मॉडल मॉडल है। आम तौर पर एमवीसी से संबंधित ढांचे में आपके पास वास्तव में 2 प्रकार के मॉडल होते हैं (1) डोमेन मॉडल (2) वह मॉडल जो डोमेन मॉडल को दृश्य में अनुकूलित करता है (कभी-कभी व्यूमोडेल भी कहा जाता है)। – gusgorman

+2

मुझे अवांछित नहीं है और इसने इतने सारे अपवॉट क्यों किए हैं। यह बहुत सारे स्तरों पर गलत है और ऊपर दिए गए उत्तर के साथ सीधे विरोधाभास में है जो कि अधिक सटीक है। –

24

कोणीय 2 वास्तव में एमवीसी नहीं है (लेकिन मुझे लगता है कि आप समांतरता खींच सकते हैं)। यह घटक आधारित है। मुझे समझाएं:

कोणीय 1 एमवीसी और एमवीवीएम (एमवी *) है। कोणीय 1 कई कारणों से ग्राउंडब्रैकिंग था, लेकिन मुख्य कारणों में से एक था क्योंकि यह निर्भरता इंजेक्शन का उपयोग करता था। बैकबोन और नॉकआउट जैसे अन्य जेएस फ्रेमवर्क की तुलना में यह एक नई अवधारणा थी।

फिर प्रतिक्रिया बाहर आई और पूरी तरह से फ्रंट एंड आर्किटेक्चर को बदल दिया। यह फ्रंट एंड एमवीसी और एमवीवीएम के अलावा अन्य विकल्पों के बारे में और सोचता है। इसके बजाए इसने घटक आधारित वास्तुकला का विचार बनाया। HTML & जावास्क्रिप्ट के बाद से इसे फ्रंट एंड आर्किटेक्चर के सबसे महत्वपूर्ण परिवर्तन में से एक माना जा सकता है।

कोणीय 2 (और कोणीय 1.5.x) ने प्रतिक्रिया के दृष्टिकोण को लेने और घटक आधारित वास्तुकला का उपयोग करने का निर्णय लिया।हालांकि, आप एमवीसी, एमवीवीएम और कोणीय 2 के बीच मामूली समानताएं खींच सकते हैं, यही कारण है कि मुझे लगता है कि यह थोड़ा उलझन में हो सकता है।

यह कहकर, अंगुलर 2 में कोई नियंत्रक या व्यूमोडल्स नहीं हैं (जब तक कि आप उन्हें शिल्प नहीं देते)। इसके बजाए, ऐसे घटक हैं, जो टेम्पलेट (एक दृश्य की तरह), कक्षाएं और मेटाडेटा (सजावट) से बने होते हैं।

उदाहरण के लिए, मॉडल वे कक्षाएं हैं जो डेटा रखती हैं (उदाहरण के लिए @ कोणीय/http का उपयोग करके http सेवा द्वारा लौटाए गए डेटा को रखने के लिए डेटा अनुबंध)। हम एक नई कक्षा बना सकते हैं जो विधियों और गुणों (तर्क) जोड़ता है, फिर मॉडल और कक्षा को मर्ज करें। यह एक ViewModel की तरह कुछ बनाता है। इसके बाद हम अपने घटक के भीतर इस व्यूमोडेल का उपयोग कर सकते थे।

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

कोणीय मॉड्यूल का भी उपयोग करता है जो जावास्क्रिप्ट (ईसीएमएस्क्रिप्ट 6) के आगामी संस्करण का हिस्सा है। यह बहुत शक्तिशाली है क्योंकि जावास्क्रिप्ट को हमेशा नामस्थान और कोड संगठन के साथ समस्याएं होती हैं। यह वह जगह है जहां आयात और निर्यात घटकों में आते हैं।

उपयोगी लिंक्स:

https://medium.com/javascript-scene/angular-2-vs-react-the-ultimate-dance-off-60e7dfbc379c

Is angular2 mvc?

http://malcoded.com/angular-2-components-and-mvvm

0

कोणीय में (छोड़कर संस्करण 2 और) हम बाध्यकारी सुविधा डेटा का उपयोग कर रहे हैं। यह डेटा बाध्यकारी सुविधा एनजी अनुप्रयोग में एमवीवीएम पैटर्न को लागू करती है क्योंकि इस मामले में नियंत्रक वी & एम (मॉडल में कारणों में परिवर्तन और इसके विपरीत परिवर्तनों को देखने के लिए परिवर्तन) के बीच बाध्यकारी बनाता है इसलिए एमवीसी शब्दावली में हम 'सी' को 'वीएम' से बदल सकते हैं जो ' MVVM '

0

मेरी विनम्र राय में आप MVVM का उपयोग कर कोणीय 2 में विकसित अगर आप कुछ सम्मेलनों का उपयोग कर करना चाहते हैं कर सकते हैं:

  1. एक घटक (टेम्पलेट) देख सकते हैं और viewmodel (वर्ग) शामिल हैं।
  2. आप केवल मॉडल को याद करते हैं और आप इसे सामान्य टाइपस्क्रिप्ट क्लास के रूप में बना सकते हैं और इसे व्यूअरोडल को कन्स्ट्रक्टर पैरामीटर के रूप में पास कर सकते हैं।

तकनीक PRISM और WPF में उपलब्ध एक के समान ही है और वहां आप एमवीवीएम (यदि आप चाहते हैं) का उपयोग करके सबकुछ विकसित करते हैं।

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