2013-08-08 7 views
5

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

मैं बेहद निकोलस Zakas (http://www.youtube.com/watch?v=vXjVFPosQHw) और एडी उस्मानी (http://addyosmani.com/largescalejavascript) से प्रेरित था स्केलेबल js वास्तुकला के बारे में बात करते हैं और अपने काम के लिए अपने विचारों में से कुछ को लागू करने की कोशिश कर रहा था।

मैं कई स्वतंत्र मॉड्यूल भर में अपने सभी कोड अलग है, और मध्यस्थ किसी प्रकार के साथ सभी Intercommunications संभाल। ज्यादातर मामलों में यह दृष्टिकोण बहुत अच्छा काम करता है। लेकिन कुछ ऐसे मामले हैं जहां मुझे लगता है कि यह पर्याप्त नहीं है।

मैं जिन मॉड्यूल पर काम कर रहा हूं उनमें से एक एक जटिल जटिल सूची-समान संरचना का प्रतिनिधित्व करता है। यहाँ कुछ सरल उदाहरण:

very simplified example

कुछ प्रतिपादन तर्क इसके अलावा, मॉड्यूल पृष्ठ के इस टुकड़े के लिए जिम्मेदार संभाल चाहिए:

  • पृष्ठांकन
  • टॉगल समूहों
  • के साथ चारों ओर elems और समूहों चलती डीएन
  • काटने/प्रतिलिपि बनाने/चिपकाने/हाथों और समूहों को चिपकाने
  • ताज़ा certaing समूहों/elems
  • elems के भीतर कुछ तर्क
  • निकटतम भविष्य में और अधिक सामान

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

तो मैं यहां पूछने आया हूं कि जटिल मॉड्यूल को एक मॉड्यूल में जटिल करने का कोई तरीका है?

अद्यतन:

मैं कुछ स्पष्ट करना चाहते हैं। मुझे पता है कि मैं अपने कोड में एकाधिक फ़ाइलों में मॉड्यूल (मॉड्यूल पैटर्न से "मॉड्यूल") कैसे अलग कर सकता हूं।

लेकिन क्या मैं वास्तव में के लिए खोज नई तार्किक तरह से एक भी मॉड्यूल (NKZ प्रस्तुति से "मॉड्यूल") के भीतर चिंताओं को अलग करने के लिए है।

+0

आप सवाल थोड़ा अस्पष्ट है, लेकिन सामान्य रूप से, आप एक कार्यक्रम की तरह एक मॉड्यूल का इलाज कर सकते हैं, और मॉड्यूल की दीवारों के भीतर आप अव्यवस्था को कम करने में मदद के लिए उप-मॉड्यूल, कक्षाएं, प्रकार और शुद्ध कार्य बना सकते हैं। आंतरिक प्रक्रिया रीसाइक्लिंग को कम करने के कारण स्वयं निहित मॉड्यूल आम तौर पर अपेक्षाकृत महंगे होते हैं; पूर्व: एक jQuery प्लगइन की तुलना में एक स्टैंडअलोन सूची सॉर्टर। मॉड्यूल एक गड़बड़ से बेहतर हैं, इसलिए आप सही रास्ते पर हैं। निर्भरता इंजेक्शन और नियंत्रण में उलझन की अवधारणाओं को महारत हासिल करने की संभावना है कि आप अपनी स्क्रिप्टिंग को अगले स्तर पर ले जाएं। – dandavis

+0

इस विषय में दिलचस्पी रखने वाले लोग [टी 3] (http://t3js.org/), हाल ही में निकोलस जाकस और बॉक्स में उनकी टीम द्वारा जारी किए गए एक जेएस फ्रेमवर्क को देखना चाहते हैं, जो प्रेजेंटेशन में उल्लिखित अवधारणाओं से सीधे उत्पन्न होता है प्रश्न में जुड़ा हुआ है। [यहां है] (https://www.box.com/blog/introducing-t3-enabling-large-scale-javascript-applications/) जकास से एक ब्लॉग पोस्ट इसे पेश करता है। – Nobita

+0

हाय, यह थोड़ा देर हो चुकी है लेकिन किसी भी तरह सहायक हो सकती है। https://pogsdotnet.blogspot.sg/2017/07/modular-javascript-architecture.html –

उत्तर

1

एकाधिक फ़ाइलों में एक भी मॉड्यूल मैं विस्तार पैटर्न इस पृष्ठ पर पाया का उपयोग कर की सिफारिश करेंगे दसगुणा http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

साथ ही, यहां स्केलेबल जे एस अनुप्रयोग बनाने पर कुछ अधिक संसाधन हैं:

यहाँ के एक वीडियो है "एक स्केलेबल जावास्क्रिप्ट एप्लिकेशन आर्किटेक्चर बनाना" पर निकोलस जाकस द्वारा दी गई एक प्रस्तुति। http://www.youtube.com/watch?v=7BGvy-S-Iag

एक और अच्छा संसाधन http://addyosmani.com/largescalejavascript/

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

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

+0

धन्यवाद @Spencer। सबसे पहले, मुझे Augmention पैटर्न के बारे में पता था, लेकिन मैं इससे दूर रहना पसंद करता हूं क्योंकि इसका उपयोग करके मैं मॉड्यूल पैटर्न की कुछ विशेषताओं का लाभ नहीं उठा सकता। उदाहरण के लिए मेरे पास कुछ var और कार्यों के लिए वास्तव में निजी दायरा नहीं हो सकता है। लेकिन, वास्तव में, मैं एकाधिक फ़ाइलों में एक मॉड्यूल (मॉड्यूल पैटर्न से) को विभाजित करने के लिए बेहतर समाधान के बारे में नहीं सोच सकता। दूसरा, मैंने स्केलेबल जेएस ऐप्स बनाने के निकोलस जाकस और एडी ओस्मानी के दृष्टिकोण का पहले से ही उल्लेख किया है, और मैंने इसका उपयोग पहले से ही कर लिया है। – panfil

+1

और आखिरी वाला। नॉकआउट या पाठ्यक्रम का कोणीय मेरे जीवन को आसान बना देगा। एक सा। लेकिन एक और ठंडा ढांचा एक स्थान पर तर्क की विशाल एकाग्रता की समस्या को हल नहीं करेगा। – panfil

+0

ओह! मैंने उस हिस्से को याद किया जहां आपने कहा था कि आपने मेरे द्वारा प्रदान किए गए दो स्रोतों पर पढ़ा है! दुर्भाग्यवश, मुझे संवर्द्धन पैटर्न का उपयोग करने के अलावा अलग-अलग फ़ाइलों में मॉड्यूल को अलग करने के बेहतर तरीके से अवगत नहीं है। – Spencer

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