DRY নীতি লঙ্ঘন


10

আমি নিশ্চিত যে কোথাও এই অ্যান্টি-প্যাটার্নের নাম আছে; তবে এটিকে জানার জন্য আমি অ্যান্টি-প্যাটার্ন সাহিত্যের সাথে যথেষ্ট পরিচিত নই।

নিম্নলিখিত পরিস্থিতিতে বিবেচনা করুন:

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

বেশ কয়েকটি প্রোগ্রামার বজায় রাখে or0তাই এটি এখন সংস্করণ orNc0এখন সংস্করণ cN। দুর্ভাগ্যক্রমে বেশিরভাগ প্রোগ্রামার যে ক্লাসটি ধারণ করে রক্ষা করেছিল or0তা সম্পূর্ণ অজানা বলে c0মনে হয়েছিল - DRY নীতিটির জ্ঞানের জন্য আমি যে দৃ for়তম যুক্তি বিবেচনা করতে পারি তার মধ্যে এটি অন্যতম। এবং কোডটিতে স্বতন্ত্র রক্ষণাবেক্ষণও থাকতে পারে c। যেভাবেই এটি প্রদর্শিত হয় or0এবং c0একে অপরের থেকে স্বতন্ত্র বজায় রাখা হয়েছিল। এবং, আনন্দ এবং সুখ, একটি ত্রুটি ঘটছে cNযা ঘটে না orN

সুতরাং আমার কয়েকটি প্রশ্ন আছে:

১) এই অ্যান্টি-প্যাটার্নটির কোনও নাম আছে? আমি প্রায়শই এটি ঘটতে দেখেছি এটি বিশ্বাস করা আমার পক্ষে কঠিন মনে হয় এটি কোনও নামী বিরোধী ধাঁচ নয়।

২) আমি কয়েকটি বিকল্প দেখতে পাচ্ছি:

ক।) orNএমন একটি প্যারামিটার নেওয়ার জন্য স্থির করুন যা তার প্রয়োজনীয় সমস্ত সদস্যের ভেরিয়েবলের মান নির্দিষ্ট করে। তারপরে পাস হওয়া প্রয়োজনীয় সমস্ত প্যারামিটারের সাথে cNকল করতে সংশোধন করুন orN

খ।) থেকে ম্যানুয়ালি বন্দর সংশোধন করা হয়েছে চেষ্টা orNকরতে cN। (মনে মনে আমি এটি করতে চাই না তবে এটি একটি বাস্তব সম্ভাবনা))

সি।) - অগেইন orN, cNইয়াকের পুনরায় কপি করুন তবে আমি সম্পূর্ণতার জন্য এটি তালিকাভুক্ত করছি।

ডি।) কোথায় cNভাঙ্গা আছে তা বের করার চেষ্টা করুন এবং তারপরে এটি স্বাধীনভাবে মেরামত করুন orN

বিকল্প একটি দীর্ঘমেয়াদে সেরা ফিক্সের মতো মনে হয় তবে আমি সন্দেহ করি যে গ্রাহক আমাকে এটি বাস্তবায়ন করতে দেবে। কখনই সময় বা অর্থ জিনিস ঠিক করার জন্য নয় তবে একই সমস্যাটি 40 বা 50 বার মেরামত করতে সময় এবং অর্থ সর্বদা, তাই না?

আমি বিবেচনা না করে থাকতে পারে এমন অন্য পদ্ধতির পরামর্শ কি কেউ দিতে পারেন?


"এই অ্যান্টি-প্যাটার্নটির কোনও নাম আছে?" 'লঙ্ঘন-শুকনো' অ্যান্টি-প্যাটার্ন? :) আপনি নিজেকে বেশ উত্তর দিয়েছেন।
স্টিভেন জিউরিস

এটাকে কি "দ্য ড্রাই ভাইওলেটর" বলবেন?
হতাশ

2
আমি এটাকে ডাকি: DRY bumping।
এজেসি

5
কোডিং কপি করে পেস্ট করবেন?
টাইলারম্যাক

একে বলা হয় "অনেকগুলি রান্না ব্রোথ নষ্ট করে দেয়" প্যাটার্ন।
ডক ব্রাউন

উত্তর:


18
  1. এটিকে কেবল সদৃশ কোড বলা হয় - এর জন্য আর কোনও অভিনব নাম আমি জানি না। দীর্ঘমেয়াদী পরিণতিগুলি আপনি বর্ণিত হিসাবে এবং আরও খারাপ।

  2. অবশ্যই, যদি সম্ভব হয় তবে সদৃশ অপসারণ একটি আদর্শ বিকল্প। এটি অনেক সময় নিতে পারে (আমাদের উত্তরাধিকার প্রকল্পের সাম্প্রতিক ক্ষেত্রে, আমার একটি শ্রেণীর শ্রেণিবিন্যাসে 20 টিরও অধিক সাবক্ল্যাসে নকল করা বেশ কয়েকটি পদ্ধতি ছিল, যার মধ্যে অনেকগুলিই বছরের পর বছর ধরে বিবর্তনীয়ভাবে নিজের সামান্য পার্থক্য / এক্সটেনশনগুলি বৃদ্ধি পেয়েছিল It সমস্ত অনুলিপি থেকে মুক্তি পেতে পরপর ইউনিট পরীক্ষা লেখার এবং রিফ্যাক্টরিংয়ের মাধ্যমে আমার প্রায় 1,5 বছর। অধ্যবসায় যদিও এটি মূল্যবান ছিল)।

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

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


3
+1, কেবলমাত্র ডুপ্লিকেট কোড উল্লেখ করার জন্য নয়, তবে কোড রিফ্যাক্টরিংয়ের গল্পের সাথে জড়িত নিরলস প্রচেষ্টার জন্য। : ডি
আন্দ্রেস জোহানসন

9

ডব্লিউইটি (আমরা টাইপিং উপভোগ করি) প্যাটার্নের একটি উল্লেখ রয়েছে তবে এটি মানক নাম কিনা তা আমি জানি না।

... সফটওয়্যার লাইসেন্সিং ডিআরওয়াই (নিজেকে পুনরাবৃত্তি করবেন না) অনুশীলনের একটি উল্লেখযোগ্য ব্যতিক্রম - সফ্টওয়্যার লাইসেন্সিং কোডটি যতটা সম্ভব WET (আমরা টাইপিং উপভোগ করি - ডিআরওয়ির বিপরীতে) হওয়া উচিত।

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

উদাহরণস্বরূপ, আমরা আপনাকে পরামর্শ দিই যে আপনি ইনস্টলেশন চলাকালীন, অ্যাপ্লিকেশন শুরুর সময় এবং যখনই গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি অ্যাক্সেস করা হয় তখন লাইসেন্সিং চেক করেন। প্রারম্ভকালে একবার লাইসেন্স পরীক্ষা করবেন না এবং সেই মানটি পাস করুন; পরিবর্তে, প্রতিটি এলাকায় লাইসেন্স চেক প্রতিলিপি। এটি অসুবিধাজনক, তবে ক্র্যাক করা সহজ এমন পণ্য প্রকাশের চেয়ে আরও ভাল ...



1
@ স্টুপারউজার আমি গতকাল দৈনিকআউটিএফ-তে আবিষ্কার করেছি ...
জেরেমি-

3

আমি যদি আপনাকে সঠিকভাবে বুঝতে পারি তবে ক্লাসে অনেক কিছু চলছে। এটি এমন পদ্ধতি তৈরি করে যা একক দায়িত্বের নীতি অনুসরণ করে না । কোডে নেতৃত্ব দেওয়া হচ্ছে যার চারদিকে সরানো দরকার, টুকরো টুকরো করা হয়েছে যখন অন্যরা বাদ পড়েছে। এটি অনেক সদস্য তৈরি করতে পারে।

আপনার অ্যাক্সেসযোগ্যতা সংশোধকগুলিও পর্যালোচনা করা উচিত। নিশ্চিত করুন যে সেই জিনিসগুলি সর্বজনীন, আসলে জনসাধারণের উচিত। গ্রাহককে প্রতিটি ছোট সদস্যের সম্পর্কে জানতে হবে না ... এনক্যাপসুলেশন ব্যবহার করুন।

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


3

আপনি যদি কোডটি অনুলিপি করছেন, আপনি ডাবল রক্ষণাবেক্ষণের জন্য একটি প্রযুক্তিগত debt বা আরও সুনির্দিষ্টভাবে উল্লেখ করবেন: কোড নকল

সাধারণত এটি রিফ্যাক্টরিংয়ের মাধ্যমে স্থির হয়। আরও সুনির্দিষ্টভাবে আপনি সমস্ত কলগুলি একটি নতুন ফাংশনে (বা একটি নতুন শ্রেণিতে একটি নতুন পদ্ধতি) যা সাধারণ কোড রয়েছে সেগুলিতে পুনঃনির্দেশ করুন। শুরু করার সবচেয়ে সহজ উপায় হ'ল সমস্ত অনুলিপি করা কোড সরিয়ে নেওয়া এবং কোনটি ব্রেক হয় তা দেখে আপনি কলগুলিকে সাধারণ কোডে পুনঃনির্দেশিত করে ঠিক করেন।

অ-প্রযুক্তিগত ব্যক্তিকে একটি প্রযুক্তিগত debtণ নির্ধারণের জন্য বোঝানো কঠিন বলে আপনার গ্রাহককে অ্যাক্টিকর কোডে সম্মতি জানানো কঠিন হতে পারে। পরবর্তী সময় আপনি সময় অনুমান দেওয়ার সময়, আপনার অনুমানের রিফ্যাক্টর নিতে সময় সময় অন্তর্ভুক্ত করুন । গ্রাহকরা বেশিরভাগ সময় ধরে নেন যে আপনি ঠিক করার সময় আপনি কোডটি পরিষ্কার করছেন।


1

আমার কাছে স্প্যাগেটি কোডের মতো শোনাচ্ছে । সেরা ফিক্সটি একটি রিফ্যাক্টর / পুনর্লিখন।

জটিল কোড এবং জটযুক্ত নিয়ন্ত্রণ কাঠামো রয়েছে এমন উত্স কোডের জন্য একটি ছদ্মবেশী শব্দ, বিশেষত একাধিক GOTO, ব্যতিক্রম, থ্রেড বা অন্যান্য "কাঠামোগত" ব্রাঞ্চিং কনস্ট্রাক্ট ব্যবহার করে। এটি এর নামকরণ করা হয়েছে কারণ প্রোগ্রাম প্রবাহটি ধারণাগতভাবে স্প্যাগেটির বাটির মতো, যেমনটি বাঁকানো এবং জটলা ...

http://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Spaghetti.jpg/175px-Spaghetti.jpg


-1 রিফ্যাক্টর এবং পুনর্লিখন দুটি খুব ভিন্ন বিকল্প। মোট পুনর্লিখনগুলি, সফ্টওয়্যারটি ফেলে দেওয়া কখনই ভাল ধারণা নয়। joelonsoftware.com/articles/fog000000000069.html
পি.ব্রায়ান.ম্যাকি

1
স্প্যাগেটি কোডটি আইএমও অনেক বেশি সাধারণ - এবং আলগা - শব্দ। যদিও এই জাতীয় কোডটিতে প্রায়শই দ্বৈতকরণ থাকে, তবে আপনার কোনও অনুলিপি ছাড়াই স্প্যাগেটি কোড থাকতে পারে এবং উচ্চ নকল করা তবে স্প্যাগেটি কোড নয়।
প্যাটার তারেক

@ পি ব্রায়ান.ম্যাকি আমি কখনও বলিনি যে রিফ্যাক্টর এবং পুনর্লিখন একই জিনিস were কোনটি ব্যবহার করবেন তা ওপির সিদ্ধান্ত নেওয়া উচিত।
টম স্কোয়ায়ার্স

2
আমি কখনই সেই নিবন্ধটির অনুরাগী হইনি। আমি সম্মত হলাম যে উদ্ধৃত হওয়া উদাহরণটিতে পুনর্লিখনটি একটি খারাপ ধারণা ছিল, তবে কেবলমাত্র সেই কারণেই এটি একটি খারাপ ধারণা ছিল এর অর্থ এটি সর্বদা একটি খারাপ ধারণা নয়। নতুনদের জন্য, পুনর্লিখনটি কি অন্য কোনও অগ্রগতি অবরুদ্ধ করবে? যদি তা হয় তবে তা খারাপ; যদি না হয়, তবে তা ঠিক ততটা খারাপ নয়।
12:25

@ ঝোকিং - আমি বিশ্বাস করি যে নো-রাইটার পলিসিটির মূল বিষয়টি অন্যান্য প্রোগ্রামগুলিতে অগ্রগতি অবরুদ্ধ করার নয়, বরং সময়ের সাথে সাথে বাস্তব সংশোধন হ'ল। এই যাদুকরী "যদি (সোনারনুগেট> 22)" খারাপ নামকরণ করা হয়েছে, এখনও একটি নির্দিষ্ট সমস্যা সমাধান করে যা ঘন্টা বা দিন গবেষণা না করে সনাক্ত করা অসম্ভব হতে পারে। এখন, একই ডেটা নেওয়া এবং এটির উন্নতি হ'ল পরিবর্তে যা করা উচিত। এটি একটি চুল্লী। এটি ফেলে দেওয়া এবং "আমরা ঠিক পরের বার এটি করব" বলে সময় নষ্ট করা। ইতিমধ্যে সমস্যার সমাধান করা একই কারণে সময় নষ্ট করা। খারাপের শীর্ষে ভাল কোড যুক্ত করা debt

0

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

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

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


-3

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

ভাগ করা আচরণ কী এবং এর ভাগ কীভাবে হয় তার উপর নির্ভর করে এটিকে শটগান সার্জারি বলা যেতে পারে , পার্থক্যটি হ'ল এখানে একটি একক যৌক্তিক বৈশিষ্ট্যটি এককটির চেয়ে অনেকগুলি শ্রেণীর দ্বারা সরবরাহ করা হয়েছে।


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