एक रिलेशनल डेटाबेस संचालित एप्लिकेशन में बेहतर ओओ कोड कैसे बनाएं जहां डेटाबेस खराब तरीके से डिज़ाइन किया गया है


19

मैं एक जावा वेब एप्लिकेशन लिख रहा हूं जिसमें मुख्य रूप से समान पेजों का एक गुच्छा है जिसमें हर पेज में कई टेबल और एक फिल्टर है जो उन टेबल पर लागू होता है। इन तालिकाओं पर डेटा SQL डेटाबेस से आता है।

मैं MyBatis का उपयोग ORM के रूप में कर रहा हूं, जो मेरे मामले में सबसे अच्छा विकल्प नहीं हो सकता है, क्योंकि डेटाबेस खराब तरीके से डिज़ाइन किया गया है और mybatis एक अधिक डेटाबेस उन्मुख उपकरण है।

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

A डेटा प्राप्त करें (p1, ..., pi);

बी डेटा प्राप्त करें (पी 1, ..., पी);

सी डेटा प्राप्त करें (पी 1, ..., पी);

डी डेटा प्राप्त करें (पी 1, ..., पी); ...

और यह जल्द ही फट जाता है जब हमारे पास अलग-अलग कॉलम के साथ अलग-अलग टेबल होते हैं।

यह इस तथ्य को भी जोड़ता है कि मैं "विकेट" का उपयोग कर रहा हूं, जो कि पृष्ठ में HTML तत्वों के लिए वस्तुओं के मानचित्रण के प्रभाव में है। तो मेरा जावा कोड डेटाबेस और सामने के छोर के बीच एक एडॉप्टर बन जाता है, जिससे मुझे कुछ तारों के साथ बहुत सारे वायरिंग, बॉयलरप्लेट कोड का निर्माण होता है।

क्या सही समाधान ओआरएम मैपर्स को एक्सट्रैलेयर के साथ लपेटता है जो डीबी के लिए अधिक सजातीय इंटरफ़ेस प्रस्तुत करता है या क्या इस स्पेगेटी कोड के साथ काम करने का एक बेहतर तरीका है जो मैं लिख रहा हूं?

EDIT: डेटाबेस के बारे में अधिक जानकारी

डेटाबेस में मुख्य रूप से फोन कॉल की जानकारी होती है। खराब डिज़ाइन में निम्न शामिल हैं:

प्राथमिक कुंजी के रूप में एक कृत्रिम आईडी के साथ तालिकाओं का डोमेन ज्ञान के साथ कोई लेना-देना नहीं है।

कोई भी अनूठा, ट्रिगर, चेक या विदेशी कुंजी जो भी हो।

एक सामान्य नाम के साथ फ़ील्ड्स जो विभिन्न रिकॉर्ड्स के लिए विभिन्न अवधारणाओं से मेल खाते हैं।

विभिन्न शर्तों के साथ अन्य तालिकाओं के साथ पार करके केवल रिकॉर्ड किए जा सकते हैं।

स्तंभ जो संख्याओं या तारीखों को तार के रूप में संग्रहीत किया जाना चाहिए।

इसे योग करने के लिए, एक गन्दा / आलसी डिज़ाइन चारों ओर।


7
क्या डेटाबेस डिज़ाइन को सही करना एक विकल्प है?
RMalke

1
कृपया बताएं कि डेटाबेस को खराब तरीके से कैसे बनाया गया है।
ट्यूलेंस कोर्डोवा

@ रेनन मलके स्टिग्लिआनी दुर्भाग्य से नहीं, क्योंकि विरासत सॉफ्टवेयर है जो इस पर निर्भर करता है, हालांकि मैंने कुछ तालिकाओं को थोड़ा अलग डिजाइन के साथ प्रतिबिंबित किया है और उन्हें पॉप्युलेट करता है, जो कोड को सरल करता है। हालाँकि मुझे इस पर गर्व नहीं है और मैं
DPM

1
यह पुस्तक आपको सोम के बारे में बता सकती है कि आप डेटबेस प्रोब्लम को ठीक करने के लिए कैसे शुरू कर सकते हैं और विरासत कोड को काम कर सकते हैं: amazon.com/…
HLGEM

4
अधिकांश समस्याएं आप सूचीबद्ध करते हैं। । । नहीं हैं। प्राकृतिक कुंजियों के बजाय सरोगेट कुंजी का उपयोग वास्तव में आजकल एक मानक मानक सिफारिश है; "खराब डिजाइन" बिल्कुल नहीं। बाधाओं की कमी और अनुचित कॉलम-प्रकार का उपयोग एक बेहतर उदाहरण है जहां तक ​​"खराब डिजाइन" चला जाता है, लेकिन यह वास्तव में आपके आवेदन कोड को बिल्कुल प्रभावित नहीं करना चाहिए (जब तक आप इन समस्याओं का दुरुपयोग करने की योजना नहीं बनाते हैं?)।
ruakh

जवाबों:


53

ऑब्जेक्ट ओरिएंटेशन विशेष रूप से मूल्यवान है क्योंकि इस प्रकार के परिदृश्य उत्पन्न होते हैं, और यह आपको उपकरण को यथोचित डिज़ाइन करने के लिए उपकरण देता है जो आपको जटिलता को घेरने की अनुमति देता है।

यहाँ असली सवाल यह है कि आप उस जटिलता को कहाँ तक सीमित करते हैं?

इसलिए मुझे एक पल के लिए पीछे हटने दें और बोलें कि मैं यहां किस जटिलता का उल्लेख कर रहा हूं। आपकी समस्या (जैसा कि मैं इसे समझता हूं; अगर मैं गलत हूं तो मुझे सुधारें) एक दृढ़ता मॉडल है जो उन कार्यों के लिए एक प्रभावी रूप से उपयोग करने योग्य मॉडल नहीं है जिन्हें आपको डेटा के साथ पूरा करने की आवश्यकता है। यह अन्य कार्यों के लिए प्रभावी और उपयोगी हो सकता है, लेकिन आपके कार्यों के लिए नहीं ।

तो हम क्या करते हैं जब हमारे पास डेटा होता है जो हमारे साधनों के लिए एक अच्छा मॉडल पेश नहीं करता है?

अनुवाद करना। यह केवल एक चीज है जो आप कर सकते हैं। वह अनुवाद 'जटिलता' है जिसका मैं ऊपर उल्लेख करता हूं। इसलिए अब जब हम स्वीकार करते हैं कि हम मॉडल का अनुवाद करने जा रहे हैं, तो हमें कुछ कारकों पर निर्णय लेने की आवश्यकता है।

क्या हमें दोनों दिशाओं का अनुवाद करने की आवश्यकता है? क्या दोनों दिशाओं का अनुवाद उसी तरह किया जाएगा, जैसे कि:

(Tbl A, Tbl B) -> ओबज एक्स (पढ़ें)

ओब्ज एक्स -> (टैबल ए, टैबल बी) (लिखें)

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


आप कहाँ अनुवाद करते हैं?

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

अब फिर से; आपकी समस्या यह है: आप इस जटिलता को कहाँ रखते हैं? वैसे आपके पास विकल्प हैं।

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

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

डेटाबेस से आगे बढ़ते हुए आपके पास रिपॉजिटरी पैटर्न का उपयोग करने का पुराना स्टैंडबाय है। यह एक समय-परीक्षण दृष्टिकोण है जो बहुत प्रभावी हो सकता है। कमियां बॉयलर प्लेट को शामिल करने के लिए होती हैं लेकिन अच्छी तरह से फैली हुई रिपॉजिटरी इसमें से कुछ राशि से बच सकती हैं, और यहां तक ​​कि जब ये बॉयलर प्लेट की दुर्भाग्यपूर्ण मात्रा में परिणाम करते हैं, तो रिपॉजिटरी की सरल कोड होने की प्रवृत्ति है जो एक अच्छा एपीआई पेश करने के साथ-साथ समझने और बनाए रखने में आसान है। / अमूर्त। इसके अलावा रिपॉजिटरी उनकी यूनिट-टेस्टिबिलिटी के लिए अच्छी हो सकती है, जिसे आप इन-डेटाबेस विकल्पों के साथ खो देते हैं।

ऑटो-मैपर जैसे उपकरण हैं जो ORM का उपयोग कर सकते हैं, जहाँ वे डेटाबेस-मॉडल के बीच का अनुवाद orm से प्रयोग करने योग्य मॉडल में कर सकते हैं, लेकिन इनमें से कुछ उपकरण जादू की तरह अधिक व्यवहार को बनाए रखने / समझने के लिए मुश्किल हो सकते हैं; हालांकि वे ओवरहेड कोड का एक न्यूनतम बनाते हैं जिसके परिणामस्वरूप कम रखरखाव ओवरहेड जब अच्छी तरह से समझा जाता है।

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


अब बात शुरू करते हैं पागल की

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

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

एक और एनकैप्सुलेशन सीमा प्रक्रिया सीमाएं हैं। ये बहुत प्रभावी ढंग से जटिलता को अलग करने के लिए इस्तेमाल किया जा सकता है। आप अनुवाद कोड को एक वेब सेवा के रूप में बना सकते हैं, जहां संचार सरल HTTP है, SOAP, REST का उपयोग करके, या यदि आप वास्तव में अपना स्वयं का प्रोटोकॉल चाहते हैं (सुझाव नहीं दिया गया है)। STOMP पूरी तरह से एक बुरा नया प्रोटोकॉल नहीं है। या आपके द्वारा चुने गए जो भी प्रोटोकॉल का उपयोग करते हुए बहुत जल्दी फिर से संचार करने के लिए एक सिस्टम-स्थानीय प्रचारित मेमोरी पाइप के साथ एक सामान्य डेमन सेवा का उपयोग करें। यह वास्तव में कुछ बहुत अच्छे लाभ हैं:

  • आपके पास कई प्रक्रियाएं चल सकती हैं जो पुराने और नए संस्करण के लिए एक ही समय में अनुवाद का समर्थन करती हैं और आपको ऑब्जेक्ट मॉडल V2 को प्रचारित करने के लिए अनुवाद सेवा को अपडेट करने की अनुमति देती हैं, और फिर बाद में अलग से नई वस्तु के साथ काम करने के लिए उपभोग कोड को अपडेट करते हैं। नमूना।
  • आप प्रदर्शन के लिए प्रक्रिया को एक कोर में पिन करने जैसी दिलचस्प चीजें कर सकते हैं, आपको इस दृष्टिकोण में सुरक्षा सुरक्षा की एक मात्रा भी मिलती है जिससे यह सुनिश्चित होता है कि उस डेटा को छूने के लिए सुरक्षा विशेषाधिकारों के साथ चलने वाली एकमात्र प्रक्रिया है।
  • जब आप प्रक्रिया सीमाओं के बारे में बात कर रहे हैं तो आपको एक बहुत मजबूत सीमा मिल जाएगी, जो लंबे समय तक आपके अमूर्त के न्यूनतम रिसाव को सुनिश्चित करने के लिए स्थिर रहेगी क्योंकि अनुवाद स्थान में कोड लिखना अनुवाद स्थान के बाहर नहीं बुलाया जा सकेगा क्योंकि वे अनुबंध द्वारा उपयोग परिदृश्यों के एक निश्चित सेट को सुनिश्चित करते हुए, प्रक्रिया की गुंजाइश साझा नहीं की जाएगी।
  • अतुल्यकालिक / गैर-अवरुद्ध अपडेट के लिए योग्यता सरल हो रही है।

कमियां स्पष्ट रूप से अधिक रखरखाव की तुलना में आवश्यक हैं, संचार ओवरहेड प्रदर्शन और रखरखाव को प्रभावित करता है।


जटिलता को घेरने के कई तरीके हैं जो आपके सिस्टम में उस जटिलता को कभी भी अधिक अजीब और उत्सुक स्थानों में रखने की अनुमति दे सकते हैं। उच्च आदेश कार्यों के रूपों का उपयोग करना (अक्सर रणनीति पैटर्न या ऑब्जेक्ट पैटर्न के विभिन्न अन्य विषम रूपों का उपयोग करके नकली), आप कुछ बहुत ही दिलचस्प चीजें कर सकते हैं।

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

यह एक सीमा बनाता है जहां सभी अनुवाद न केवल आपके सभी कोड से दूर सीमा के दूसरी तरफ मौजूद हैं ; इसका उपयोग केवल उस पक्ष के लिए किया जाता है, जिससे आपके बाकी कोड को इसके बारे में कुछ भी पता नहीं चल सके कि उस सीमा के लिए प्रवेश बिंदु कहां है।

ठीक है, हाँ जो वास्तव में पागल बात कर रहा है, लेकिन कौन जानता है; आप बस पागल हो सकते हैं (गंभीरता से, 88% से कम पागलपन की रेटिंग के साथ भिक्षुओं का कार्य न करें, शारीरिक चोट का वास्तविक जोखिम है)।


4
वाह, क्या एक असाधारण व्यापक जवाब। मैं इसे एक से अधिक बार बढ़ाता हूं यदि केवल एसई मुझे जाने देगा।
मार्जन वेनेमा जूल

11
फिल्म संस्करण कब सामने आ रहा है?
यानिस

3
@ जिमीहॉफ ब्रावो सर !!! मैं इस उत्तर को बुकमार्क करने जा रहा हूं और अपनी बेटी को तब दिखाता हूं जब वह बड़ी हो जाती है।
टॉम्बट्रॉन

4

मेरा सुझाव:

डेटाबेस दृश्य बनाएं:

  1. स्तंभों को सार्थक नाम दें
  2. "विभिन्न परिस्थितियों के साथ अन्य तालिकाओं के साथ पार करना" करें ताकि आप उस जटिलता को दूर छिपा सकें।
  3. क्रमशः संख्या और दिनांक के रूप में संग्रहीत संख्या या दिनांक को कनवर्ट करें।
  4. कुछ मानदंडों के अनुसार, जहां कोई भी नहीं है वहां विशिष्टता बनाएं।

यह विचार एक बहाना बना है जो बुरे के ऊपर एक बेहतर डिजाइन का अनुकरण करता है।

फिर ओआरएम को वास्तविक तालिकाओं के बजाय उस अग्रभाग से संबंधित करें।

हालांकि यह सम्मिलन को सरल नहीं करता है।


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

3

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

  • सॉलिड सिद्धांतों को याद रखें ।
  • ऐसा कोड लिखें जो आसानी से यूनिट-टेस्ट किया जा सके (जो अक्सर SOLID सिद्धांतों का पालन करके आता है)।
  • अपने व्यापार तर्क को अपने प्रदर्शन तर्क से अलग रखें।
  • अपाचे विकेट दस्तावेज़ीकरण और उदाहरण पढ़ें - यह रूपरेखा शायद आपके विचार से अधिक बॉयलरप्लेट कोड को बचा सकती है, इसलिए इसे प्रभावी ढंग से उपयोग करना सीखें।
  • डेटाबेस से निपटने के लिए तर्क को अलग परत में रखें जो एक स्वच्छ इंटरफ़ेस प्रदान करता है जो आपके व्यवसाय तर्क के साथ काम कर सकता है। इस तरह, यदि आपको (या भविष्य के अनुचर) कभी भी स्कीमा में सुधार करने का मौका मिलता है, तो वे व्यावसायिक तर्क में बहुत अधिक बदलाव किए बिना ऐसा कर सकते हैं।

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

अपूर्ण रचनात्मकता के बावजूद, स्वच्छ, पुन: प्रयोज्य, आसानी से बनाए रखने योग्य कोड लिखने के लिए अपनी रचनात्मकता का उपयोग करने के अवसर के रूप में सोचें।


1

बेहतर ऑब्जेक्ट-ओरिएंटेड कोड के बारे में आपके प्रारंभिक प्रश्न का उत्तर देते हुए, मैं SQL-स्पीकिंग ऑब्जेक्ट्स का उपयोग करने का सुझाव दूंगा । ORM आंतरिक रूप से ऑब्जेक्ट-ओरिएंटेड सिद्धांतों के खिलाफ जाता है, क्योंकि यह ऑब्जेक्ट पर संचालित होता है, और OOP में ऑब्जेक्ट एक आत्मनिर्भर इकाई है, जिसके पास अपने लक्ष्य को पूरा करने के लिए सभी संसाधन हैं। मुझे यकीन है कि यह दृष्टिकोण आपके कोड को सरल बना सकता है।

समस्या क्षेत्र, यानी आपके डोमेन के बारे में बात करते हुए, मैं समग्र जड़ों की पहचान करने की कोशिश करूँगा । ये आपके डोमेन की संगतता सीमाएँ हैं। सीमाएँ जो हर समय अपनी निरंतरता को बनाए रखती हैं। डोमेन घटनाओं के माध्यम से संचार एकत्र करता है। यदि आपके पास एक प्रणाली काफी बड़ी है, तो शायद आपको इसे सबसिस्टम पर विभाजित करना शुरू कर देना चाहिए (इसे SOA, माइक्रोसर्विस, सेल्फ-सिस्टम, आदि कहते हैं)

मैं CQRS का उपयोग करने पर भी विचार करूंगा - यह आपके लिखने और पढ़ने के पक्ष को बहुत सरल कर सकता है। इस विषय में उदी दहन के लेख को पढ़ना सुनिश्चित करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.