मैं एक काफी जटिल एम्बरजेस एप्लिकेशन कर रहा हूं, और इसे एपीआई के बैकएंड में जोड़ रहा हूं।एम्बरजेएस: मॉडल, स्टोर, नियंत्रक, दृश्यों के लिए चिंताओं का अच्छा अलगाव एक जटिल अनुप्रयोग में?
एपीआई कॉल आमतौर पर किसी विशेष मॉडल से बंधे नहीं होते हैं, लेकिन प्रतिक्रिया के विभिन्न वर्गों में विभिन्न प्रकार की वस्तुओं को वापस कर सकते हैं, उदा। इवेंट्स एपीआई के लिए एक कॉल घटनाओं को वापस कर देगा, लेकिन उन घटनाओं में शामिल मीडिया संपत्तियों और व्यक्तियों को भी वापस कर देगा।
मैंने अभी प्रोजेक्ट के साथ शुरुआत की है, और मैं स्वच्छ रखरखाव कोड आधार रखने के लिए चिंताओं को अलग करने के तरीके के बारे में कुछ विशेषज्ञ मार्गदर्शन प्राप्त करना चाहता हूं।
तरह से मैं यह कर रहा है आ रहा हूँ:
- मॉडल: अनिवार्य रूप से अपने खेतों, और अन्य गणना गुणों के साथ रिकॉर्ड संभाल। हालांकि, मॉडल अनुरोध करने के लिए ज़िम्मेदार नहीं हैं।
- उदा। व्यक्तिगत, घटना, चित्र, पोस्ट आदि
- स्टोर: वे अनिवार्य रूप से कैश कर रहे हैं। उदाहरण के लिए,
eventStore
किसी सरणी में सर्वर से प्राप्त सभी घटनाओं (संभावित रूप से अलग-अलग अनुरोधों से), औरid
द्वारा अनुक्रमित घटनाओं के हैश में भी संग्रहीत करेगा।- उदा। individualStore, eventStore आदि
- नियंत्रकों: वे संबंधित API कॉल करता है, उदा का एक सेट करने के लिए टाई घटनाक्रम नियंत्रक घटनाओं या किसी विशेष घटना को लाने या एक नई घटना आदि बनाने के लिए ज़िम्मेदार होंगे। वे बाद में पुनर्प्राप्ति के लिए विभिन्न
stores
के जवाब को 'मार्ग' देंगे। दुकानों को भेजे जाने के बाद वे प्रतिक्रिया नहीं रखते हैं।- उदा। eventsController, userSearchController आदि
- दृश्य: वे एक विशेष दृश्य से बंधी हैं। आम तौर पर, मेरे आवेदन में विभिन्न स्थानों पर कई विचार हो सकते हैं, उदा। एक अलग घटना पृष्ठ होने के अलावा डैशबोर्ड पर
latestEventsView
। - टेम्पलेट: वे क्या हैं।
अक्सर, मेरे टेम्पलेट स्टोर करने के लिए सीधे बाध्य होने के लिए आवश्यकता होती है (जैसे peopleView
एक सूची में individualStore में सभी व्यक्तियों, कुछ आदेश के अनुसार क्रमबद्ध सूची चाहता है)।
और कभी-कभी, वे एक गणना संपत्ति
alivePeople: function() { ... }.property('[email protected]'),
विभिन्न छानने के लिए बाध्य और सॉर्टिंग विकल्प 'चुना' दृश्य में, दुकान से अलग-अलग सूचियां लौटना चाहिए। आप what is the right emberjs way to switch between various filtering options?
पर मेरा अंतिम प्रश्न देख सकते हैं यह फ़िल्टरिंग, स्वयं को या स्टोर को कौन देखना चाहिए?
क्या परतों में इस प्रकार की बाध्यकारी ठीक है, या एक कोड गंध है? क्या चिंताओं को अलग करना अच्छा है, या क्या मुझे कुछ याद आ रहा है? नियंत्रक यहां कुछ और नहीं कर रहे हैं? क्या मेरे विचार सीधे दुकानों से बंधे रहेंगे?
एमवीसी का कोई विशेष विशेष मामला मेरी आवश्यकताओं के अनुरूप है?
अपडेट 17 अप्रैल 2012 मेरे शोध से http://vimeo.com/user7276077/videos और http://jzajpt.github.com/2012/01/17/emberjs-app-architecture.html और http://jzajpt.github.com/2012/01/24/emberjs-app-architecture-data.html
पर चला जाता है, विशेष रूप से मेरे डिजाइन है कि मैं समझ गए होंगे साथ कुछ मुद्दे हैं:
- अनुरोध कर नियंत्रकों (स्टोर या मॉडल या कुछ और इसे करना चाहिए, नियंत्रकों नहीं)
- राज्यचाप गायब हैं - वे दृश्य-नियंत्रक इंटरैक्शन के लिए महत्वपूर्ण हैं (आप महसूस कुछ समय बाद आपकी सहभागिता कोई और अधिक सरल कर रहे हैं)
इस कार्रवाई में राज्य चार्ट के एक अच्छा उदाहरण है: https://github.com/DominikGuzei/ember-routing-statechart-example
अद्यतन 9 वीं जनवरी 2013
हाँ, यह समय हो गया लेकिन इस सवाल को हाल ही में बहुत सारे विचार मिल रहे हैं, और इसलिए मैं इसे संपादित करना चाहता हूं ताकि लोगों को समझ हो।
एम्बर का परिदृश्य बहुत बदल गया है क्योंकि इस सवाल को तैयार किया गया था, और नया guides बहुत सुधार हुआ है। एम्बरजेएस सम्मेलनों (रेल की तरह) के साथ आया है और एमवीसी अब और अधिक अच्छी तरह परिभाषित है।
किसी को अभी भी उलझन में सभी गाइड कुछ वीडियो पढ़ना चाहिए, और देखने के लिए: Seattle Ember.js Meetup
पल में, मैं Ember.js 1.0.0-pre2
करने के लिए अपने आवेदन उन्नयन कर रहा हूँ।
मैं इन समान प्रकार के प्रश्नों के माध्यम से काम कर रहा हूं। संबंधित: http://stackoverflow.com/questions/10045619/controller-strategy-garbage-collection-destroy –
क्या आप एम्बर-डेटा का उपयोग कर रहे हैं? –
फिर, इस तरह की जानकारी वह जगह है जहां इस समय एम्बरजेएस की कमी है। मैंने कल एम्बरजेएस के साथ काम करना शुरू कर दिया है और सचमुच मेरे बालों को खींचने के बिंदु से निराश हो गया है क्योंकि एम्बरजेएस को कैसे स्थापित किया जाना चाहिए और प्रत्येक प्रकार की वस्तु किसके लिए ज़िम्मेदार है - कम से कम: यह बहुत कठिन है ढूँढ़ने के लिए। –