এই প্রসঙ্গে "বাহ্যিক" এর অর্থ "ব্যবহারকারীদের কাছে পর্যবেক্ষণযোগ্য"। ব্যবহারকারীরা কোনও অ্যাপ্লিকেশন বা পাবলিক এপিআইর ক্ষেত্রে অন্যান্য প্রোগ্রামের ক্ষেত্রে মানুষ হতে পারে।
সুতরাং আপনি যদি পদ্ধতি এম থেকে ক্লাস এ থেকে বি বিতে নিয়ে যান এবং উভয় ক্লাসই একটি অ্যাপ্লিকেশনটির অভ্যন্তরে গভীর হয় এবং কোনও ব্যবহারকারী পরিবর্তনের কারণে অ্যাপের আচরণে কোনও পরিবর্তন পর্যবেক্ষণ করতে না পারে, তবে আপনি এটিকে যথাযথভাবে রিফ্যাক্টরিং বলতে পারেন।
যদি ওটিওএইচ, অন্য কিছু উচ্চ স্তরের সাবসিস্টেম / উপাদান পরিবর্তনের কারণে তার আচরণ পরিবর্তন করে বা বিরতি দেয় তবে তা প্রকৃতপক্ষে (সাধারণত) ব্যবহারকারীদের জন্য পর্যবেক্ষণযোগ্য (বা কমপক্ষে সিসডমিনস লগ-ইন পরীক্ষা করা)। অথবা যদি আপনার ক্লাসগুলি কোনও পাবলিক এপিআইয়ের অংশ হয় তবে সেখানে তৃতীয় পক্ষের কোড থাকতে পারে যা এম ক্লাসের অংশ হওয়ার উপর নির্ভর করে, বি নয়, সুতরাং এই কেসের কোনওটিই কঠোর অর্থে রিফ্যাক্টর করছে না।
যে কোনও কোডের পুনর্নির্মাণকে রিফ্যাক্টরিং হিসাবে কল করার প্রবণতা রয়েছে যা আমার ধারণা, ভুল।
প্রকৃতপক্ষে, ফ্যাশনেবল হয়ে ওঠার এটি একটি দুঃখজনক তবে প্রত্যাশিত পরিণতি। বিকাশকারীরা যুগে যুগে একটি অ্যাডহক পদ্ধতিতে কোড রিওয়ার্ক করে চলেছেন, এবং অন্তর্ভুক্ত অভ্যাসগুলি বিশ্লেষণ এবং পরিবর্তন করার চেয়ে একটি নতুন গুঞ্জন শব্দ শেখা অবশ্যই সহজ।
তাহলে বাহ্যিক আচরণ পরিবর্তন করে এমন প্রতারণার জন্য সঠিক শব্দটি কী?
আমি এটিকে আবার নতুন ডিজাইন বলব ।
হালনাগাদ
ইন্টারফেস সম্পর্কে অনেক আকর্ষণীয় উত্তর, কিন্তু পদ্ধতি রিফ্যাক্টরিং ইন্টারফেস পরিবর্তন না?
কি? নির্দিষ্ট ক্লাস, হ্যাঁ। কিন্তু এই শ্রেণিগুলি কোনওভাবেই বাইরের বিশ্বের প্রত্যক্ষ দৃশ্যমান? যদি তা না হয় - কারণ তারা আপনার প্রোগ্রাম ভিতরে, আর না বাইরের ইন্টারফেসের (API / গুই) অংশ প্রোগ্রাম (যদি না পরিবর্তন বিরতি কিছু, অবশ্যই) কোন পরিবর্তনটি করে সেখানে বহিরাগত পক্ষ দ্বারা পর্যবেক্ষণযোগ্য হয় -।
আমি অনুভব করি যে এর বাইরে আরও গভীর প্রশ্ন রয়েছে: একটি নির্দিষ্ট শ্রেণি নিজে থেকেই স্বতন্ত্র সত্তা হিসাবে উপস্থিত রয়েছে? অধিকাংশ ক্ষেত্রে, উত্তর কোন : শ্রেণি শুধুমাত্র একটি বৃহত্তর উপাদান, ক্লাস এবং বস্তুর একটি বাস্তুতন্ত্র, যা ছাড়া এটি instantiated করা যাবে না এবং / অথবা ব্যবহার অযোগ্য অংশ হিসেবে বিদ্যমান। এই বাস্তুতন্ত্রটি কেবল তার (প্রত্যক্ষ / পরোক্ষ) নির্ভরতা অন্তর্ভুক্ত করে না, তবে অন্যান্য শ্রেণি / অবজেক্টগুলিও এর উপর নির্ভর করে। কারণ এই উচ্চ স্তরের শ্রেণিগুলি ব্যতীত, আমাদের শ্রেণীর সাথে সম্পর্কিত দায়বদ্ধতা সিস্টেমের ব্যবহারকারীদের কাছে অর্থহীন / অকেজো হতে পারে।
উদাহরণস্বরূপ আমাদের প্রকল্পে যা গাড়ি ভাড়া নিয়ে কাজ করে, সেখানে একটি a Charge
বর্গ। এই শ্রেণীর নিজেরাই সিস্টেমের ব্যবহারকারীর কোনও ব্যবহার নেই, কারণ ভাড়া স্টেশন এজেন্ট এবং গ্রাহকরা পৃথক চার্জের সাথে অনেক কিছু করতে পারে না: তারা পুরো হিসাবে ভাড়া চুক্তির চুক্তিগুলি মোকাবেলা করে (যার মধ্যে বিভিন্ন ধরণের চার্জের সংযোজন রয়েছে) । ব্যবহারকারীরা বেশিরভাগ এই চার্জের সমষ্টিতে আগ্রহী, তারা শেষ পর্যন্ত প্রদান করবে; এজেন্ট বিভিন্ন চুক্তির বিকল্পগুলি, ভাড়ার দৈর্ঘ্য, গাড়ির গ্রুপ, বীমা প্যাকেজ, অতিরিক্ত আইটেম ইত্যাদি ইত্যাদিতে আগ্রহী - যা (পরিশীলিত ব্যবসায়িক বিধিগুলির মাধ্যমে) কোন চার্জ উপস্থিত রয়েছে এবং চূড়ান্ত অর্থ প্রদান কীভাবে গণনা করা হয় তা পরিচালনা করে এর বাইরে এবং দেশের প্রতিনিধি / ব্যবসায় বিশ্লেষকরা নির্দিষ্ট ব্যবসার বিধি, তাদের সমন্বয় এবং প্রভাবগুলি (সংস্থার আয়ের উপর ইত্যাদি) সম্পর্কে যত্নশীল।
সম্প্রতি আমি এই ক্লাসটি রিফ্যাক্ট করে এর বেশিরভাগ ক্ষেত্র এবং পদ্ধতিগুলির নাম পরিবর্তন করেছিলাম (আমাদের পূর্বসূরীদের দ্বারা সম্পূর্ণ অবহেলিত স্ট্যান্ডার্ড জাভা নামকরণ কনভেনশন অনুসরণ করতে)। আমি আরও যথাযথ এবং প্রকারের সাথে প্রতিস্থাপন String
এবং char
ক্ষেত্রগুলি আরও সংশোধন করার পরিকল্পনা করি plan এগুলি অবশ্যই ক্লাসের ইন্টারফেসকে বদলে দেবে, তবে (যদি আমি আমার কাজটি সঠিকভাবে করি) তবে এটির কোনও কিছুই আমাদের অ্যাপের ব্যবহারকারীদের কাছে দৃশ্যমান হবে না। তাদের মধ্যে কেউই পৃথক চার্জ কীভাবে উপস্থাপন করা হয় তা বিবেচনা করে না, যদিও তারা অবশ্যই চার্জের ধারণাটি জানেনenum
boolean
। আমি উদাহরণস্বরূপ আরও একশত অন্যান্য শ্রেণি নির্বাচন করতে পারতাম যে কোনও ডোমেইন ধারণাকে উপস্থাপন করে না, তাই শেষ ব্যবহারকারীদের কাছে এমনকি ধারণাগতভাবে অদৃশ্য হয়েও আমি ধারণা করেছি যে ধারণা স্তরে কমপক্ষে কিছু দৃশ্যমানতা রয়েছে এমন উদাহরণ বেছে নেওয়া আরও আকর্ষণীয়। এটি দুর্দান্তভাবে দেখায় যে শ্রেণি ইন্টারফেসগুলি কেবল ডোমেন ধারণাগুলির (সর্বোত্তমভাবে) উপস্থাপনা হয়, আসল জিনিস নয় *। উপস্থাপনা ধারণা প্রভাবিত না করে পরিবর্তন করা যেতে পারে। এবং ব্যবহারকারীদের কেবল ধারণাটি রয়েছে এবং তা বোঝে; ধারণা এবং উপস্থাপনের মধ্যে ম্যাপিং করা আমাদের কাজ।
* এবং যে কোনওটি সহজেই যুক্ত করতে পারেন যে ডোমেন মডেলটি, যা আমাদের শ্রেণি প্রতিনিধিত্ব করে, এটি কেবল কিছু "আসল জিনিস" এর আনুমানিক উপস্থাপনা ...