কোড কাপলিং DRY এবং OOD দ্বারা পরিচয় করিয়ে দেয়


14

আমি ডিআরওয়াই বনাম কোড সংযোগ সম্পর্কে গাইডেন্স খুঁজছি। আমি আমার কোডটি সদৃশ করতে পছন্দ করি না এবং আমি সম্পর্কহীন মডিউলগুলির মধ্যে কোড সংযোগগুলিও পছন্দ করি না। সুতরাং আমি সদৃশ কোড নকল কোড যদি আমি অনুরূপ ডুপ্লিকেট চালু করার এক বছর পরে কোড অনুরূপ খুঁজে পাই। যাইহোক, আমি ক্রমবর্ধমান পরিস্থিতিগুলির অভিজ্ঞতা পেয়েছি যেখানে সত্যিকারের বিশ্বটি অনেক বেশি অনাকাঙ্ক্ষিত এবং কোডটি রিফ্যাক্ট করার পরে এমন পরিস্থিতি তৈরি হয় যার জন্য কোডটি আবার বের করে দেওয়া দরকার।

উদাহরণস্বরূপ, যদি আমার পেট্রল গাড়ি, পেট্রল এসইউভি, বৈদ্যুতিন গাড়ি এবং বৈদ্যুতিক এসইউভি হ্যান্ডেল করার কোড থাকে তবে আমি বলতে পারি যে আমি "পেট্রোল" শ্রেণিবিন্যাস এবং "বৈদ্যুতিক" শ্রেণিবিন্যাসে নকল কোডটি রিফ্যাক্টর করেছি, উভয়ই "যানবাহন" স্তরক্রম থেকে নেমে এসেছি। এ পর্যন্ত সব ঠিকই. এবং তারপরে, আমার সংস্থা একটি হাইব্রিড গাড়ি এবং একটি হাইব্রিড সেমির সাথে পরিচয় করিয়ে দেয় - এটির জন্য আমার মূল স্তরক্রমের নিজেই মূল পরিবর্তন প্রয়োজন। সম্ভবত এটির জন্য পেট্রোল এবং বৈদ্যুতিক শ্রেণিবিন্যাসের মধ্যে "রচনা" লাগবে।

স্পষ্টতই কোড সদৃশটি খারাপ কারণ এটি উপরের সমস্ত পণ্যগুলিতে সাধারণ একটি পরিবর্তন বাস্তবায়নে গ্রহণ করা সময়কে বাড়িয়ে তোলে। তবে প্রচলিত কোডটিকে রিফ্যাকচারিং পণ্য-নির্দিষ্ট বৈচিত্রগুলি প্রবর্তন করা সমানভাবে শক্ত করে তোলে এবং যখন কোনও বাগ সমাধানের জন্য কোডের লাইনটি খুঁজে পেতে হয় তখন অনেকগুলি "শ্রেণি-জাম্পিং" বাড়ে - উচ্চ স্তরের অভিভাবক শ্রেণিতে একটি পরিবর্তন হতে পারে সমস্ত বংশধরদের মধ্যে ট্রিগার রিগ্রেশন বাগগুলি ট্রিগার করুন।

কীভাবে একজন ডিআরওয়াই বনাম অবাঞ্ছিত কোড সংযোগের মধ্যে একটি সর্বোচ্চ ভারসাম্য বজায় রাখে?


1
নিয়মকে অন্ধভাবে অনুসরণ না করা কিন্তু মস্তিষ্ককে প্রথমে জড়িয়ে রাখা ভাল good
gnasher729

যথেষ্ট ন্যায্য - সুতরাং নির্দেশিকা, বিধি নয়।
ব্যবহারকারী 2549686

আপনি কি ডিআরওয়াইতে উইকি পৃষ্ঠাটি পড়েছেন (বা OAOO, এটি যেভাবে বলা হত)? wiki.c2.com/?OnceAndOnlyOnce সেখানেই এটি নিয়ে প্রাথমিক আলোচনা অনেক হয়েছিল। (প্রকৃতপক্ষে, ওয়ার্ড বিশেষভাবে প্যাটার্নস এবং অনুশীলনগুলি সম্পর্কে আলোচনার জন্য উইকির উদ্ভাবন করেছিল।)
জার্গ ডব্লু মিত্তাগ

খুব সম্পর্কিত উত্তর, এমনকি যদি প্রশ্নটি সদৃশটির মতো পুরোপুরি না শোনায়: সফ্টওয়্যারেনজেনারিং.স্ট্যাকেক্সেক্সঞ্জ
হাল্ক

উত্তর:


8

আসুন আমি বলি যে আমি "পেট্রোল" শ্রেণিবিন্যাস এবং "বৈদ্যুতিন" শ্রেণিবিন্যাসে নকল কোডটি রিফ্যাক্টর করেছি, উভয়ই "যানবাহন" শ্রেণিবদ্ধ থেকে নেমে এসেছি। এ পর্যন্ত সব ঠিকই.

এবং তারপরে, আমার সংস্থা একটি হাইব্রিড গাড়ি এবং একটি হাইব্রিড সেমির সাথে পরিচয় করিয়ে দেয় - এটির জন্য আমার মূল স্তরক্রমের নিজেই মূল পরিবর্তন প্রয়োজন। সম্ভবত এটির জন্য পেট্রোল এবং বৈদ্যুতিক শ্রেণিবিন্যাসের মধ্যে "রচনা" লাগবে

আমি মনে করি যে এটি উত্তরাধিকারের চেয়ে রচনার দিকে এগিয়ে যাওয়ার অন্যতম প্রধান কারণ।

বংশানুক্রমিকতা আপনাকে বর্ণনা করার মতো ধারণাগত পরিবর্তন এলে আপনাকে বৃহত পুনর্গঠনে বাধ্য করে।

পুনর্গঠনটি যখন 'খুব বড় / শক্ত' হয় তখন লোকেরা এড়াতে সদৃশ কোডটি লেখেন।

কোডটি উত্তরাধিকার শৃঙ্খলে সরিয়ে নিয়ে ডুপ্লিকেটটি রিমোট করার পরিবর্তে আপনি এটিকে কোনও সহায়ক শ্রেণি বা পরিষেবাতে স্থানান্তরিত করতে পারেন এবং তারপরে প্রয়োজনীয় শ্রেণীর কোনও সংস্থার অংশ হিসাবে সেই শ্রেণিকে ইনজেক্ট করতে পারেন।

ফলাফল নকশা OOP কিনা তা বিতর্কের জন্য উন্মুক্ত


1
উত্তরাধিকার সূত্রপাত করার জন্য +1 হ'ল ডিআরওয়াই নয়। কোডটির পুনরায় ব্যবহারের সহজতম উপায় হ'ল অপ্রয়োজনীয় নির্ভরতা অপসারণ এবং খুব সহজেই লোকেরা এই সত্যটি মিস করে যে উত্তরাধিকার ব্যবহারের সময় পিতামাতা শ্রেণি (এবং এটির বংশধর) সমস্ত নির্ভরতা। আপনি যখন নির্ভরতা হ্রাস বা নির্মূল করেন কেবল তখনই আপনি আসলে পুনরায় ব্যবহারযোগ্য কোড পান।
গ্রেগ বার্গার্ড্ট

3
" ফলাফলের নকশাটি ওওপি কিনা তা বিতর্কের জন্য উন্মুক্ত "। বিতর্ক করার জন্য সবকিছু উন্মুক্ত। জিজ্ঞাসা করার প্রশ্নটি হল, এটি কি বুদ্ধিমান, যুক্তিযুক্ত বিতর্কের জন্য উন্মুক্ত? উত্তর না হয়। আমি মনে করি আপনার শেষ অনুচ্ছেদটি অন্যথায় খুব ভাল উত্তর থেকে বিচ্ছিন্ন।
ডেভিড আরনো

@ ডেভিডর্নো সত্যিই আপনাকে অনুসরণ করবেন না, আমি ওবডিকে ওরিয়েন্টেটেড ডিজাইন হিসাবে শিরোনামে পড়ি? সুতরাং আমি বিতর্ককে ফাঁকা না দিয়ে প্রশ্নটির সমাধান করছি
ইওয়ান

1
@ ইভান: আমি এখানে ডেভিড আরনোর সাথে আছি। আমি মনে করি এটি 2 দশকেরও বেশি সময় ধরে সুপরিচিত যে বিশ্বাসীরা "যদি কোনও উত্তরাধিকার না থাকে তবে এটি ওওপি হয় না" একটি মিথ্যাবাদ।
ডক ব্রাউন

জিৎ হ'ল আমি এ জাতীয় আলোচনাটি এড়াতে চাইছিলাম। উভয় পক্ষের মতামত রয়েছে, এর কোনও সঠিক উত্তর নেই
ইওয়ান

3

আপনি সঠিক, DRY নীতি অনুসরণ করে অন্যথায় সম্পর্কযুক্ত মডিউলগুলির মধ্যে সংযোগ বাড়িয়ে তুলতে পারেন। বিশেষত বৃহত্তর সফ্টওয়্যার সিস্টেমে এটি এমন পরিস্থিতিতে ডেকে আনতে পারে যেখানে ডিআরওয়াই অনুসরণ না করা আরও ভাল বিকল্প হতে পারে।

দুর্ভাগ্যক্রমে, আপনার উদাহরণ এটি প্রদর্শনের পক্ষে যথাযথ নয় - উত্তরাধিকারের ভুল suboptimal ব্যবহারের ক্ষেত্রে শাস্ত্রীয় ত্রুটির কারণে সেখানে বর্ণিত সমস্যাগুলি দেখা দেয় । যাইহোক, আমি উপরে যা লিখেছি তার জন্য, আপনি সাধারণ বেস শ্রেণিতে সাধারণ কোডটি রিফ্যাক্টর করে না বা সহায়ক শ্রেণিতে (রচনা) কিছু যায় আসে না। উভয় ক্ষেত্রেই, একজনকে সাধারণ কোডটি একটি লাইব্রেরি এল-এ স্থাপন করতে বাধ্য করা যেতে পারে এবং সেই দুটি লাইব্রেরি উল্লেখ করা হয় যা পূর্ববর্তী দুটি সম্পর্কযুক্ত প্রোগ্রাম এ এবং বি থেকে রয়েছে library

আসুন ধরে নেওয়া যাক আগে এবং এ বি সম্পূর্ণরূপে সম্পর্কিত ছিল না, সেগুলি সংস্করণ করা, প্রকাশ এবং স্বাধীনভাবে স্থাপন করা যেতে পারে। সাধারণ কোডটি একটি ভাগ করা লিবিলে রেখে, তবে, এ-র জন্য নতুন প্রয়োজনীয়তা এল-এ পরিবর্তিত হতে পারে, যা এখন বি-তে পরিবর্তিত হতে পারে, সুতরাং এটি অতিরিক্ত পরীক্ষার প্রয়োজনীয়তা এবং সম্ভবত বিয়ের জন্য একটি নতুন মুক্তি এবং চক্র মোতায়েন করে causes

সুতরাং আপনি কীভাবে এই পরিস্থিতি সামাল দিতে পারবেন, যদি আপনি ডিআরওয়াই নীতিটি থেকে সরে যেতে রাজি না হন? ঠিক আছে, এখানে যোগাযোগের জন্য কিছু সুপরিচিত কৌশল রয়েছে:

  1. হয় একই পণ্যটির অংশ হিসাবে এ, বি এবং এল রাখুন, একটি সাধারণ সংস্করণ নম্বর, একটি সাধারণ বিল্ড, মুক্তি এবং উচ্চতর ডিগ্রি অটোমেশন সহ প্রক্রিয়াকরণ স্থাপন

  2. বা এলকে ছোট আকারের সংস্করণ সংখ্যাগুলি (কোনও বেমানান পরিবর্তন নয়) এবং প্রধান সংস্করণ সংখ্যাগুলি (সম্ভবত ব্রেকিং পরিবর্তনগুলি রয়েছে) দিয়ে একটি পণ্য তৈরি করুন এবং এ এবং বি প্রত্যেককেই এল এর আলাদা সংস্করণ লাইনের রেফারেন্স দেওয়ার অনুমতি দিন let

  3. L যতটা সম্ভব সলিউড করুন এবং পিছনের সামঞ্জস্যের যত্ন নিন। L এ যত বেশি মডিউলগুলি পরিবর্তন (ওসিপি) ছাড়াই পুনরায় ব্যবহার করা যায়, তত কম ব্রেকিং পরিবর্তন হবে। এবং "সলাইড" এর অন্যান্য নীতিগুলি সেই লক্ষ্যটিকে সমর্থন করতে সহায়তা করছে।

  4. বিশেষত এল, তবে এ এবং বি এর জন্য স্বয়ংক্রিয় পরীক্ষাগুলি ব্যবহার করুন

  5. আপনি এল। ব্যবসায়িক যুক্তিতে যা রেখেছেন সে বিষয়ে সতর্ক থাকুন যা ভাল সিস্টেমে কেবলমাত্র এক জায়গায় থাকতে পারে। যে বিষয়গুলি কেবল "অভিন্ন দেখায়" এবং ভবিষ্যতে আলাদা হতে পারে তা খারাপ প্রার্থীরা।

নোট করুন যখন এ এবং বি বিভিন্ন, সম্পর্কিত সম্পর্কহীন দলগুলির দ্বারা বিকাশ, রক্ষণাবেক্ষণ এবং বিবর্তিত হয়, তখন DRY নীতিটি বেশ কম গুরুত্বপূর্ণ হয়ে যায় - ডিআরওয়াই রক্ষণাবেক্ষণযোগ্যতা এবং বিকাশযোগ্যতা সম্পর্কিত, তবে দুটি পৃথক দলকে ব্যক্তিগত রক্ষণাবেক্ষণের প্রচেষ্টা প্রদান করা তাদের পণ্যগুলি বেঁধে দেওয়ার চেয়ে কখনও কখনও আরও কার্যকর হতে পারে একসাথে কিছুটা পুনঃব্যবহারের কারণে।

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


1

ডিআরওয়াই আরেকটি কাঠামোগত নিয়ম। এর অর্থ আপনি যদি এটিকে চূড়ান্ত করে তোলেন তবে এটিকে ততটা খারাপ আপনি এড়িয়ে যাচ্ছেন। কাঠামোগত মন সেট থেকে আপনাকে বের করার জন্য এখানে একটি রূপক's

আপনার যমজ সন্তুষ্ট। ক্লোনগুলি মেরে ফেলুন।

কীবোর্ড টাইপিং এড়ানোর জন্য আপনি অন্ধভাবে অনুলিপি করুন এবং পেস্ট করবেন যখন আপনি নির্বোধভাবে ক্লোন তৈরি করছেন। নিশ্চিত যে তারা আপনার যা চায় তা করে তবে তারা আপনাকে ভারী করে তোলে কারণ এখন আচরণ পরিবর্তন করা এত ব্যয়বহুল।

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

আপনি নিজের পছন্দ মতো তাদের ডিএনএ (কোড) স্ক্যান করতে পারেন। ক্লোন এবং যমজদের আলাদা করা শক্ত নয় আপনি যা কিছু করেন সেগুলি এগুলি দেখলে। আপনার যা প্রয়োজন তা হ'ল তারা যে প্রসঙ্গে থাকেন সেগুলি বোঝা they কেন তারা জন্মগ্রহণ করেছিল। তাদের চূড়ান্ত ভাগ্য কি হতে পারে সম্ভবত।

ধরা যাক আপনি সংস্থা এবিসির পক্ষে কাজ করেন। এটি তিনটি সংস্থা এক্স, এক্স, বি এবং সি দ্বারা পরিচালিত রয়েছে তারা সকলেই আপনাকে একটি সফ্টওয়্যার পণ্য তৈরি করতে চায় তবে তাদের প্রত্যেকের নিজস্ব বিভাগ রয়েছে। তারা সবাই চায় আপনি ছোট শুরু করুন। আপাতত একটি সাধারণ বার্তা আউটপুট। সুতরাং আপনি "হ্যালো ওয়ার্ল্ড" লিখুন।

এ এটি ঘৃণা করে, আপনি সেখানে কোম্পানির নাম রাখতে চান।

বি এটি পছন্দ করে, আপনি এটিকে একা ছেড়ে দিতে চান এবং সংস্থার নামটি একটি স্প্ল্যাশ স্ক্রিনে যুক্ত করুন।

সি কেবল একটি ক্যালকুলেটর চায় এবং ভেবেছিল যে বার্তাটি আপনার শুরু করার এক উপায় way

আপনি নিশ্চিত যে একটি জিনিস, এই ছেলেদের এই প্রকল্পটি সম্পর্কে খুব আলাদা ধারণা আছে। কখনও কখনও তারা একমত হতে চলেছেন। কখনও কখনও তারা আপনাকে বিভিন্ন দিকে টানতে চলেছে।

আপনি যখন কোডটির সদৃশ হন কারণ আপনি সেই কোডটির স্বতন্ত্রভাবে আলাদা হওয়ার ক্ষমতা তৈরি করছেন আপনি একটি যমজ তৈরি করছেন। আপনি যখন কোডটিকে নকল করেন কারণ টাইপ করা একটি ব্যথা এবং অনুলিপি এবং পেস্ট করা সহজ আপনি খারাপ ক্লোন তৈরি করছেন।

এ, বি এবং সি বিভিন্ন মাস্টার যা আপনার কোড অবশ্যই পরিবেশন করবে। কোডের কোনও একটি লাইন দীর্ঘকাল একাধিক মাস্টার পরিবেশন করতে পারে না।


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