কীভাবে সদৃশ কোড সরানো যায় (সাধারণভাবে)?


10

কোনও ওও ভাষায় (যেমন জাভাতে সীমাবদ্ধ নয়) আপনি কীভাবে এর উপস্থিতিটির সুযোগের ভিত্তিতে সদৃশ কোডটি ঠিক করবেন? আমি দিয়ে শুরু করব (উদাহরণস্বরূপ)

  • একই শ্রেণিতে (স্কোপ) এক্সট্রাক্ট মেথড রিফ্যাক্টরিং (ফিক্স) সম্পাদন করুন
  • একই শ্রেণিবিন্যাস (স্কোপ) এর ক্লাসে এক্সট্রাক্ট পদ্ধতি এবং পুল আপ (ফিক্স) সম্পাদন
  • ...

DRY নীতি বাস্তবায়নের জন্য একটি উদাহরণ দেখুন (নিজেকে পুনরাবৃত্তি করবেন না) এখানে একই শ্রেণীর সাথে: geewwithblogs.net/chrisfalter/archive/2008/03/07/…
NoChance

এসও-তে মূল প্রশ্ন ( স্ট্যাকওভারফ্লো . com / প্রশ্নস / 8073০৯4646//২ ) বন্ধ হয়ে গেছে। সুতরাং আমি এটি এখানে সরানো।
পিটার কোফার

উত্তর:


8

সম্প্রতি আমি চাচা ববের "ক্লিন কোড" এ আমার প্রশ্নের উত্তরের উত্তর পেয়েছি, যা আমি ভাগ করতে চাই। তিনি তিনটি সদৃশকে পৃথক করে

অভিন্ন কোডের টুকরা একক পদ্ধতিতে প্রতিস্থাপন করা উচিত। সুতরাং সমাধানটি পদ্ধতিটি বের করা এবং সাধারণ ব্যবহারের জন্য প্রেরণ করা হবে।

  • একই পদ্ধতিতে, স্থানীয় ভেরিয়েবল এক্সট্রাক্ট করুন এবং এটি পুনরায় ব্যবহার করুন।
  • একই ক্লাসে এক্সট্রাক্ট মেথড রিফ্যাক্টরিং করান।
  • একই শ্রেণিবিন্যাস এক্সট্রাক্ট পদ্ধতির ক্লাসে এবং এটি টানুন। পদ্ধতিগুলির জন্য একটি জায়গা খুঁজে পেতে একটি শ্রেণিবিন্যাস তৈরি করা যেতে পারে।
  • পৃথক শ্রেণিবিন্যাসের ক্লাসে নতুন বস্তুতে প্রতিনিধি ব্যবহার করে।
  • যদি পদ্ধতিগুলিকে কোনও সংলগ্ন রাষ্ট্রের প্রয়োজন না হয়, তবে "লিব" প্যাটার্ন প্রয়োগ করা যেতে পারে (এটি স্ট্যাটিক পদ্ধতিগুলির একটি ধারক, সাধারণত SthUtilবা বলা হয় SthLib)।

ক্ষেত্রে switch/caseএবং if/elseযে সবসময় অবস্থার একই সেট জন্য পরীক্ষার

  • এগুলি পলিমারফিজম দিয়ে প্রতিস্থাপন করা উচিত।

মডিউলগুলি যা অনুরূপ অ্যালগোরিদম প্রয়োগ করে । এগুলি খুঁজে পাওয়া শক্ত, কারণ কোনও ক্লোন ডিটেক্টর তাদের এটির সন্ধান করতে পারে না।

  • সুযোগটি বৃহত্তর হওয়ায় নকশার প্যাটারগুলি ব্যবহৃত হয়। টেমপ্লেট পদ্ধতি নকশার প্যাটার্নটি কোনও শ্রেণিবদ্ধের ভিতরে আলগোরিদিমগুলির জন্য প্রয়োগ করা যেতে পারে।
  • কৌশল ডিজাইনের প্যাটার্নটি যে কোনও অ্যালগরিদমের জন্য প্রয়োগ করা যেতে পারে যা বিভিন্ন জায়গায় ব্যবহৃত হয়।

লাইব্রেরির বিভিন্ন সংস্করণ নিয়ে কাজ করার সময় ওবেদ দ্বারা বর্ণিত একটি বৈধ পয়েন্ট

  • একক সংস্করণে একীভূত করুন। মুখোমুখি নকশা নিদর্শন এখানে সহায়তা করতে পারে।

শেষ পর্যন্ত আমার প্রশ্নের উত্তরের সেরা এক বাক্যটি উত্তেজিত করে:

ওও ভাষাগুলিতে কোড পুনরায় ব্যবহারের পদ্ধতিটি হ'ল অবজেক্ট।


5

সাধারণভাবে - একক জায়গায় ডুপ্লিকেট কোড একীভূত করুন এবং নিশ্চিত করুন যে আসল সদৃশ সাইটটি একীভূত জায়গায় কল করছে।

আপনার উদাহরণগুলিতে, কোনও শ্রেণীর মধ্যে এটি নিষ্ক্রিয় পদ্ধতি এবং ক্লাসগুলির একটি সেটের মধ্যে বেস শ্রেণীর মধ্যে টানা-আপ পদ্ধতি হবে।

অনুলিপি-পেস্ট কোডে, এটি হ'ল সদৃশগুলি মুছে ফেলা হবে এবং নিশ্চিত করা হবে যে কোনও ব্যবহারকারী এখন একক অনুলিপি ব্যবহার করুন (এটি যে স্তরেরই হোক না কেন)।

লাইব্রেরির বিভিন্ন সংস্করণ নিয়ে কাজ করার সময়, একক সংস্করণে সংহত করুন (সম্ভব হলে))


এটি যদি বেস ক্লাসে থাকে তবে "টানা-ডাউন" পদ্ধতিটি কী হবে না? আমি সবসময় অনুশীলন ক্লাসের অধীন শারীরিকভাবে বেস ক্লাস কল্পনা করি।
ডেভ নায়

রিফ্যাক্টরিং বইয়ের যথাযথ নাম "টান আপ" "
পিটার কফলার

1

আমার ধারণা এটি একটি উন্মুক্ত সমাপ্ত প্রশ্ন তবে এটি কোডের স্থিতির উপরও নির্ভর করে। আমি বলতে চাইছি আপনি প্রসঙ্গের উপর নির্ভর করে ডুপ্লিকেট কোডটি কিছুটা সহ্য করতে পারেন। তিনটি বিধি এই বিষয় জন্য ভাল।

তিনটির বিধি প্রথমবার যখন আপনি কিছু করেন, আপনি কেবল এটি করেন। দ্বিতীয়বার যখন আপনি অনুরূপ কিছু করেন, আপনি সদৃশটি দেখতে পেলেন, তবে আপনি নকলটি যাইহোক করুন। তৃতীয় বার আপনি অনুরূপ কিছু করেন, আপনি অশোধক।

যদিও এটি বেশ তর্কযোগ্য তবুও এই পোস্টটি এমন ক্ষেত্রে বিবেচনা করে যেখানে আপনি নকল কোড সহ্য করবেন।


1
"তিনটির নিয়ম" সম্পর্কে +1। আমি এটি সর্বদা বিস্তৃতভাবে প্রয়োগ করে বিস্মিত হই applicable
অ্যান্ডি আমের

1
এটি কীভাবে প্রশ্নের উত্তর দেয় না ।
জান ডোগজেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.