আমি সম্প্রতি নিম্নলিখিত পরিস্থিতিতে চালিত।
class A{
public:
void calculate(T inputs);
}
প্রথমত, A
দৈহিক জগতের একটি বস্তুর প্রতিনিধিত্ব করে, যা শ্রেণি বিভক্ত না করার পক্ষে একটি শক্ত যুক্তি। এখন, calculate()
বেশ দীর্ঘ এবং জটিল ফাংশন হিসাবে দেখা যাচ্ছে। আমি এটির জন্য তিনটি সম্ভাব্য কাঠামো বুঝতে পারি:
- এটি পাঠ্যের প্রাচীর হিসাবে লিখুন - সুবিধা - সমস্ত তথ্য এক জায়গায়
private
ক্লাসে ইউটিলিটি ফাংশন লিখুন এবং তাদেরcalculate
শরীরের - অসুবিধাগুলিতে ব্যবহার করুন - ক্লাসের বাকিরা এই পদ্ধতিগুলি সম্পর্কে জানে / যত্ন / বুঝতে পারে নাcalculate
নিম্নলিখিত পদ্ধতিতে লিখুন :void A::calculate(T inputs){ auto lambda1 = () [] {}; auto lambda2 = () [] {}; auto lambda3 = () [] {}; lambda1(inputs.first_logical_chunk); lambda2(inputs.second_logical_chunk); lambda3(inputs.third_logical_chunk); }
এটি একটি ভাল বা খারাপ অনুশীলন হিসাবে বিবেচনা করা যেতে পারে? এই পদ্ধতির কোনও সমস্যা প্রকাশ করে? সব মিলিয়ে, যখন আমি আবার একই পরিস্থিতির মুখোমুখি হই তখন কি আমি এটিকে একটি ভাল পদ্ধতির হিসাবে বিবেচনা করব?
সম্পাদনা করুন:
class A{
...
public:
// Reconfiguration of the algorithm.
void set_colour(double colour);
void set_density(double density);
void set_predelay(unsigned long microseconds);
void set_reverb_time(double reverb_time, double room_size);
void set_drywet(double left, double right);
void set_room_size(double value);;
private:
// Sub-model objects.
...
}
এই সমস্ত পদ্ধতি:
- একটি মান পেতে
- রাষ্ট্র ব্যবহার না করে কিছু অন্যান্য মান গণনা করুন
- কিছু "সাব-মডেল অবজেক্টস" তাদের অবস্থা পরিবর্তন করতে কল করুন।
দেখা যাচ্ছে যে ব্যতীত set_room_size()
, এই পদ্ধতিগুলি কেবল অনুরোধকৃত মানটিকে উপ-অবজেক্টগুলিতে সরিয়ে দেয়। set_room_size()
অন্যদিকে, অস্পষ্ট সূত্রগুলির কয়েক পর্দা করে এবং তারপরে (2) বিভিন্ন প্রাপ্ত ফলাফল প্রয়োগ করতে সাব-অবজেক্টস সেটারগুলিকে কল করার অর্ধেক পর্দা করে। অতএব, আমি ফাংশনটি দুটি ল্যাম্বডায় বিভক্ত করেছি এবং ফাংশন শেষে তাদের কল করব। যদি আমি এটিকে আরও যুক্তিযুক্ত অংশগুলিতে ভাগ করতে পারি, তবে আমি আরও ল্যাম্বডাসকে বিচ্ছিন্ন করে দিতাম।
নির্বিশেষে, বর্তমান প্রশ্নের লক্ষ্যটি নির্ধারণ করা হয় যে সেই চিন্তাভাবনাটি অব্যাহত রয়েছে কিনা, বা এটি সর্বোত্তমভাবে মূল্য (পাঠযোগ্যতা, রক্ষণাবেক্ষণযোগ্যতা, ডিবাগ-ক্ষমতা ইত্যাদি) যুক্ত করছে না।
Firstly, A represents an object in the physical world, which is a strong argument for not splitting the class up.
অবশ্যই কোনও বস্তু সম্পর্কে তথ্যA
উপস্থাপন করে যা দৈহিক বিশ্বে বিদ্যমান থাকতে পারে । আপনি এর একটি দৃষ্টান্ত হতে পারে A
বাস্তব বস্তু এবং একটি দৃষ্টান্ত ছাড়া একটি বাস্তব বস্তু ছাড়া A
, তাই তাদের তারা করছি এক চিকিত্সা এবং একই অর্থহীন নয়।
calculate()
এই উপ-কার্যাবলী সম্পর্কে কেউ জানতে পারবেন না।
A
, তবে এটি একেবারে চূড়ান্ত দিকে নিয়ে যাচ্ছে।
A
দৈহিক জগতে একটি বস্তুর প্রতিনিধিত্ব করে, যা শ্রেণি বিভক্ত না করার পক্ষে দৃ argument় যুক্তি" " দুর্ভাগ্যক্রমে, আমি যখন প্রোগ্রামিং শুরু করি তখন আমি এটি বলেছিলাম। এটি বুঝতে পেরে আমার কয়েক বছর লেগেছে যে এটি একগুচ্ছ ঘোড়া হকি। বিষয়গুলিকে গোষ্ঠীভুক্ত করার এক ভয়ানক কারণ। আমি দিয়েও করতে পারবেন কি হয় গ্রুপ জিনিস ভাল কারণ (অন্তত আমার সন্তুষ্টি করার জন্য), কিন্তু যে এক এক আপনি এখন বাতিল হবে। সবশেষে, সমস্ত "ভাল কোড" হ'ল এটি সঠিকভাবে কাজ করে, বুঝতে অপেক্ষাকৃত সহজ, এবং পরিবর্তন করা তুলনামূলকভাবে সহজ (যেমন, পরিবর্তনের অদ্ভুত পার্শ্ব প্রতিক্রিয়া নেই)।