फिर भी जब मैं एक अखंड दृष्टिकोण के लिए उपयोग किया जाता हूं, तो मैं अपने सिर को माइक्रोसॉर्फ़ आर्किटेक्चर के चारों ओर लपेटने की कोशिश कर रहा हूं
मान लीजिए कि हम एक अत्यंत सरलीकृत उबेर बुकिंग प्रणाली बनाने की कोशिश करते हैं । : चीजें आसान बनाने के लिए हम मान लें कि हम 3 सेवाओं और ग्राहक के लिए एक प्रवेश द्वार एपीआई डालते हैं Booking
, Drivers
, Notification
और हम निम्न कार्यप्रवाह है:
नई बुकिंग बनाते समय:
- जांचें कि क्या मौजूदा उपयोगकर्ता के पास पहले से बुकिंग है
- उपलब्ध ड्राइवरों की सूची प्राप्त करें
- बुकिंग लेने के लिए ड्राइवरों को सूचना भेजें
- ड्राइवर ने बुकिंग की
बता दें कि सभी मैसेजिंग चीजों को सरल रखने के लिए काफ्का जैसी मैसेजिंग बस के बजाय एक HTTP कॉल के जरिए की जाती है।
तो इस मामले में, मैंने सोचा कि Booking
सेवा मौजूदा बुकिंग के लिए जाँच कर सकती है। लेकिन फिर उपलब्ध ड्राइवरों और अधिसूचना की सूची किसे प्राप्त होनी चाहिए? मैं इसे गेटवे स्तर पर करने की सोच रहा हूं, लेकिन अब तर्क दो स्थानों में विभाजित है:
Gateway
- उपलब्ध ड्राइवरों की सूची प्राप्त करें + सूचनाएं भेजेंBooking
- मौजूदा बुकिंग के लिए जाँच करें
और मुझे पूरा यकीन है कि यह करने के लिए प्रवेश द्वार सही जगह नहीं है, लेकिन मुझे ऐसा लगता है कि अगर हम इसे Booking
सेवा में कर रहे हैं , तो यह बहुत तंग हो रहा है?
इसे और अधिक जटिल बनाने के लिए, यदि हमारे पास कोई अन्य प्रोजेक्ट है जो बुकिंग सिस्टम का पुन: उपयोग करना चाहता है, लेकिन इसके शीर्ष पर अपने स्वयं के व्यावसायिक तर्क के साथ क्या होता है? इसलिए मैंने इसे गेटवे स्तर पर करने के बारे में सोचा, इसलिए नए प्रोजेक्ट गेटवे का अपना व्यावसायिक तर्क मौजूदा से अलग हो सकता है।
ऐसा करने का एक और तरीका मुझे लगता है कि प्रत्येक परियोजना की अपनी बुकिंग सेवा है जो कोर बुकिंग सेवा से बात करेगी लेकिन मुझे यकीन नहीं है कि यहां सबसे अच्छा तरीका क्या है :-)