मान लीजिए कि जब भी मैं CRUD ऑपरेशन करता हूं या किसी विशिष्ट तरीके से किसी रिश्ते को संशोधित करता हूं तो मैं भी कुछ और करना चाहता हूं। उदाहरण के लिए, जब भी कोई पोस्ट प्रकाशित करता है, मैं भी एनालिटिक्स के लिए एक टेबल पर कुछ सहेजना चाहता हूं। शायद सबसे अच्छा उदाहरण नहीं है, लेकिन सामान्य रूप से इस "समूहीकृत" कार्यक्षमता का एक बहुत कुछ है।
आम तौर पर मैं इस प्रकार के तर्क को नियंत्रकों में देखता हूं। यह सब ठीक है जब तक आप बहुत सारी जगहों पर इस कार्यक्षमता को पुन: उत्पन्न नहीं करना चाहते। जब आप पार्टिकल्स में आने लगते हैं, तो एपीआई बनाते हैं और डमी कंटेंट जेनरेट करते हैं।
इस तरीके को प्रबंधित करने के लिए मैंने जो तरीके देखे हैं, वे हैं, रिपॉजिटरी, लाइब्रेरी और मॉडल को जोड़ना। यहाँ प्रत्येक की मेरी समझ है:
सेवाएँ: यह वह जगह है जहाँ ज्यादातर लोग इस कोड को डालते हैं। सेवाओं के साथ मेरा मुख्य मुद्दा यह है कि कभी-कभी उनमें विशिष्ट कार्यक्षमता ढूंढना कठिन होता है और मुझे लगता है कि वे उस समय भूल जाते हैं जब लोग एलोक्वेंट का उपयोग करने पर ध्यान केंद्रित करते हैं। मुझे कैसे पता चलेगा कि मुझे publishPost()
लाइब्रेरी में एक विधि को कॉल करने की आवश्यकता है जब मैं बस कर सकता हूं $post->is_published = 1
?
एकमात्र शर्त यह है कि मैं इसे अच्छी तरह से काम करता देख रहा हूं, यदि आप केवल सेवाओं का उपयोग करते हैं (और आदर्श रूप से किसी भी तरह नियंत्रकों से किसी भी तरह से अप्राप्य बना सकते हैं)।
अंततः ऐसा लगता है कि यह सिर्फ अतिरिक्त अनावश्यक फ़ाइलों का एक गुच्छा बना देगा यदि आपके अनुरोध आमतौर पर आपके मॉडल संरचना का पालन करते हैं।
रिपोजिटरी: जो मैं समझता हूं कि यह मूल रूप से एक सेवा की तरह है, लेकिन एक इंटरफ़ेस है ताकि आप ORMs के बीच स्विच कर सकें, जिसकी मुझे आवश्यकता नहीं है।
घटनाएँ: मैं इसे एक अर्थ में सबसे सुरुचिपूर्ण प्रणाली के रूप में देखता हूं क्योंकि आप जानते हैं कि आपके मॉडल की घटनाओं को हमेशा एलोकेंट विधियों पर बुलाया जाएगा, ताकि आप अपने नियंत्रकों को सामान्य रूप से लिख सकें। मैं देख सकता हूं कि ये गड़बड़ हो रहे हैं और अगर किसी के पास महत्वपूर्ण युग्मन के लिए घटनाओं का उपयोग करने वाली बड़ी परियोजनाओं के उदाहरण हैं तो मैं इसे देखना चाहता हूं।
मॉडल: परंपरागत रूप से मेरे पास ऐसी कक्षाएं होंगी जिन्होंने CRUD का प्रदर्शन किया और महत्वपूर्ण युग्मन भी संभाला। यह वास्तव में चीजों को आसान बनाता है क्योंकि आप CRUD + के आसपास सभी कार्यक्षमता जानते थे जो भी इसके साथ किया जाना था।
सरल, लेकिन MVC आर्किटेक्चर में यह सामान्य रूप से वह नहीं है जो मैंने किया है। एक अर्थ में, हालांकि मैं इस सेवा को पसंद करता हूं क्योंकि इसे ढूंढना थोड़ा आसान है, और इस पर नज़र रखने के लिए कम फाइलें हैं। हालांकि यह थोड़ा अव्यवस्थित हो सकता है। मैं इस विधि के बारे में सुनना चाहता हूँ और अधिकांश लोग ऐसा क्यों नहीं करते हैं।
प्रत्येक विधि के फायदे / नुकसान क्या हैं? क्या मैं कुछ भूल रहा हूँ?