CQRS पैटर्न का सावधानी से उपयोग करें और आप स्वच्छ, अधिक स्केलेबल Nest ऐप्स बना सकते हैं।
NestJS के विकास के लिए एक सामान्य दृष्टिकोण उन सेवाओं का निर्माण करना है जो नियंत्रक डेटा तक पहुँचने के लिए संचार करते हैं। लेकिन यह दृष्टिकोण NestJS में एकमात्र मान्य डिज़ाइन पैटर्न नहीं है। अन्य डिज़ाइन पैटर्न भी हैं, जैसे कि CQRS डिज़ाइन पैटर्न।
CQRS एक डिज़ाइन पैटर्न है जो किसी एप्लिकेशन के पढ़ने और लिखने के संचालन को अलग करता है। यह अलगाव स्केलेबिलिटी, प्रदर्शन और रखरखाव में सुधार करने में मदद कर सकता है।
CQRS के बारे में सब कुछ जानें और NestJS API बनाते समय आप इसे कैसे लागू कर सकते हैं।
सीक्यूआरएस क्या है?
सीक्यूआरएस के लिए खड़ा है कमांड-क्वेरी जिम्मेदारी अलगाव. यह के उपयोग को लागू करता है आदेश डेटा बनाने, अपडेट करने और हटाने के लिए और क्वेरियों डेटा लाने के लिए। यह किसी एप्लिकेशन के डेटाबेस कॉल को सेवाओं में लागू करने की आवश्यकता को समाप्त करने में मदद करता है।
यह डेटा के लिए डेटाबेस को क्वेरी करने और किसी एप्लिकेशन में अन्य क्रियाएं करने के तर्क के बीच स्पष्ट अंतर को भी सक्षम बनाता है।
CQRS दृष्टिकोण इसमें उपयोगी है
डोमेन संचालित डिजाइन, जो आपको अपने एप्लिकेशन में डोमेन लॉजिक और इंफ्रास्ट्रक्चरल ऑपरेशंस को अलग करने की अनुमति देता है। आप इसका उपयोग जटिल व्यावसायिक तर्क को लागू करने के लिए भी कर सकते हैं, लेकिन सरल अनुप्रयोगों के लिए इसकी अनुशंसा नहीं की जाती है।NestJS API में CQRS का उपयोग करना
आप NestJS में बनाए गए API में CQRS डिज़ाइन पैटर्न का उपयोग कर सकते हैं। साथ चलने के लिए, आपके पास होना चाहिए Node.js आपके कंप्यूटर पर स्थापित है और NestJS का नवीनतम संस्करण।
CQRS डिज़ाइन पैटर्न को लागू करने वाला एक साधारण ब्लॉगिंग एप्लिकेशन बनाने के लिए निम्न चरणों का उपयोग करें।
नेस्ट प्रोजेक्ट बनाएं
एक नया नेस्ट प्रोजेक्ट बनाएं और एक जनरेट करें डाक ब्लॉग एप्लिकेशन के लिए संसाधन। आप टर्मिनल में निम्न आदेश चलाकर ऐसा कर सकते हैं:
घोंसला नया Nestjs-cqrs
नेस्ट जी मॉड्यूल पोस्ट
घोंसला जी नियंत्रक पोस्ट
नेस्ट जी सर्विस पोस्ट
निर्भरताएँ स्थापित करें
उपरोक्त चरणों को पूरा करने के बाद, NestJS CQRS पैकेज को स्थापित करने के लिए इस टर्मिनल कमांड को चलाएँ:
एनपीएम इंस्टॉल --सेव @nestjs/cqrs
एक पोस्ट सेवा बनाएँ
निम्नलिखित कोड को अपने में जोड़ें पोस्ट.सर्विस.टीएस फ़ाइल को परिभाषित करने के लिए सेवा उपरांत कक्षा।
// पोस्ट.सर्विस.टीएस
आयात {इंजेक्शन योग्य} से'@nestjs/common';निर्यातइंटरफेस डाक {
शीर्षक: डोरी;
संतुष्ट: डोरी;
}@ इंजेक्टेबल()
निर्यातकक्षा सेवा उपरांत {
निजी केवल पढ़ने योग्य पोस्ट: पोस्ट [] = [];बनाएँ (पोस्ट: पोस्ट): पोस्ट {
यह.posts.push (पोस्ट);
वापस करना डाक;
}
FindById (आईडी: संख्या): डाक {
वापस करनायह.पोस्ट.खोजें(डाक => पोस्ट.आईडी आईडी);
}
}
सेवा उपरांत को परिभाषित करता है बनाएं और FindById एक नई पोस्ट बनाने और उसकी आईडी से एक मौजूदा पोस्ट प्राप्त करने के तरीके।
कमांड और क्वेरी को परिभाषित करें
अगला कदम उन प्रश्नों और आदेशों को परिभाषित करना है जो CQRS डिज़ाइन पैटर्न के मूल हैं।
में पदों निर्देशिका, दो नई फ़ाइलें बनाएँ: createPostCommand.command.ts और getPostQuery.query.ts. कमांड फ़ाइल इस तरह दिखनी चाहिए:
// createPostCommand.command.ts
निर्यातकक्षा क्रिएटपोस्टकमांड {
निर्माता(जनता केवल पढ़ने योग्य शीर्षक: डोरी, जनता केवल पढ़ने योग्य सामग्री: डोरी) {}
}
और क्वेरी परिभाषा फ़ाइल, इस तरह:
// getPostQuery.query.ts
निर्यातकक्षा गेटपोस्टक्वेरी {
निर्माता(जनता केवल पढ़ने योग्य आईडी: संख्या) {}
}
कमांड और क्वेरी हैंडलर बनाएं
आपके द्वारा अपने आदेशों और प्रश्नों को सफलतापूर्वक परिभाषित करने के बाद, आपको उनके लिए हैंडलर बनाने की आवश्यकता है। एक हैंडलर एक ऐसा कार्य है जो कमांड या क्वेरी चलाता है और परिणाम देता है।
एक बनाने के हैंडलर.टी अपने में फाइल करें डाक निर्देशिका और उसमें निम्न कोड पेस्ट करें:
// हैंडलर.टी
आयात {कमांडहैंडलर, आईसीओमैंडहैंडलर} से'@nestjs/cqrs';
आयात {CreatePostCommand} से'./createPostCommand.command.ts';
आयात { सेवा उपरांत } से'।/सेवा उपरांत';@कमांडहैंडलर(क्रिएटपोस्टकमांड)
निर्यातकक्षा क्रिएटपोस्टहैंडलर औजार ICommandHandler{
निर्माता(निजी केवल पढ़ने के लिए पोस्ट सेवा: पोस्ट सेवा) {}
async निष्पादित करें (कमांड: CreatePostCommand) {
कॉन्स्ट {नाम, मूल्य} = आदेश;
कॉन्स्ट पोस्ट = इंतजारयह.postService.create (शीर्षक, सामग्री);
वापस करना डाक;
}
}
ठीक उसी प्रकार हैंडलर.टी फ़ाइल, आप प्रश्नों के साथ काम करने की अनुमति देने के लिए नीचे दिए गए आयात विवरणों को शामिल करने के लिए संशोधित कर सकते हैं। फिर आप नीचे दिए गए कोड में देखे गए क्वेरी हैंडलर को कार्यान्वित कर सकते हैं:
// हैंडलर.टी
आयात {क्वेरीहैंडलर, आईक्वेरीहैंडलर} से'@nestjs/cqrs';
आयात {GetPostQuery} से'./getPostQuery.query';
आयात { सेवा उपरांत } से'।/सेवा उपरांत';// क्वेरी हैंडलर
@क्वेरीहैंडलर(GetProductQuery)
निर्यातकक्षा GetPostHandler औजार IQueryHandler{
निर्माता(निजी केवल पढ़ने के लिए पोस्ट सेवा: पोस्ट सेवा) {}
async निष्पादित (क्वेरी: GetPostQuery) {
कॉन्स्ट {आईडी} = क्वेरी;
कॉन्स्ट पोस्ट = इंतजारयह.postService.findOneById (आईडी);
वापस करना डाक;
}
}
हैंडलर रजिस्टर करें
अंतिम चरण कमांड और क्वेरी हैंडलर को NestJS मॉड्यूल के साथ पंजीकृत करना है।
// पोस्ट.मॉड्यूल.टीएस
आयात { मापांक } से'@nestjs/common';
आयात {कमांडहैंडलर, क्वेरीहैंडलर} से'हैंडलर.टीएस';
आयात { सेवा उपरांत } से'।/सेवा उपरांत';
@मापांक({
प्रदाता: [
सेवा उपरांत,
...कमांड हैंडलर्स,
...क्वेरीहैंडलर,
],
})
निर्यातकक्षा पोस्टमॉड्यूल {}
यह कोड पंजीकृत करता है सेवा उपरांत, कमांडहैंडलर्स, और क्वेरीहैंडलर में प्रदाता सरणी। स्प्रेड ऑपरेटर का उपयोग (...) की सरणियों को मर्ज करना है जिज्ञासा हैंडलर और आज्ञा हैंडलर में प्रदाता सरणी।
आदेशों और प्रश्नों को निष्पादित करें
पंजीकृत आदेश और क्वेरी हैंडलर नियंत्रकों में प्रयोग करने योग्य हैं। निम्नलिखित कोड एक का कार्यान्वयन है पदों नियंत्रक जो HTTP अनुरोधों को स्वीकार करेगा और आवश्यक प्रतिक्रियाएँ लौटाएगा।
// पोस्ट.कंट्रोलर.टीएस
आयात {बॉडी, कंट्रोलर, पोस्ट} से'@nestjs/common';
आयात {कमांडबस} से'@nestjs/cqrs';
आयात {CreatePostCommand} से'./createPostCommand.command.ts';// नियंत्रक जो कमांड को लागू करता है
@नियंत्रक('पद')
निर्यातकक्षा पोस्टकंट्रोलर {
निर्माता(निजी केवल पढ़ने के लिए कमांडबस: कमांडबस) {}
@डाक()
async क्रिएटपोस्ट(@शरीर() शरीर: { शीर्षक: डोरी; संतुष्ट: डोरी }) {
कॉन्स्ट {शीर्षक, सामग्री} = शरीर;
कॉन्स्ट कमांड = नया CreatePostCommand (शीर्षक, सामग्री);
कॉन्स्ट पोस्ट = इंतजारयह.commandBus.execute (कमांड);
वापस करना डाक;
}
}
उपरोक्त कोड में, कमांडबस क्रियान्वित करता है क्रिएटपोस्टकमांड और एक नया पद बनाता है।
यह कोड दिखाता है कि क्वेरी का उपयोग करने वाले नियंत्रक को कैसे कार्यान्वित किया जाए:
// पोस्ट.कंट्रोलर.टीएस
आयात {नियंत्रक, गेट, परम} से'@nestjs/common';
आयात {क्वेरीबस} से'@nestjs/cqrs';
आयात {GetPostQuery} से'./getPostQuery.query';@नियंत्रक('पद')
निर्यातकक्षा पोस्टकंट्रोलर {
निर्माता(निजी केवल पढ़ने के लिए क्वेरीबस: क्वेरीबस) {}
@पाना(':पहचान')
async गेटपोस्ट(@परम('पहचान') पहचान: संख्या) {
कॉन्स्ट पूछताछ = नया GetPostQuery (आईडी);
कॉन्स्ट पोस्ट = इंतजारयह.queryBus.execute (क्वेरी);
वापस करना डाक;
}
}
queryBus कार्यान्वित GetPostQuery जो दिए गए आईडी के साथ पोस्ट प्राप्त करता है और उसे वापस कर देता है।
उपरोक्त सभी चरणों को पूरा करने के बाद, अब आपके पास ब्लॉग पोस्ट बनाने और प्राप्त करने के लिए एक न्यूनतम, कार्यशील एप्लिकेशन होना चाहिए।
हालाँकि यहाँ कोड स्मृति में बनाए गए पदों को संग्रहीत करने के लिए एक सरणी का उपयोग करता है, आप उत्पादन में एक डेटाबेस का उपयोग करने की अधिक संभावना रखते हैं। आप या तो ए का उपयोग कर सकते हैं एसक्यूएल डेटाबेस, या ए NoSQL डेटाबेस जैसे MongoDB, क्योंकि NestJS दोनों विकल्पों का समर्थन करता है।
CQRS डिजाइन पैटर्न के साथ एपीआई बनाना
अपने NestJS एप्लिकेशन में CQRS डिज़ाइन पैटर्न को शामिल करने से स्केलेबिलिटी, प्रदर्शन और रखरखाव में सहायता मिल सकती है। CQRS एक एप्लिकेशन द्वारा किए जाने वाले पढ़ने और लिखने के संचालन को अलग करके अधिक कुशल और अनुकूलित संचालन की अनुमति देता है।
@nestjs/cqrs पैकेज कमांड और क्वेरी हैंडलर के साथ NestJS में CQRS को लागू करने के लिए बिल्डिंग ब्लॉक प्रदान करता है। कुल मिलाकर, CQRS एक शक्तिशाली पैटर्न है जो अधिक कुशल और स्केलेबल एप्लिकेशन बनाने में मदद कर सकता है, और इसका उपयोग करने से पहले आपको अपने विकल्पों का वजन करना चाहिए।