मेरे मन में यह सवाल पिछले हफ्ते भर से था: मुझे सेवा या उपयोगिता समारोह कब बनाना चाहिए?
Drupal Core में हमारे पास दोनों सेवाएँ और उपयोगिता फ़ंक्शंस हैं, लेकिन मैं उनके बीच अंतर नहीं खोज सकता (जब मुझे एक सेवा बनाने की आवश्यकता होती है या जब मुझे एक उपयोगिता फ़ंक्शन बनाने की आवश्यकता होती है)।
मैं उदाहरण के तौर पर मॉडल्स वेट मॉड्यूल ले जाऊंगा, जहां मेरे पास इंटरनल एफक्शन क्लास है।
<?php
namespace Drupal\modules_weight\Utility;
class InternalFunctions {
public static function prepareDelta($weight) {
$delta = 100;
$weight = (int) $weight;
if ($weight > $delta) {
return $weight;
}
if ($weight < -100) {
return $weight * -1;
}
return $delta;
}
public static function modulesList($force = FALSE) {
$modules = [];
$installed_modules = system_get_info('module');
$config_factory = \Drupal::service('config.factory');
if ($force) {
$show_system_modules = TRUE;
}
else {
modules.
$show_system_modules = $config_factory->get('modules_weight.settings')->get('show_system_modules');
}
$modules_weight = $config_factory->get('core.extension')->get('module');
foreach ($installed_modules as $filename => $module_info) {
if (!isset($module_info['hidden']) && ($show_system_modules || $module_info['package'] != 'Core')) {
$modules[$filename]['name'] = $module_info['name'];
$modules[$filename]['description'] = $module_info['description'];
$modules[$filename]['weight'] = $modules_weight[$filename];
$modules[$filename]['package'] = $module_info['package'];
}
}
uasort($modules, ['Drupal\Component\Utility\SortArray', 'sortByWeightElement']);
return $modules;
}
}
इस वर्ग में मेरे दो स्थिर कार्य हैं लेकिन वे दोनों उपयोगिता कार्य हैं या prepareDelta()
एक उपयोगिता कार्य है और modulesList()
दूसरी कक्षा में होना चाहिए और एक सेवा होनी चाहिए?
इस समय मुझे जो एकमात्र अंतर मिला वह यह है कि नेमस्पेस Drupal \ Component \ उपयोगिता के अंदर (जहाँ आपको बहुत सारी उपयोगिताएँ fucntions दिखाई देंगी) उनमें से कोई भी एक सेवा के अंदर उपयोग नहीं करता है और आमतौर पर एक सेवा अंदर अन्य सेवाओं का उपयोग करती है (मैं नहीं। इसे सत्यापित करने के लिए सभी सेवाओं की समीक्षा करें)।
तो, मुझे एक सेवा या एक उपयोगिता समारोह कब बनाना चाहिए?
Unicode
कक्षा को मूल में लें - यह एक स्थिर उपयोगिता वर्ग है, सेवा नहीं, क्योंकि इसकी कोई निर्भरता नहीं है, और किसी भी राज्य को बनाए रखने की आवश्यकता नहीं है। यदि इसे सेवा निर्भरता की आवश्यकता होती है, तो DI पैटर्न को सेवा में परिवर्तित करने की आवश्यकता होती है, और जब आपको इसकी आवश्यकता होती है तो आप कंटेनर से सिंगलटन (या फ़ैक्ट्री-जनरेटेड) उदाहरण का उपयोग करेंगे। अन्यथा use
जब आप समझ में आता है तो आप इसे केवल स्थिर वर्ग बना सकते हैं।
Unicode
होता , तो डिजाइन द्वारा एक सेवा होगी, और यह वास्तव में होने की आवश्यकता नहीं है। उपयोगिता वर्ग को मत भूलो, आसानी से और अधिक आसानी से, कुछ मामलों में, अपने मॉड्यूल में अन्य मॉड्यूल और अन्य कोड द्वारा उपयोग किया जा सकता है। लेकिन इनके अलावा अपने स्वयं के परिप्रेक्ष्य / एक डेवलपर के रूप में अनुभव पर निर्भर करता है, यह ज्यादातर नीचे सामान्य ज्ञान के लिए आया हूँ मुश्किल तरीके से सीखा
Unicode
है एक Drupal वर्ग है कि केवल स्थिर तरीकों शामिल हैं! तथ्य यह है कि कोर देवों ने इसे एक स्थिर वर्ग के रूप में लागू करने के लिए चुना था, बजाय एक सेवा के, शायद इसका मतलब है कि आपको कुछ नहीं लगता है? एक उपयोगिता वर्ग को वास्तव में अपने स्वभाव से, अधिलेखित होने की आवश्यकता नहीं है - यह कुछ चीजें करता है, यदि वे चीजें नहीं हैं जो आप चाहते हैं, तो आप इसके बजाय अपनी कक्षा लिखते हैं। चीजें हैं जो पारंपरिक रूप से उपयोगिता कक्षाओं में रहते एक शॉट हैं की तरह याद रखें, तरीकों के प्रकार, कि मानकों का एक सेट को छोड़कर इनपुट की जरूरत नहीं है "मैं इस और कुछ नहीं करते हैं"