Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii

अपने स्टार्टअप का निर्माण: मेजर फीचर एन्हांसमेंट्स को एप्रोच करना

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Securing an API
Using Faker to Generate Filler Data for Automated Testing

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

Final product image
What You'll Be Creating

यह ट्यूटोरियल Envato Tuts+ पर Building Your Startup With PHP series का एक हिस्सा है। इस सीरीज़ में, मैं एक वास्तविक जीवन के उदाहरण के रूप में मेरी Meeting Planner ऐप का उपयोग करके कांसेप्ट से रियलिटी शुरू करने के माध्यम से आपको गाइड कर रहा हूं। रास्ते में हर कदम, मैं Meeting Planner कोड को ओपन-सोर्स उदाहरणों के रूप में रिलीज़ कर दूँगा जिन्हें आप सीख सकते हैं। जैसे ही वे पैदा होते हैं, मैं स्टार्टअप से संबंधित व्यावसायिक समस्याओं को भी संबोधित करूंगा

मेजर फीचर अपडेट को कैसे एप्रोच करें

इन दिनों मैं Meeting Planner को छोटे इंक्रीमेंटल इम्प्रोवेमेन्ट्स जोड़ने के लिए सबसे अधिक बार काम कर रहा हूं। बेसिक काफी अच्छा काम कर रहा है, और मैं धीरे-धीरे मेरी विज़न और लोगों के फीडबैक से एप्लीकेशन बेस को बेहतर बनाने की कोशिश कर रहा हूं। कभी-कभी, मेरा विज़न एक बड़े परिवर्तन के लिए है, और अब यह कठिन हो सकता है कि कोडबेस का विकास इतना हो गया है।

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

यदि आपने अभी तक नहीं किया है, तो एक मीटिंग को शेड्यूल करने का प्रयास करें, और अब आप एक एक्टिविटी को शेड्यूल कर सकते हैं। यह आपको ट्यूटोरियल के माध्यम से समझने में मदद करेगा।

शुरू करने से पहले, कृपया अपनी कमैंट्स और फीडबैक नीचे साझा करना याद रखें। मैं उन पर नजर रखता हूं, और आप twitter@lookahead_io पर भी पहुंच सकते हैंI अगर आप भविष्य के ट्यूटोरियल के लिए नए फीचर्स या विषयों का सुझाव देना चाहते हैं तो मुझे विशेष रूप से दिलचस्पी है I

एक चेतावनी के रूप में, मीटिंग प्लानर के लिए सभी कोड PHP के लिए Yii2 फ्रेमवर्क में लिखा गया है। यदि आप Yii2 के बारे में अधिक जानना चाहते हैं, तो हमारी समानांतर श्रृंखला Yii2 के साथ प्रोग्रामिंग देखें।

एक्टिविटी प्लानिंग फ़ीचर

Building Startups - Approaching Major Features - Planning an Activity page

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

एक उदाहरण के रूप में, यहां ग्रुप्स के लिए शेड्यूलिंग का एक वीडियो है:

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

दूसरे शब्दों में, मैं नीचे दिखाए गए समय के लिए बनाये गए पैनल की तरह एक्टिविटीज के लिए बनाना चाहता था:

Building Startups - Approaching Major Features - The Older Plan a Time Panel

MVC आर्किटेक्चर और मेरा कोड naming स्कीम मीटिंग के समय और स्थानों के बीच बहुत ही समान है, इसलिए एक्टिविटीज बनाना सतह पर बहुत सरल लग रहा था। हालांकि, ऐसा करने के निर्णय का व्यापक असर पड़ा।

परिवर्तनों में स्कोपिंग

दोनों के बारे में सोचने के लिए एक बड़ा फीचर जोड़ने पर यह महत्वपूर्ण है कि कोड को कहाँ बदलने की आवश्यकता होगी और आपके एप्लीकेशन में सभी जगहों पर प्रभाव पड़ सकता है जो प्रभावों के माध्यम से सोचने के लिए प्रभावित हो सकता है।

Customer-Facing Impacts

डिजाइन पक्ष से, मैंने सोचा था कि कैसे एक्टिविटीज customer-facing करने वाली सेवा को प्रभावित करती है:

  • यह मीटिंग के आयोजन को एक नए टाइप को अनुमति देकर बदल जाएगा, एक एक्टिविटी-ड्रिवेन इवेंट। प्लानिंग पृष्ठ पर एक अतिरिक्त पैनल होगा।
  • एक्टिविटी पैनल को डिफॉल्ट से चुनने या अपनी कस्टमाइज करने और खुद जोड़ने के लिए अनुमति देने के लिए डिज़ाइन किए जाने की आवश्यकता होगी, उदाहरण के लिए सिर्फ स्कीइंग के बजाय बैककंट्री स्कीइंग, "Go see movie" के बजाय "Go see Star Wars Rogue One"।
  • ईमेल इन्विताशंस को एक्टिविटी ऑप्शंस सूचीबद्ध करने के लिए स्थान शामिल करना होगा।
  • कैलेंडर इवेंट्स मिलने वाले सब्जेक्ट के साथ चुने गए एक्टिविटी को इंटेग्रटे करना चाहते हैं।
  • ऑर्गनिज़ेर्स किसी मित्र या समूह को किसी एक्टिविटी को चुनने के बिना किसी जगह का चयन कर सकते हैं, इसलिए मुझे इसकी अनुमति देने की आवश्यकता है। वर्तमान में, सिस्टम आपको कम से कम एक बार और जगह सुझाए जाने तक आमंत्रण नहीं भेजता है।
  • यदि कोई किसी मीटिंग में बदलाव का अनुरोध करता है, परिवर्तन अनुरोधों के लिए समर्थन एक्टिविटीज का समर्थन करने के लिए विस्तारित होगा।

ये बेसिक्स के अधिकांश थे अब, कोड के बारे में सोचें।

कोड प्रभाव

सोर्स कोड ब्रांचिंग

अक्सर, यह आपके स्वयं के कोड को GitHub में बांटने के लिए सहायक होता है ताकि आप स्थिर प्रोडक्शन-लेवल कोडबेस के अलावा नए फीचर पर काम कर सकें। यह आपको बड़े चेंज पर काम करते हुए return करने और बग्स को फिक्स करने या छोटे वृद्धिशील परिवर्तनों पर काम करने की अनुमति देता है। GitHub के folks एक तरह से कड़े होते हैं जो टीमों के लिए निश्चित समझ में आता है:

केवल एक नियम है: master ब्रांच में कुछ भी हमेशा deploy किया जा सकता है।

चूंकि मेरे में सिर्फ एक है और मैं अपने कोडबेस को प्रबंधित करने में बहुत अच्छा हूं, इस नियम के बारे में मैं थोड़ा और अधिक laissez हूं।

लेकिन जब आप परीक्षण के लिए तैयार हों तब कोड को बदलने की समीक्षा के लिए ब्रांचिंग कोड भी उपयोगी होता है। आज के ट्यूटोरियल के अंत में मैं इसके बारे में एक प्रदर्शन को शेयर करूँगा।

Replicating Common Code

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

समय और जगहों के लिए, MeetingTime और MeetingPlace के साथ-साथ मॉडलों को भी MeetingTimeChoices और MeetingPlaceChoices के रूप में बुलाया जाता है। आप इसे बनाने के लिए Building Your Startup With PHP: Scheduling Availability and Choices को भी पढ़ सकते है।

इसलिए एक्टिविटीज को जोड़ने के लिए अनिवार्य रूप से इनकी दोहरीकरण (duplicating) की आवश्यकता होती है, जिसमें MeetingActivity और MeetingActivityChoices और उनके साथ controllers, models, views, JavaScript और Ajax और डाटाबेस माइग्रेशन आदि शामिल होते हैं।

अकाउंट और मीटिंग सेटिंग

इसके अलावा, ऑर्गनिज़ेर्स के पास विभिन्न अकाउंट की सेटिंग्स और प्रति मीटिंग सेटिंग्स की प्राथमिकता (preference) है, इसके लिए कि सहभागी (participants) सुझाव दे सकते हैं और अंतिम एक्टिविटी को  चुन सकते हैं।

ईमेल टेम्पलेट्स

एक्टिविटीज को जोड़ने से invitations और पूरी मीटिंग्स के लिए ईमेल टेम्पलेट्स भी एफेक्ट होते हैं।

इवेंट इतिहास और लॉग्स

चूंकि एक मीटिंग में हर परिवर्तन लॉग होता है, प्रत्येक एक्टिविटी विकल्प और परिवर्तन भी लॉग इन करने के लिए आवश्यक होते हैं।

Other Miscellaneous Areas

एक्टिविटी को शामिल करने के लिए .ics कैलेंडर फ़ाइल को बदला जाना चाहिए। अंत में, API को अपडेट करने की आवश्यकता होगी- और यहां तक कि एडमिनिस्ट्रेटिव डैशबोर्ड के आंकड़े भी।

हालांकि यह आसान लग रहा था, एक्टिविटीज को जोड़ने के लिए वास्तव में बहुत सारे नए कोड और परीक्षण की आवश्यकता है।

कोडिंग हाइलाइट्स

हांलांकि एक ट्यूटोरियल में कवर करने के लिए नए कोड बहुत ज्यादा हैं, तो हम ऊपर दिए गए कुछ कॉन्सेप्ट्स से हाइलाइट किए आस्पेक्ट्स के माध्यम से चलते हैं।

डाटाबेस माइग्रेशन

सबसे पहले, मैंने डेटाबेस माइग्रेशन को बनाया। इससे पहले मैंने सामान्य में फीचर पहलुओं के साथ कोड को दोहराया था। यहां MeetingActivity माइग्रेशन बनाम पुराने MeetingTime टेबल माइग्रेशन का एक उदाहरण है:

यहां MeetingTime का माइग्रेशन है, और आप समानताएं देख सकते हैं:

आखिरकार, मुझे निम्नलिखित नई टेबल के लिए पांच की आवश्यकता है:

  1. m161202_020757_create_meeting_activity_table
  2. M161202_021355_create_meeting_activity_choice_table, प्रत्येक एक्टिविटी के लिए प्रत्येक मीटिंग प्रतिभागी (participants) की उपलब्धता वरीयताओं (availability preferences) को संग्रहीत (store) करने के लिए
  3. एक्टिविटीज को जोड़ने या चुनने के लिए किसी विशिष्ट मीटिंग की सेटिंग के लिए m161202_024352_extend_meeting_setting_table_for_activities
  4. अकाउंट की डिफ़ॉल्ट सेटिंग के लिए m161202_024403_extend_user_setting_table_for_activities
  5. M161203_010030_extend_meeting_table_for_activities और किसी एक्टिविटी के साथ या बिना किसी मीटिंग की प्रॉपर्टी को दर्शाने के लिए is_activity जोड़ने के लिए

एक्टिविटीज के लिए MVC फ्रेमवर्क का निर्माण

Building Startups - Approaching Major Features - The Gii Scaffolding Menu

मैंने model, controller, और प्रारंभिक views बनाने के लिए Yii की Gii scaffolding क्षमता का उपयोग किया। मैंने माइग्रेशन और Gii को श्रृंखला में पहले कवर किया है।

जावास्क्रिप्ट और jQuery के परिवर्तन

जावास्क्रिप्ट और jQuery के इस्तेमाल में भी काफी बढ़ोतरी हुई, खासकर अब जब पेज को रिफ्रेश करने के बिना, एक मीटिंग के लिए प्लानिंग एलिमेंट्स के साथ इंटरेक्शन करना Ajax के साथ किया जाता है।

उदाहरण के लिए, यह देखने के लिए कोड लूप है कि मीटिंग का समय चुना गया है या नहीं:

सामान्य नेमिंग स्कीम का उपयोग करके, एक्टिविटीज के लिए कोड लिखना इस से प्रतिकृति (replicable) था:

अन्य फंक्शन्स, जैसे कि यूजर के लिए रेस्पॉन्सेस प्रदर्शित करते हैं, केवल एक्टिविटीज के लिए एक्सटेंड होने की आवश्यकता होती है:

यहां तक कि एक फीचर के साथ-साथ जो मौजूदा फीचर्स के क्वालिटी का प्रतिबिम्ब है, नए कोड का addition व्यापक था। उदाहरण के लिए यहां अधिक जावास्क्रिप्ट है। इस कोड में प्लानिंग पेज पर मीटिंग टाइम्स की इंटरैक्टिव ajax कार्यक्षमता का अधिक हिस्सा शामिल है:

फ्रेमवर्क एडिशन्स

निश्चित रूप से, मॉडल, कंट्रोलर और व्यूज शामिल थे जिन्हें जोड़ा जाना था। यहां MeetingActivity.php मॉडल से एक अंश है, जिसमें कई तरह की डिफ़ॉल्ट एक्टिविटीज की सूची है जो यूजर जल्दी से टाइप करने के लिए टाइप कर सकते हैं:

Building Startups - Approaching Major Features - Activity Typeahead List

और यहाँ उपरोक्त defaultActivityList() का उपयोग करते हुए TypeaheadBasic विजेट के साथ /frontend/views/activity/_form.php का एक अंश है:

लेकिन आम फ्रेमवर्क आवश्यकताओं के बाहर कोड में कई बदलाव हैं। यहां Meeting.php मॉडल का canSend(), फ़ंक्शन है जो यह निर्धारित करता है कि यूजर को मीटिंग के लिए निमंत्रण भेजने की अनुमति है या नहीं। यह निर्धारित करता है कि क्या मीटिंग की समय और एक्टिविटी या समय और जगह होने के लिए न्यूनतम आवश्यकताओं की पूर्ति हुई है।

नीचे, आप देख सकते हैं कि एक्टिविटीज के लिए एक नया अनुभाग (section) कैसे जोड़ा जा सकता है:

ईमेल टेम्पलेट्स

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

Building Startups - Approaching Major Features - Email Invitation Theme

अनिवार्यतः (essentially), यदि मीटिंग में कोई एक्टिविटी होती है, तो आमंत्रण में बार-बार और जगहों पर एक विस्तृत पंक्ति (wide row) शामिल होती है, फिर समय और जगहों के लिए मौजूदा कोड का प्रतिलिपिकारक (replicating) किया जाता है:

परिवर्तनों को दर्शाते हुए

अंत में, एक्टिविटी फीचर के लिए कोड की एक बड़ी नई ब्रांच की आवश्यकता है। यहां पुल करने की रिक्वेस्ट है:

यह इतना बड़ा था कि मैंने GitHub के सभी बदलावों के माध्यम से appropriate music playing in the background के साथ एक मजेदार वीडियो स्क्रॉल करने का निर्णय लिया ... आनंद लें:

कुल मिलाकर, एक्टिविटीज का निर्माण करना चुनौतीपूर्ण था और मेरे लिए साइट आर्किटेक्चर के बारे में सोचने और एक-व्यक्ति स्टार्टअप के कोडबेस पर तेजी से, स्थिर प्रगति के बारे में सोचने में सहायक था। प्रतिकृति (replication) का उपयोग करें, लेकिन ओवरआल स्कोप पर पहले रेप्लिकेशन करें।

एक्टिविटी फीचर ने अनुमान लगाए गए क्षेत्रों से कईं अधिक को स्पर्श किया।

आगे की योजना आपको नई फीचर के लिए कभी-न खत्म होने वाली कोडिंग जाल में फंसने से बचने में मदद करेगी। यदि आप अपने आप को कुछ गहरे खाई में पाते हैं, जो कोडिंग दुःस्वप्न जो अभी खत्म नहीं हुआ, अपनी फीचर branch में अपने परिवर्तनों की जांच करें, मास्टर पर वापस स्विच करें और कुछ और काम करें। यह आपकी सोच को साफ करने में मदद करता है।

मैंने निश्चित रूप से इस प्रकरण में आपको गाइडिंग करने के लिए थोड़ा अलग एप्रोच लगाया, और मुझे आशा है कि यह सहायक था।

क्या आपके विचार हैं? आईडिया? फीडबैक? आप हमेशा Twitter पर @lookahead_io पर सीधे पहुंच सकते हैं I PHP श्रृंखला के साथ अपने स्टार्टअप के निर्माण में यहां आने वाले ट्यूटोरियल के लिए देखें। बहुत आश्चर्य की बात सामान आगे है।

फिर से, अगर आपने अभी तक मीटिंग प्लानर या सिंपल प्लानर को नहीं देखा है, तो आगे बढ़ें और अपनी पहली मीटिंग शेड्यूल करें:

सम्बंधित लिंक्स

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.