MVC में उपयोगिता वर्ग - ASP.NET


16

इसलिए मैं आज सोच रहा था, आप ASP.NET MVC ऐप में यूटिलिटी क्लासेस कहाँ से लाएँगे? उपयोगिता कक्षाओं से मेरा मतलब है कि वे कक्षाएं जो स्थिर हो सकती हैं और केवल एक फ़ंक्शन करने के लिए उपयोग की जाती हैं। एक ईमेल भेजने के लिए एक वर्ग की तरह, जो ईमेल पते, विषय और तर्क के रूप में शरीर लेता है।
मुझे लगता है कि शायद एक अलग फ़ोल्डर और नाम स्थान बनाना काफी अच्छा होगा, लेकिन सभी की राय लेना चाहते थे


3
किसी भी प्रकार की परियोजना में उपयोगिता वर्ग क्यों बनाए जाएंगे? आपके प्रश्न में एमवीसी एकवचन क्यों है?
ओड

1
वैसे मैं एमवीसी के बारे में सोच रहा था क्योंकि यह एक तरह से संरचना है। और जहाँ तक उपयोगिता है, मैं इस धारणा के अधीन था कि हर कोई उनका उपयोग करता है :) अगर मेरे पास एक ईमेल प्रेषक कोड है, और मैंने इसे सिस्टम के विभिन्न भागों के साथ काम करने के लिए अलग वर्ग में विभाजित किया है, तो यह नहीं है कि उपयोगिता वर्ग या हूँ मैं उलझन में हूं? मुझे लगा कि उपयोगिता कक्षाएं एक बार किसी भी कार्यक्रम में पुन: प्रयोज्य हैं जो कोड में बंधी नहीं हैं
user60812

मैं व्यक्तिगत रूप से एक सेवा भेजने वाले ईमेल पर विचार करूंगा, जिसे इंटरफ़ेस IUserNotificationSender कहकर सारगर्भित किया गया है .. इसलिए उचित त्रुटि से निपटने के लिए, smtp config आदि जो वास्तव में एक उपयोगिता फ़ंक्शन में फिट नहीं होता है ...
Max

@ मैक्स तो क्या यूटिलिटी फंक्शन माना जाएगा? मैं समझने की कोशिश कर रहा हूं, जैसा कि मुझे लगता है कि मैं बहुत भ्रमित हूं
user60812

ठीक है, मेरे दिमाग में एक उचित उपयोगिता फ़ंक्शन एक बहुत छोटा कार्य है जिसमें बहुत अधिक परिभाषित गुंजाइश है और कोई बाहरी निर्भरता नहीं है ... जैसे कि व्हाट्सएप को निकालने के लिए एक फ़ंक्शन, या एक स्ट्रिंग ट्रिम करें, या एक संग्रह का nth तत्व प्राप्त करें ...
मैक्स

जवाबों:


11

तुम नहीं। और आपका अपना उदाहरण यह दिखाने के लिए एक आदर्श है कि क्यों नहीं।

आप ईमेल भेजना चाहते हैं, है ना? इसलिए आप CommunicationUtilitiesइसमें एक स्टैटिक के साथ कहीं एक स्टैटिक क्लास बनाते हैं SendEmail()। आप इस विधि का उपयोग कुछ वर्ग से करते हैं जो सामान का एक गुच्छा करता है, उदाहरण के लिए उपयोगकर्ता का पासवर्ड रीसेट करता है और उसे ईमेल द्वारा एक नया भेजता है। उत्तम।

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

आपने उलटा नियंत्रण के बारे में पढ़ा होगा, जिसमें यूनिट परीक्षण को आसान बनाने का एक लाभ है। आईओसी के बारे में लेख आपको समझाएंगे कि कुछ करने के बजाय:

void ResetPassword(UserIdentifier userId)
{
    ...
    new MailSender().SendPasswordReset(userMail, newPassword);
}

तुम करो:

void ResetPassword(IMailSender sender, UserIdentifier userId)
{
    ...
    sender.SendPasswordReset(userMail, newPassword);
}

जो मोज़ेक और स्टब्स का उपयोग करने की अनुमति देता है।

अपने लिए IoC लगाने का प्रयास करें CommunicationUtilities। ठीक है, तुम नहीं कर सकते। इसलिए टूट गया है।


हाय मेनमा, इसलिए अगर मैं सही ढंग से समझता हूं कि सभी पाइपिंग के साथ एक बैकग्राउंड क्लास बनाना अभी भी उचित है, और फिर इसे एक इंटरफेस के साथ सार कर दें, और क्लास से सीधे कॉल करने के बजाय फंक्शन पास करें।
user60812

1
@ user60812: संक्षेप में, आईओसी के बारे में पढ़ें। पूरे विषय को एक साधारण टिप्पणी में समझाना मुश्किल होगा।
आर्सेनी मूरज़ेंको

1
स्ट्रिंग ट्रंकेटर की तरह वास्तव में सामान्य उपयोगिता फ़ंक्शन के बारे में क्या है?
jbyrd

2
@MainMa - क्षमा करें, मैं अनुसरण नहीं करता। कि मैं क्या चाहता हूँ, की तर्ज पर हाँ। लेकिन Truncate () c # में नहीं बनाया गया है, इसलिए मैं सोच रहा था कि यह किसी प्रकार की उपयोगिताओं की श्रेणी में उस तरह की जेनेरिक उपयोगिता फ़ंक्शन को छड़ी करने के लिए समझ में आएगा।
jbyrd

2
यह उत्तर इस समस्या को ध्यान में रखते हुए परिभाषित करता है कि इस विशेष मामले में कोई उपयोग वर्ग आवश्यक नहीं है। लेकिन सामान्य तौर पर हमेशा कुछ "सहायक" शैली विधियां होती हैं जो कहीं भी फिट नहीं होती हैं।
usr

9

प्रश्न एक मान्य है, भले ही दिया गया उदाहरण न हो। मैना द्वारा दिया गया उत्तर एकदम विशिष्ट संदर्भ में, जो मेरे लिए नहीं है, "उपयोगिता" वर्गों के लिए उचित संदर्भ है ।

व्यक्तिगत रूप से, मैं एक फ़ोल्डर बनाता हूं Helpersजिसमें मैं विस्तार से कहीं भी कॉल करने के लिए सरल कार्य करता हूं, जैसे एक्सटेंशन, जिस स्थिति में, हां, वे स्थिर हैं।

अब, अगर कोई बेहतर तरीका है, तो मुझे यह जानकर खुशी होगी, लेकिन अभी तक:

  • मैं एक्सटेंशन्स में कुछ भी गलत नहीं देखता।
  • मैं उन्हें एक विशिष्ट फ़ोल्डर में समूहीकृत करने में कुछ भी गलत नहीं देखता।

अब, एक विस्तार सिर्फ वाक्यविन्यास चीनी है, यह एक क्लासिक फ़ंक्शन भी हो सकता है।


6

पहले दिए गए उत्तरों में से कोई भी वास्तविक प्रश्न का पता नहीं है। user60812 ने केवल यह पूछा कि कोई MVC प्रोजेक्ट के अंदर एक उपयोगिता वर्ग कहां रखेगा। सभी ने एकवचन उदाहरण पर प्रहार किया और प्रश्न को छोड़कर हर चीज के बारे में तर्क दिया।

@ user60812, आप चाहते हैं कि अमूर्त के स्तर के आधार पर, मैं:

  • ए) एक फ़ोल्डर बनाएं और उस फ़ोल्डर के भीतर उपयोगिता वर्ग बनाएं
  • बी) उपयोगिता कक्षाएं (विधानसभा पुन: उपयोग की इच्छा मानकर) रखने के लिए एक परियोजना बनाएं।
  • ग) अपनी उपयोगिताओं को एक सेवा वास्तुकला में विस्तारित करें और उन्हें कॉल करें

यहां बेहतर उत्तरों के साथ एक समान प्रश्न का लिंक दिया गया है।

IMHO


1

उपयोगिताओं के लिए स्थिर कक्षाएं न बनाएं। ज्यादातर मामलों में स्टैटिक्स खराब हैं। उन्हें प्रबंधक भी मत कहो। आप जो भी काम कर रहे हैं, उसे तार्किक नाम स्थान पर रखा जाना चाहिए।

उदाहरण के लिए:

namespace Application.Notifications.Email
{
   public interface ISendEmailCommand
   {
      void Execute(Email email);
   }
}

ईमेल पता, विषय और शरीर एक अलग चिंता का विषय है, इसलिए मेरे पास इसके लिए एक वर्ग संरचना होगी, इसलिए मैंने Email emailऊपर उदाहरण में उपयोग किया है।


कृपया बताएं कि उपयोगिता विधियों को धारण करने के लिए स्थैतिक कक्षाएं क्यों खराब हैं? मैं आपके तर्क के अनुसार वास्तव में उत्सुक हूं।
स्पेंसर सुलिवन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.