आज का अधिकांश काम कल के काम की निरंतरता है, बस मेरे आवेदन के मार्गों पर व्यावसायिक तर्क लागू करना है। इसलिए, मैंने सोचा कि मैं इसके बारे में लिखने से थोड़ा ब्रेक लेकर उन तीन कार्यों के बारे में बात करूंगा जो मैंने अपने एप्लिकेशन में बहुत विशिष्ट चीजें करने के लिए बनाए हैं।
यह वह निर्देशिका है जहां आप अपने सभी छोटे कार्यों को डालते हैं जिनके लिए घर ढूंढना कठिन होता है, लेकिन आपका एप्लिकेशन उनके बिना नहीं रह सकता।
एक यूटिल्स फ़ोल्डर कई अनुप्रयोगों के अज्ञात नायकों के लिए डंपिंग ग्राउंड है।
जब आपको अपने डेटा का रूपांतरण करना होता है जिसमें कोड की कुछ पंक्तियों से अधिक समय लगेगा, जिसका आपको पुन: उपयोग करना होगा, तो इसे अपनी फ़ाइल में डालना एक अच्छा विचार है जिसे आप निर्यात कर सकते हैं आपका शेष आवेदन।
हम सिर्फ कॉपी पेस्ट क्यों नहीं करते? खैर, यह दो प्रोग्रामिंग सिद्धांतों, DRY और चिंताओं को अलग करने का उल्लंघन होगा।
न केवल अपने आप को दोहराना नीरस है, बल्कि यदि आपने इसे अपने पूरे आवेदन में पर्याप्त रूप से किया है तो इसे बदलना भी मुश्किल है। एक एल्गोरिदम की कल्पना करें जो आज बारिश की प्रतिशत संभावना की गणना करता है।
मुझे नहीं पता कि लोग ऐसा कैसे करते हैं, इसलिए मैं आपको कोई उदाहरण नहीं दिखा सकता। लेकिन, यदि आप इसे अपने पूरे कोड में विभिन्न स्थानों पर कॉपी करते हैं, जहां इस गणना तक पहुंच की आवश्यकता है, तो जब वेरी स्मार्ट साइंटिफिक वेदर कमेटी एक नए, अधिक सटीक एल्गोरिदम के साथ वापस आएगी तो आप बहुत परेशान हो जाएंगे। &&&]
अपने कोड के पुन: उपयोग किए गए हिस्सों को लें, और उन्हें एक ही स्थान पर अपडेट किए जाने के साथ-साथ कई स्थानों पर उपयोग करने के लिए पैकेज करने के तरीके ढूंढें।मेरे यूटिल्स फ़ोल्डर के सभी फ़ंक्शन मेरे पूरे एप्लिकेशन में कई स्थानों पर उपयोग किए जाते हैं!
चिंताओ का विभाजन
इसका यूटिल्स फ़ोल्डर से क्या लेना-देना है? खैर, मैं जिन फ़ंक्शंस पर चर्चा करने जा रहा हूं, उनका वास्तव में getRoastsById जैसे फ़ंक्शंस में कोई स्थान नहीं है क्योंकि वे ऐसा नहीं करते हैं! जब हमें कुछ और करने की जरूरत हो तो हमें उसके लिए एक फंक्शन बनाना चाहिए। लेकिन, जब हमारे पास उस फ़ंक्शन के लिए कोई तार्किक स्थान नहीं होता है, क्योंकि यह एक "सहायक" है, तो हम इसे अपनी यूटिल्स निर्देशिका में चिपका देते हैं!
मेरा यूटिल्स फ़ोल्डर
सम्मिलित कथन
समस्या: मेरे एप्लिकेशन की कई अलग-अलग सेवाओं में, मुझे अपने डेटाबेस में एक INSERT क्वेरी निष्पादित करने की आवश्यकता होगी। इन कथनों के लिए आपको 1) कॉलम के नाम और 2) मानों को स्पष्ट रूप से सूचीबद्ध करना होगा। मुझे इन्हें प्रत्येक रूट में टाइप नहीं करना चाहिए, इसलिए मैंने इसे मेरे लिए करने के लिए एक फ़ंक्शन बनाया।
इनपुट: फ़ंक्शन दो पैरामीटर लेता है, टेबल एक स्ट्रिंग जो डेटाबेस में एक टेबल के नाम से मेल खाता है और ओबीजे, एक जावास्क्रिप्ट ऑब्जेक्ट जो उस मॉडल का प्रतिनिधित्व करता है जिसे उपयोगकर्ता डेटाबेस में जोड़ना चाहता है।
आउटपुट: एक ऑब्जेक्ट जिसमें 1) प्लेसहोल्डर मानों के साथ एक संपत्ति स्वरूपित INSERT स्ट्रिंग है और 2) पैरामीटरयुक्त क्वेरी में उपयोग किए जाने वाले मानों की एक सरणी है।
const { snakeCase } = require('change-case-commonjs'); function insertStatement(table, obj) { const keys = Object.keys(obj); const values = Object.values(obj); let statement = `INSERT INTO ${table} (`; // Add snake_case keys to the statement const keyString = keys.map((key, i) => snakeCase(key)).join(', '); statement = `${keyString}) VALUES (`; // Add placeholders for the values const placeholders = keys.map((_, i) => `$${i 1}`).join(', '); statement = `${placeholders}) RETURNING *;`; // Return the query string and the values array return { text: statement, values: values }; } module.exports = insertStatement;अद्यतन वक्तव्य
समस्या: INSERT कथन के समान, अद्यतन कथन के लिए आपको अपनी क्वेरी में कॉलम नाम और मान दोनों को स्पष्ट रूप से बताना होगा। यह सिंटैक्स INSERT स्टेटमेंट से अलग है। सशर्त तर्क के माध्यम से, मैं एक डेटाबेसक्वेरीजेनरेटर फ़ंक्शन बना सकता हूं, लेकिन यह चिंताओं के पृथक्करण का भी उल्लंघन करता प्रतीत होता है। क्या इस तरह का कोई फ़ंक्शन यह तय करेगा कि आप किस प्रकार की क्वेरी चाहते हैं, या उसके आधार पर सिंटैक्स तैयार करेगा?
इनपुट: फ़ंक्शन तीन पैरामीटर लेता है। ओबीजे, एक जावास्क्रिप्ट ऑब्जेक्ट जो अद्यतन रिकॉर्ड का प्रतिनिधित्व करता है। तालिका, एक स्ट्रिंग जो डेटाबेस में एक तालिका से मेल खाना चाहिए। आईडी, एक पूर्णांक जो नई जानकारी के साथ अद्यतन किए जाने वाले रिकॉर्ड से मेल खाता है।
आउटपुट: एक ऑब्जेक्ट जिसमें 1) प्लेसहोल्डर मानों के साथ एक संपत्ति स्वरूपित अद्यतन स्ट्रिंग है और 2) पैरामीटरयुक्त क्वेरी में उपयोग किए जाने वाले मानों की एक सरणी है।
const { snakeCase } = require('change-case-commonjs'); function insertStatement(table, obj) { const keys = Object.keys(obj); const values = Object.values(obj); let statement = `INSERT INTO ${table} (`; // Add snake_case keys to the statement const keyString = keys.map((key, i) => snakeCase(key)).join(', '); statement = `${keyString}) VALUES (`; // Add placeholders for the values const placeholders = keys.map((_, i) => `$${i 1}`).join(', '); statement = `${placeholders}) RETURNING *;`; // Return the query string and the values array return { text: statement, values: values }; } module.exports = insertStatement;objectKeysToCamel
समस्या: मेरे डेटाबेस की शैली मेरी जावास्क्रिप्ट की शैली से भिन्न है। हालाँकि, मैं किसी भी क्षेत्र में समझौता करने को तैयार नहीं हूँ। मेरी जेएस फाइलों में, मेरा नामकरण सम्मेलन कैमलकेस का उपयोग करता है, जहां मेरे डेटाबेस में यह स्नेक_केस का उपयोग करता है। लौटाई गई वस्तुओं के सभी संपत्ति नाम समान हैं, लेकिन अलग-अलग स्वरूपित हैं। इस केस को मानक बनाए रखने के लिए, मुझे अपने JS में snap_case का उपयोग करके संपत्तियों तक पहुंच प्राप्त करनी होगी, लेकिन मुझे यह पसंद नहीं है।
इनपुट: फ़ंक्शन केवल एक पैरामीटर लेता है, एक ओबीजे जावास्क्रिप्ट ऑब्जेक्ट जिसकी कुंजियाँ कैमलकेस फ़ॉर्मेटिंग में परिवर्तित होनी चाहिए।
आउटपुट: वही ऑब्जेक्ट, कैमलकेस स्वरूपित कुंजियों के साथ।
const { camelCase } = require('change-case-commonjs'); function objectKeysToCamel(obj) { // Extract the keys and values const keys = Object.keys(obj); const values = Object.values(obj); let camel = {} // Change the formatting of each key, assigning it the proper value keys.forEach((key, i) => { const camelKey = camelCase(key); camel[camelKey] = values[i] }) // Return the new object return camel; } module.exports = objectKeysToCamel;
https://github.com/nmiller15/roast
फ्रंटएंड एप्लिकेशन वर्तमान में Netlify पर तैनात है! यदि आप कुछ सुविधाओं के साथ खिलवाड़ करना चाहते हैं और इसे क्रियान्वित होते देखना चाहते हैं, तो इसे नीचे मोबाइल डिवाइस पर देखें।
https://knowyourhomeroast.netlify.app
ध्यान दें: इस परिनियोजन में कोई बैकएंड एपीआई नहीं है, इसलिए खाते और रोस्ट वास्तव में सत्रों के बीच कहीं भी सहेजे नहीं जाते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3