ফাংশনটি যদি "খাঁটি" হয় তবে আমি কোনও সমস্যা দেখছি না। একটি খাঁটি ফাংশন কেবল ইনপুট পরামিতিগুলিতে কাজ করে এবং তার ভিত্তিতে একটি ফলাফল সরবরাহ করে। এটি কোনও বৈশ্বিক রাষ্ট্র বা বাহ্যিক প্রসঙ্গে নির্ভর করে না।
যদি আমি আপনার নিজের কোড উদাহরণটি দেখি:
public class Class1
{
public static string GetSomeString()
{
// do something
}
}
এই ফাংশনটি কোনও পরামিতি নেয় না। সুতরাং, এটি সম্ভবত খাঁটি নয় (এই ক্রিয়াকলাপের একমাত্র বিশুদ্ধ বাস্তবায়নটি একটি ধ্রুবককে ফিরিয়ে দেওয়া হবে)। আমি ধরে নিই যে এই উদাহরণটি আপনার প্রকৃত সমস্যার প্রতিনিধি নয়, আমি কেবল উল্লেখ করছি যে এটি সম্ভবত কোনও শুদ্ধ কার্য নয়।
একটি আলাদা উদাহরণ নিতে দিন:
public static bool IsOdd(int number) { return (number % 2) == 1; }
এই ফাংশনটি স্থির হওয়ার সাথে কোনও দোষ নেই। আমরা ক্লায়েন্ট কোডটিকে আরও বেশি পঠনযোগ্য হয়ে ওঠে, এটি এমনকি একটি এক্সটেনশন ফাংশন হিসাবেও তৈরি করতে পারি। এক্সটেনশন ফাংশন হয় মূলত শুধু স্ট্যাটিক ফাংশন একটি বিশেষ ধরনের।
টেলাস্টিন স্থিতিশীল সদস্যদের একটি সম্ভাব্য সমস্যা হিসাবে সম্মিলিতভাবে সঠিকভাবে উল্লেখ করেছেন। তবে, যেহেতু এই ফাংশনটি ভাগ করা স্থিতি ব্যবহার করে না, তাই এখানে কোনও সহাবস্থানীয় সমস্যা নেই। এক হাজার থ্রেড কোনও সম্মতিযুক্ত সমস্যা ছাড়াই এই ফাংশনটি একই সাথে কল করতে পারে।
.NET ফ্রেমওয়ার্কে, এক্সটেনশন পদ্ধতিগুলি বেশ কিছু সময়ের জন্য বিদ্যমান। LINQ এক্সটেনশন ফাংশন অনেক ধারণ করে (যেমন Enumerable.Where () , Enumerable.First () , Enumerable.Single () , ইত্যাদি)। আমরা এগুলি খারাপ হিসাবে দেখি না, তাই না?
কোডটি প্রতিস্থাপনযোগ্য বিমূর্ততা ব্যবহার করে ইউনিট পরীক্ষাটি প্রায়শই উপকৃত হতে পারে, ইউনিট পরীক্ষাটি সিস্টেমের কোডটিকে দ্বিগুণ পরীক্ষার সাথে প্রতিস্থাপন করতে দেয়। স্ট্যাটিক ফাংশনগুলি এই নমনীয়তাটিকে নিষিদ্ধ করে, তবে এটি বেশিরভাগই স্থাপত্য স্তরের সীমানায় গুরুত্বপূর্ণ, যেখানে আমরা প্রতিস্থাপন করতে চাই, উদাহরণস্বরূপ, একটি জাল ডেটা অ্যাক্সেস স্তর সহ একটি আসল ডেটা অ্যাক্সেস স্তর।
যাইহোক, কোনও সংখ্যার বিজোড় বা এমনকি সমতুল্য কিনা তার উপর নির্ভর করে, কোনও আচরণের জন্য আলাদাভাবে আচরণ করে এমন কোনও পরীক্ষার জন্য লেখার সময়, আমাদের IsOdd()
কোনও বিকল্প বাস্তবায়ন দিয়ে কার্যটি প্রতিস্থাপন করতে সক্ষম হওয়ার দরকার নেই to তেমনি, আমি কখন দেখি না যখন আমাদের Enumerable.Where()
পরীক্ষার উদ্দেশ্যে পৃথক বাস্তবায়ন সরবরাহ করা প্রয়োজন ।
সুতরাং আসুন এই ফাংশনটির জন্য ক্লায়েন্ট কোডের পঠনযোগ্যতা পরীক্ষা করে দেখুন:
বিকল্প একটি (এক্সটেনশন পদ্ধতি হিসাবে ঘোষিত ফাংশন সহ):
public void Execute(int number) {
if (number.IsOdd())
// Do something
}
বিকল্প বি:
public void Execute(int number) {
var helper = new NumberHelper();
if (helper.IsOdd(number))
// Do something
}
স্ট্যাটিক (এক্সটেনশন) ফাংশনটি কোডের প্রথম টুকরোটিকে অনেক বেশি পঠনযোগ্য করে তোলে এবং পাঠযোগ্যতা অনেকটাই গুরুত্বপূর্ণ, তাই যেখানে উপযুক্ত সেখানে স্থির ফাংশন ব্যবহার করুন।