একই বস্তুর উদাহরণের ব্যক্তিগত পদ্ধতিতে জনসাধারণকে কল করা কি কোডের গন্ধ?
একই বস্তুর উদাহরণের ব্যক্তিগত পদ্ধতিতে জনসাধারণকে কল করা কি কোডের গন্ধ?
উত্তর:
খারাপ গন্ধ নেই। এটির প্রয়োজন হতে পারে, আপনি কেন এটি ভুল বলে সন্দেহ করছেন? পারমাণবিক স্তরের একটি পদ্ধতি একটি স্বতন্ত্র সত্তা যা কোনও কাজ করে। যতক্ষণ না এটি কোনও কাজ করে ততক্ষণ যার যার অ্যাক্সেস রয়েছে সে কাজটি করার জন্য ফোন করতে পারে।
কোড গন্ধ? হ্যাঁ, সত্যই খারাপ নয়, তবে একটি ভাল সূচক যে বর্গের অনেক বেশি দায়িত্ব থাকতে পারে।
এটিকে একটি চিহ্ন হিসাবে ধরুন যে ক্লাসটি বিভিন্ন অবজেক্টে বিভক্ত হওয়ার প্রয়োজন হতে পারে, ব্যক্তিগত পদ্ধতিগুলিতে অবশ্যই সত্য ওও ডিজাইনে একই বস্তুর পাবলিক পদ্ধতিগুলি কল করার দরকার নেই।
অবশ্যই, আপনি একবার ক্লাসটি পরিদর্শন করেছেন এবং পদ্ধতি কল করার কারণগুলি স্পষ্ট হয়ে গেলে, এটি একটি নিখুঁত যুক্তিসঙ্গত ব্যবহার হতে পারে, সাধারণভাবে আপনি ক্লাসের জন্য ইউটিলিটি পদ্ধতিগুলি ব্যক্তিগত হওয়ার প্রত্যাশা করতেন, তবে যদি কোনওটি যথেষ্ট কার্যকর হয় তবে জনসাধারণের জন্য এবং অন্যান্য পদ্ধতি দ্বারা ব্যবহার করা হবে, আমি সাধারণত আশা করি যে এই পদ্ধতিগুলিও সর্বজনীন হবে।
সমস্ত কোডের গন্ধ মতো, এটি আরও কোড পরিদর্শন, যৌক্তিক এবং সম্ভবত রিফ্যাক্টর জন্য প্রেরণা, তবে অ্যালার্মের কারণ নয়।
যদি এই শ্রেণীর উত্স কোডটি না পড়ে এমন কেউ যদি এটি সাবক্লাস করার চেষ্টা করে এবং সর্বজনীন পদ্ধতিটিকে ওভাররাইড করে তবে এটি অপ্রীতিকর আশ্চর্য হতে পারে। এটি প্রকৃত উদ্বেগ কিনা তা অবশ্যই আপনার পরিস্থিতির উপর নির্ভর করে। হতে পারে আপনার পাবলিক পদ্ধতি বা এমনকি ক্লাস ফাইনাল করা বিবেচনা করা উচিত।
না, সে ক্ষেত্রে আর কী করা উচিত? বেসরকারী পদ্ধতিটি জনসাধারণকে বা জনসাধারণের পদ্ধতিটিকে বেসরকারী করবেন? পাবলিক পদ্ধতি থেকে কোডটি প্রাইভেটকে কোডটি কপি-পেস্ট করুন?
না , এখানে দুর্গন্ধ নেই।
যদি আমরা তালিকার সাথে একটি কাতারের ইন্টারফেস প্রয়োগ করি তবে সহজেই কিউটির বাস্তবায়ন অর্জনের জন্য সঠিক তালিকা কার্যকারিতাটি কল করা কি দুর্গন্ধযুক্ত?
যদি আপনার কিছু থাকে এবং আপনি এটিকে অন্য কিছুতে রূপান্তর করতে চান (যেমন মোড়কের মতো) তবে এটি কোনও দুর্গন্ধ নয়, এর কোডটি ফাংশন স্তরে অভিনয় করে নকশার প্যাটার্নের সাথে পুনরায় ব্যবহারের যোগ্যতা (কোনও ফাংশন কী কোনও বস্তু?)
আমি জানি এটি একটি পুরানো পোস্ট, তবে এটি এমন কিছু যা আমি কর্মক্ষেত্রে বিতর্ক করছি। আমি এটিকে একটি কোড গন্ধ হিসাবে বিবেচনা করি এবং আপনি কেন এটি করতে চান তা বুঝতে পারি না। যদি কোনও ব্যক্তিগত পদ্ধতি অবশ্যই একটি সর্বজনীন পদ্ধতিতে কল করতে পারে, তবে সর্বজনীন পদ্ধতির সামগ্রীটি নেওয়া উচিত এবং একটি ব্যক্তিগত পদ্ধতিতে রাখা উচিত, যা উভয় পদ্ধতিই কল করতে পারে। কেন?
সর্বজনীন পদ্ধতিতে এমন পরীক্ষাগুলি থাকতে পারে যা একবার আপনার অভ্যন্তরীণভাবে কোড কার্যকর করার কোড নয়। এটি কোনও ইউজারবজ গ্রহণ করতে পারে এবং উদাহরণস্বরূপ ব্যবহারকারীর অনুমতি পরীক্ষা করতে চায়।
সর্বজনীন কল করার পরে আপনার যদি প্রয়োজন হয় যে আপনি অবজেক্টটি লক করে ফেলতে পারেন, যদি আপনি থ্রেডিং ব্যবহার করছেন তবে অভ্যন্তরীণভাবে, আপনি কোনও সার্বজনীন পদ্ধতিতে আবার কল করতে চাইবেন না।
আমার মতে বিজ্ঞপ্তি ত্রুটি এবং অসীম লুপগুলি এবং স্মৃতি ব্যতিক্রমগুলি প্রবর্তনের আরও বেশি সম্ভাবনা।
সরল এবং সহজভাবে, খারাপ ডিজাইন এবং "অলস"। পাবলিক পদ্ধতি বাইরের বিশ্বে অ্যাক্সেস সরবরাহ করে। আপনি ইতিমধ্যে ভিতরে থাকলে বাইরে ফিরে হাঁটার কোনও কারণ নেই।
বিপরীতে কল্পনা করুন। আপনি একটি বেসরকারী পদ্ধতিতে রয়েছেন এবং আপনার একটি সার্বজনীন পদ্ধতিতে কার্যকারিতা প্রয়োজন যদি আপনি ব্যক্তিগত থেকে এই পাবলিক পদ্ধতিটি কল করতে না পারেন তবে কী হবে । আপনি কি করতে চান?
উত্তরটি স্পষ্টভাবে যে আপনি যখন কোনও পাবলিক পদ্ধতিতে কার্যকারিতা চান তখন আপনার এই পদ্ধতিটি এই শ্রেণীর পদ্ধতি বা অন্যান্য শ্রেণি থেকে কল করতে সক্ষম হওয়া উচিত।
আমার কোডে আমি প্রায়শই অলস লোড গেটার তৈরি করি, যার অর্থ হ'ল অনুরোধ করা প্রথমবারের মতো বস্তুটি আরম্ভ হয় এবং তারপরে একই তাত্ক্ষণিক বস্তুটিকে পুনরায় ব্যবহার করে। তবে অলস লোড ব্যবহার করে ইনস্ট্যান্ট করা কোনও বস্তু বোঝায় যে এটি কোনও নির্দিষ্ট সময়ে তাত্ক্ষণিকভাবে ইনস্ট্যান্ট করা যাবে না। আমার মাথার কলগুলির ক্রমকে ঘিরে রাখার চেয়ে আমি জানি যে সেই বস্তুটি ইতিমধ্যে ইনস্ট্যান্ট করা হয়েছে বা অন্য পদ্ধতির মধ্যে অলস লোডের একই কোডটি পুনরাবৃত্তি করছে, যখনই আমার প্রয়োজন হবে যখনই আমার প্রয়োজন হবে তখনই আমি অলস লোডারটি কল করি।
আপনি যেমন স্মার্ট উপায়ে জনসাধারণের পদ্ধতিগুলি ব্যবহার করতে পারেন, আপনি সেগুলিও ভুলভাবে ব্যবহার করতে পারেন। এর উদাহরণ হতে পারে একটি সর্বজনীন পদ্ধতি যা অন্য একটি ব্যক্তিগত পদ্ধতি কল করার আগে এর পরামিতিগুলি প্রক্রিয়া করে। আপনার সাধারণ প্যারামিটারগুলি কেবলমাত্র কারণটিকে সাধারণভাবে কল করা ভুল হবে। ভুলটি সূক্ষ্ম তবে এটি অন্য যে কোনও কিছুর চেয়ে ডিজাইনের ত্রুটি এবং এটি আপনাকে পাবলিক পদ্ধতির পরামিতিগুলির চেয়ে অভ্যন্তরীণ পদ্ধতির পরামিতিগুলি দিয়ে পরিচালনা করতে শিখতে হবে।
সুতরাং আপনার প্রশ্নের উত্তর দেওয়ার জন্য, আপনি যদি এটি সঠিকভাবে ব্যবহার করেন তবে এটি অবশ্যই খারাপ কোড নয়।
আপনার নিজের কাছে প্রশ্নটি জিজ্ঞাসা করা দরকার কেন আপনার ক্লাসটির ক্লায়েন্টগুলির ক্লায়েন্টগুলির সমান প্রয়োজন কেন? সাধারণত একটি ক্লাসের ক্লায়েন্টদের থেকে খুব আলাদা প্রয়োজন হয়। হ্যাঁ, এটি আপনার কাছে একটি ইঙ্গিত দেয়
(ক) প্রকাশ্যে এমন কিছু প্রকাশ করা যা ব্যক্তিগত হওয়া উচিত; অথবা
(খ) শ্রেণীর আচরণ যথেষ্ট সংকীর্ণ নয় (একক দায়িত্বের নীতিটি ভাবেন)।