मेरे पास एकल उद्देश्य कार्यों का एक सेट है जो मुझे दो अलग-अलग नियंत्रकों में चाहिए। अभी मेरे पास केवल डुप्लिकेट कोड है और मैं इससे छुटकारा पाना चाहता हूं। यह कोड नियंत्रक का हिस्सा है और मेरी सेवा परत में नहीं है। आप इसे कहां रखेंगे?
मेरे पास एकल उद्देश्य कार्यों का एक सेट है जो मुझे दो अलग-अलग नियंत्रकों में चाहिए। अभी मेरे पास केवल डुप्लिकेट कोड है और मैं इससे छुटकारा पाना चाहता हूं। यह कोड नियंत्रक का हिस्सा है और मेरी सेवा परत में नहीं है। आप इसे कहां रखेंगे?
जवाबों:
आपने यह नहीं कहा कि यह किस प्रकार का तर्क है जिसे आप साझा कर रहे हैं। संक्षेप में, क्या यह नियंत्रक तर्क या सहायक कार्य है? वस्तु उन्मुख भाषा में इससे निपटने के दो तरीके विरासत और रचना हैं। यदि दो नियंत्रकों के बीच एक साझा कार्रवाई है, तो वंशानुक्रम समझ में आता है। रचना बाकी समय समझ में आता है। उत्तराधिकार का उपयोग करने का उदाहरण विभक्त के नीचे मेरे मूल उत्तर में निहित है।
आपके फ्रेमवर्क के आधार पर उपयोगिता वर्ग या सहायक वर्ग का होना असामान्य नहीं है। उदाहरण के लिए, जावा और C # वेब फ्रेमवर्क में आपके पास उपयोगिताओं के लिए एक पैकेज / नाम स्थान हो सकता है। रूबी ऑन रेल्स में, आप उस Helper
वर्ग का लाभ उठा सकते हैं जो नियंत्रकों और विचारों के बीच तर्क साझा करता है। मूल रूप से, यह इस तरह दिखेगा:
// NOTE: group similar functions
static class LoginUtility
{
static bool IsLoggedIn(Request request) { /* ... */ }
}
वैकल्पिक रूप से, आप इसे एक ऐसा वर्ग बना सकते हैं, जिसे आप तुरंत भेज सकते हैं। उपरोक्त स्थिर वर्ग पैटर्न की कुंजी आपके कार्यों को शुद्ध कार्य करना है। दूसरे शब्दों में, आप किसी भी राज्य में पास हो जाते हैं कि उसे काम करने की आवश्यकता है, और फ़ंक्शन सिस्टम में किसी भी अन्य स्थिर स्थिति का संदर्भ नहीं देता है।
किसी भी स्थिति में, आप इसे अपने प्रत्येक नियंत्रक में इस तरह से एक्सेस करेंगे:
void MyAction()
{
if (LoginUtiltiy.IsLoggedIn(Request))
{
// Do something ...
}
}
मूल उत्तर
आपने यह नहीं कहा कि आपका प्लेटफ़ॉर्म क्या था, क्योंकि यह उत्तर को प्रभावित कर सकता है। यह मानते हुए कि यह एक वस्तु उन्मुख भाषा है, सबसे आम दृष्टिकोण एक आधार वर्ग बनाना है जो दोनों नियंत्रकों का विस्तार करता है। उदाहरण के लिए रूबी ऑन रेल्स में आपके पास हो सकता है:
class BaseController < ApplicationController
def my_special_function
# ...
end
end
class Controller1 < BaseController
# ...
end
class Controller2 < BaseController
# ...
end
आप विचार को अन्य भाषाओं में भी अनुवादित कर सकते हैं। एक ही दृष्टिकोण ASP.NET MVC, Apache Wicket, Grails या किसी अन्य ऑब्जेक्ट ओरिएंटेड वेब फ्रेमवर्क के बारे में काम करेगा। यदि आपकी भाषा ऑब्जेक्ट ओरिएंटेड नहीं है, तो यह वास्तव में इस बात पर निर्भर करता है कि फ्रेमवर्क को सबसे अच्छा तरीका कैसे बनाया गया है ।