2010-12-02 25 views
13

पहली बार मैं एक जटिल जटिल ऐप बना रहा हूं।रेल ऐप को व्यवस्थित करने के लिए कैसे करें

मैं जानना चाहता हूं कि फ़ोल्डरों द्वारा उस ऐप को व्यवस्थित करने का सबसे अच्छा तरीका क्या है। अब तक, मैं एक ऐप (सभी मॉडलों, नियंत्रकों, ईटीसी) के तहत सब कुछ करूँगा लेकिन कुछ ओपन सोर्स कोड पढ़ रहा हूं, मुझे एहसास है कि वे सबकुछ अलग-अलग ऐप्स के नीचे रखते हैं।

उदाहरण के लिए स्प्री कॉमर्स। उनके पास एक सामान्य फ़ोल्डर है और अंदर उनके पास अलग-अलग ऐप्स हैं (API, core, admin, आदि)। यह कैसे किया जाता है और यह करने का सबसे अच्छा तरीका है?

मैं इसे करने के लिए सबसे अच्छा तरीका इंगित करना चाहता हूं (एक पुस्तक, ब्लॉग, कुछ भी) ताकि मैं समझ सकूं कि मैं भविष्य में रखरखाव के लिए अपने ऐप को कैसे आर्किटेक्ट कर सकता हूं।

आप

उत्तर

7

एक तरफ मुझे लगता है कि आपके प्रश्न का शीर्षक थोड़ा उलझन में है। विन्यास पर सम्मेलन का उपयोग करके रेल, 'रेल ऐप को व्यवस्थित करने के तरीके' को परिभाषित करता है। मुझे लगता है कि आपका प्रश्न रेलवे-विशिष्ट के विपरीत आर्किटेक्ट आपके एप्लिकेशन के बारे में है। शायद शीर्षक tweak?

उस तरफ, आपके प्रोजेक्ट के बारे में और जानकारी के बिना यह जवाब देने का एक मुश्किल सवाल है, लेकिन मैं इसे जाने दूंगा।

यदि आप मानते हैं (जैसे मैं करता हूं) तो आपको सभी एप्लिकेशन को सरल बनाना शुरू कर देना चाहिए (जैसे मैं करता हूं) कि आपको the simplest thing that could possibly work बनाकर शुरू करना चाहिए। यह देखते हुए, चूंकि आप रेल का उपयोग कर रहे हैं, तो सबसे आसान बात यह है कि आपके ऐप को वेनिला रेल 3 एप्लिकेशन के रूप में व्यवस्थित करना होगा। यह शायद (मैं शायद 'कहूंगा क्योंकि मुझे ऐप के बारे में कोई विशिष्ट जानकारी नहीं है) आपको अपने ऐप का बीटा संस्करण प्राप्त करने और जटिलताओं के बारे में चिंता किए बिना बहुत तेज़ी से चलने की अनुमति देता है जो इस परियोजना में आपके प्रोजेक्ट के विकास में कोई समस्या नहीं है

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

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

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

भले ही आपका ऐप जंगली रूप से सफल हो (और मुझे उम्मीद है कि यह है!) फिर ट्विटर पर साबित होने के बाद, मौजूदा सेवा को चलाने के लिए जारी रखने वाले अपने एप्लिकेशन को फिर से आर्किटेक्ट करना अभी भी पूरी तरह से संभव है। बस Knuth's statement पर चिपके रहें और आप ठीक हो जाएंगे।

सामग्री पढ़ने के संबंध में, यह एक मुश्किल है। मेरे लिए बहुत सारे एक्सपी और फुर्तीली विकास क्लासिक्स ने मुझे प्रोग्राम और ऐप डिज़ाइन के बारे में एक बड़ी राशि सिखाई। मैं पुस्तक प्रेरणा के लिए this StackOverflow topic भी जांचूंगा।

शुभकामनाएं!

2

IMHO धन्यवाद, मैं एक अनुप्रयोग के रूप में बहुत जटिल परियोजनाओं का निर्माण करेगा। मेरे पास यह मानने का कारण है कि स्प्री और रेडियंट अलग-अलग ऐप्स के तहत निर्माण करते हैं ताकि उनके ओपन सोर्स समुदायों के झुकाव के तहत, योगदानकर्ता मूल डेटा के साथ छेड़छाड़ किए बिना आसानी से कोड का योगदान कर सकते हैं, और आवेदन की मुख्य कार्यप्रणाली।

अन्यथा, आपको बस इसे एक ऐप के रूप में बनाना चाहिए। बस इसे साफ रखें।

6

स्प्री रेल का Railties (Rails::Engines) का उपयोग करता है। इसे अधिक मॉड्यूलर और विस्तार करने में आसान बनाने के लिए रेल 3 में रेलटाइयां पेश की जाती हैं। रेल 3 स्वयं रेलटे का संग्रह है (ActiveSupport, ActiveModel, ActiveRecord, आदि)।

यदि आप एक जटिल ऐप विकसित कर रहे हैं तो मैं अपने 'आर्किटेक्चर की योजना बनाने में कुछ समय बिताने का सुझाव दूंगा। किसी भी प्रारंभिक योजना के बिना एक जटिल ऐप डिजाइन करना निश्चित रूप से सड़क के नीचे रखरखाव दुःस्वप्न के साथ समाप्त होगा। यह नए टीम के सदस्यों के लिए एक विशाल सीखने की वक्र भी पेश करता है, अपनी नई सुविधा परिचय और निश्चित रूप से निराशा को धीमा करता है।

वैसे भी, अनुकूलन से अधिक न करें, लेकिन अपनी आवश्यकताओं के लिए अपनी वास्तुकला को डिजाइन करना न भूलें।

+2

यह मेरी राय में सबसे अच्छा जवाब है। – nemesisdesign

0

यहाँ क्या मुझे आतंक विरोधी विकास के कई वर्षों के लिए समझदार रखा है है:

  1. मैं रेल इंजन का उपयोग, लेकिन मुख्य ऐप जैसा codebase में उन्हें रखने के लिए। यहाँ मॉड्यूलर रेल अनुप्रयोग के लिए अच्छा स्टार्टर है: https://github.com/shageman/the_next_big_thing

  2. जहाँ भी मैं मैं युग्मन को कम करने और चीजों को आसानी से परीक्षण योग्य पुन: प्रयोज्य और पोषणीय बनाने के लिए रचना इस्तेमाल करने की कोशिश कर सकते हैं। यह अंततः मॉड्यूल या इंजन को अलग मणि के रूप में निकालने में मदद करता है। संरचना मार्ग (बढ़ते), निर्देशिका ओवरलेइंग (संपत्ति), निर्भरता इंजेक्शन या कॉन्फ़िगरेशन द्वारा की जाती है।

  3. यदि मुझे इंजन का पुन: उपयोग करने की आवश्यकता नहीं है तो मैंने इसे उसी ऐप कोड में रखा है जो मुख्य ऐप के रूप में एकल तैनाती इकाई है। इसके लिए धन्यवाद मुझे अपने आईडीई में परियोजनाओं के बीच स्विच करने की आवश्यकता नहीं है। विकास के माहौल में इंजन कोड में किए गए किसी भी बदलाव को तुरंत रेल रीलोड तंत्र द्वारा उठाया जाता है।

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