10

मैं एक काफी जटिल एम्बरजेस एप्लिकेशन कर रहा हूं, और इसे एपीआई के बैकएंड में जोड़ रहा हूं।एम्बरजेएस: मॉडल, स्टोर, नियंत्रक, दृश्यों के लिए चिंताओं का अच्छा अलगाव एक जटिल अनुप्रयोग में?

एपीआई कॉल आमतौर पर किसी विशेष मॉडल से बंधे नहीं होते हैं, लेकिन प्रतिक्रिया के विभिन्न वर्गों में विभिन्न प्रकार की वस्तुओं को वापस कर सकते हैं, उदा। इवेंट्स एपीआई के लिए एक कॉल घटनाओं को वापस कर देगा, लेकिन उन घटनाओं में शामिल मीडिया संपत्तियों और व्यक्तियों को भी वापस कर देगा।

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

तरह से मैं यह कर रहा है आ रहा हूँ:

  • मॉडल: अनिवार्य रूप से अपने खेतों, और अन्य गणना गुणों के साथ रिकॉर्ड संभाल। हालांकि, मॉडल अनुरोध करने के लिए ज़िम्मेदार नहीं हैं।
    • उदा। व्यक्तिगत, घटना, चित्र, पोस्ट आदि
  • स्टोर: वे अनिवार्य रूप से कैश कर रहे हैं। उदाहरण के लिए, 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 करने के लिए अपने आवेदन उन्नयन कर रहा हूँ।

+0

मैं इन समान प्रकार के प्रश्नों के माध्यम से काम कर रहा हूं। संबंधित: http://stackoverflow.com/questions/10045619/controller-strategy-garbage-collection-destroy –

+0

क्या आप एम्बर-डेटा का उपयोग कर रहे हैं? –

+0

फिर, इस तरह की जानकारी वह जगह है जहां इस समय एम्बरजेएस की कमी है। मैंने कल एम्बरजेएस के साथ काम करना शुरू कर दिया है और सचमुच मेरे बालों को खींचने के बिंदु से निराश हो गया है क्योंकि एम्बरजेएस को कैसे स्थापित किया जाना चाहिए और प्रत्येक प्रकार की वस्तु किसके लिए ज़िम्मेदार है - कम से कम: यह बहुत कठिन है ढूँढ़ने के लिए। –

उत्तर

4
  • आप राज्यों के संदर्भ में अपने आवेदन की सोचना चाहिए। this

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

  • एक दृश्य पर विचार करता है, तो आप किसी भी ब्राउज़र के ईवेंट प्रबंधित या लपेट
    किसी भी 3 पार्टी जावास्क्रिप्ट lib आप एनीमेशन, स्टाइल के लिए उपयोग कर रहे हैं की जरूरत है ..

  • एक वस्तु पर विचार करें यदि आप डोमेन विशिष्ट कब्जा करने के लिए की जरूरत है
    जानकारी, अधिकतर बैकएंड जानकारी की नकल करता है।

  • एक नियंत्रक डोमेन ऑब्जेक्ट के लिए केवल एक प्रॉक्सी है और तर्क को समाहित कर सकता है जो वस्तु के लिए जरूरी नहीं है।

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

+0

आप "राज्यों" जैसे शेयर या अन्य चिंताओं का इलाज कैसे करेंगे, जो आवेदन के किसी भी स्थान से उपलब्ध हैं और राज्य (मार्ग) नहीं बदलते हैं? आमतौर पर वे मोडल की तरह दिखाई देते हैं। विकल्पों के साथ मोडल साझा करना (ट्विटर या फेसबुक के माध्यम से साझा करें) सबसे अच्छा उदाहरण। धन्यवाद। –

0

यह भी देखें http://addyosmani.com/largescalejavascript/ यह विशेष रूप से एम्बरजे के बारे में नहीं है लेकिन यह एक अच्छा लेख है जो आपको एक बड़े पैमाने पर जावास्क्रिप्ट ऐप्स लिखने का विचार देता है।

3

नए राउटर कार्यान्वयन के साथ एम्बर 1.0.0-प्री 4 की रिलीज के बाद से मैंने एक मानक एम्बरजेएस ऐप संरचना का वर्णन करने वाले दो अच्छे संदर्भ देखे हैं।

आप में से जो रेल से परिचित हैं, वे इसे काफी परिचित पाएंगे।

https://github.com/trek/ember-todos-with-build-tools-tests-and-other-modern-conveniences

http://reefpoints.dockyard.com/ember/2013/01/07/building-an-ember-app-with-rails-api-part-1.html

एंबर-रेल परियोजना https://github.com/emberjs/ember-rails में एक EmberJS आवेदन निर्देशिका संरचना अनिवार्य रूप से संरचना के ऊपर दो लिंक में वर्णित के रूप में एक ही है कि बनाने के लिए एक रेल जनरेटर भी शामिल है।

एम्बरजेएस गाइड अब भी नई रूटिंग संरचना का वर्णन करते हैं।http://emberjs.com/guides/

अद्यतन 21/08/2013

आप रेल तो उपयोग कर रहे हैं एंबर-रेल मणि महान है। मैंने इसे बहुत सफलता के साथ उपयोग किया है। एक मानक एम्बर एप्लिकेशन लेआउट प्रदान करने में सहायता के लिए एम्बर समुदाय के भीतर दो प्रयास हैं। जाहिरा तौर पर वे विलय हो जा रहे हैं, लेकिन अब के लिए बाहर की जाँच:

https://github.com/rpflorence/ember-tools

https://github.com/stefanpenner/ember-app-kit

+0

यह सच है। Ember.js 1.0 मारने के साथ, अब हमारे पास चीजों को करने का एक मानक तरीका है। रेल की तरह बहुत (सम्मेलन मिला)। –

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