সর্বশেষ সপ্তাহে আমার মনে এই প্রশ্নটি ছিল: কখন আমার কোনও পরিষেবা বা কোনও ইউটিলিটি ফাংশন তৈরি করা উচিত?
ড্রুপাল কোরটিতে আমাদের পরিষেবা এবং ইউটিলিটি উভয়ই ফাংশন রয়েছে তবে আমি তাদের মধ্যে পার্থক্যটি খুঁজে পাচ্ছি না (যখন আমাকে কোনও পরিষেবা তৈরি করার প্রয়োজন হয় বা যখন আমার কোনও ইউটিলিটি ফাংশন তৈরি করার প্রয়োজন হয়)।
আমি উদাহরণস্বরূপ মডিউলগুলির ওজন মডিউলটি গ্রহণ করব যেখানে আমার অভ্যন্তরীণ ফাংশন ক্লাস রয়েছে।
<?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()
অন্য ক্লাসে থাকতে হবে এবং একটি পরিষেবা থাকতে হবে?
এই সময়ে আমি যে পার্থক্যটি পেয়েছি তা হ'ল নেমস্পেসের ভিতরে দ্রুপাল \ উপাদান \ ইউটিলিটি (যেখানে আপনি অনেকগুলি ইউটিলিটি ফিকশন দেখতে পাবেন) তাদের কোনওটিই কোনও পরিষেবার অভ্যন্তরে ব্যবহার করে না এবং সাধারণত একটি পরিষেবা ভিতরে অন্য পরিষেবা ব্যবহার করে (আমি না এটি যাচাই করতে সমস্ত পরিষেবা পর্যালোচনা করুন)।
সুতরাং, যখন আমার কোনও পরিষেবা বা কোনও ইউটিলিটি ফাংশন তৈরি করা উচিত?
Unicode
মূল হিসাবে নিন - এটি একটি স্ট্যাটিক ইউটিলিটি ক্লাস, কোনও পরিষেবা নয়, কারণ এটির কোনও নির্ভরতা নেই এবং কোনও রাষ্ট্র বজায় রাখার প্রয়োজন নেই। যদি এটির কোনও পরিষেবা নির্ভরতা প্রয়োজন, ডিআই প্যাটার্নটির প্রয়োজন হয় এটি একটি পরিষেবাতে রূপান্তরিত করা, এবং আপনি যখন প্রয়োজন হবে তখন আপনি ধারকটি থেকে সিঙ্গলটন (বা কারখানা-উত্পাদিত) উদাহরণটি ব্যবহার করবেন। অন্যথায় আপনি use
এটি স্থির শ্রেণি করতে পারেন যখন এটি বোধগম্য হয়।
Unicode
ডিজাইনের ভিত্তিতে একটি পরিষেবা হবে এবং এটি আসলে হওয়ার দরকার নেই। ইউটিলিটি ক্লাসগুলি সহজেই, কিছু ক্ষেত্রে আরও সহজেই, নিজের মডিউলে অন্য মডিউল এবং অন্যান্য কোড ব্যবহার করতে পারে তা ভুলে যাবেন না। তবে এগুলি সমস্ত বিকাশকারী হিসাবে আপনার নিজস্ব দৃষ্টিভঙ্গি / অভিজ্ঞতার উপর নির্ভর করে, এটি বেশিরভাগই সাধারণ জ্ঞানটিতে নেমে আসবে কঠোর উপায়ে
Unicode
এটি একটি দ্রুপাল শ্রেণি যেখানে কেবল স্থির পদ্ধতি রয়েছে! মূল ডেভস কোনও পরিষেবা না দিয়ে স্থিতিশীল শ্রেণি হিসাবে এটি প্রয়োগ করার সিদ্ধান্ত নিয়েছে, সম্ভবত এমন কিছু অর্থ যা আপনি ভাবেন না? একটি ইউটিলিটি ক্লাসটি প্রকৃতপক্ষে প্রকৃতরূপে লেখার দরকার নেই - এটি কিছু জিনিস করে, যদি সেই জিনিসগুলি আপনি যা চান তা না করে আপনি তার পরিবর্তে নিজের ক্লাসটি লেখেন। Rememberতিহ্যগতভাবে ইউটিলিটি ক্লাসে যে ধরণের জিনিসগুলি থাকে সেগুলি মনে রাখবেন, "আমি এটি করি এবং কিছুই করি না" ধরণের পদ্ধতি, যা প্যারামিটারের একটি সেট ছাড়া ইনপুট লাগবে না