নতুন ভাষা নির্মাণের জন্য পুরানো কোডটি আপডেট করা উচিত, অথবা পুরানো কনস্ট্রাক্টগুলি আটকে থাকা উচিত?


15

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

আমি কি:

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

1
@ জেরি কফিন আমি মন্তব্যে তর্ক করতে যাচ্ছি না: আমি মেটাতে পোস্ট করেছিলাম যেখানে আমাদের সঠিক আলোচনা হতে পারে।

উত্তর:


10

এই প্রশ্নের সুনির্দিষ্ট উত্তর দেওয়া অসম্ভব, কারণ এটি পরিস্থিতির বিবরণের উপর খুব বেশি নির্ভর করে।

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

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

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


1
আমি আংশিকভাবে একমত। আমাদের খোলা কাছের নীতি অনুসরণ করা উচিত। সুতরাং আমাদের নতুন কোডটি যতটা সম্ভব বিচ্ছিন্ন করার চেষ্টা করা উচিত এবং একই সাথে সর্বশেষতম ভাষা নির্মাণের সাথে নতুন কোডটি লিখতে হবে।
আনন্দ বৈদ্য

3
@ আনন্দবৈদ্য: এটি আইএমএইচওও একটি অবাস্তব প্রত্যাশা, যেহেতু এটি ধরে নিয়েছে যে পুরাতন কোডটি ওসিপি অনুসরণ করে বা সহজেই ওসিপি অনুসরণ করতে পারে, যা খুব কম ক্ষেত্রেই হয় বা চেষ্টা করার মতো মূল্যহীন।
ডক ব্রাউন

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

2
@ আনন্দ বৈদ্য: আপনি যখন ওসিপি বলতে চান না তখন আপনার এটিকে বলা উচিত নয়। আমি অনুমান করি যে আপনি কী বলতে চাইছেন তা হ'ল ফেদারের কলগুলি একটি স্প্রাউট পদ্ধতিতে নতুন কোড লিখছে , যাতে কেউ নতুন কোড স্টাইলকে একটি নতুন, পৃথক পদ্ধতিতে সীমাবদ্ধ করতে পারে। যখন এটি সম্ভব এবং বুদ্ধিমান হয়, আপনি সঠিক, এটি ঠিক আছে। দুর্ভাগ্যক্রমে এই পদ্ধতিটি সর্বদা প্রযোজ্য নয়, যদি আপনি পুরানো কোড ডিআরওয়াই রাখতে চান তবে তা নয় not
ডক ব্রাউন

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

5

অনেকাংশে, কোড এবং এটি কীভাবে দেখায় তা অপ্রাসঙ্গিক । কি কোড আছে কি গুরুত্বপূর্ণ।

আপনি যদি গ্যারান্টি দিতে পারেন যে কোডটি পরিবর্তন / পুনর্লিখন কোডটি কী করে তা পরিবর্তন করে না, তবে আপনি এগিয়ে যেতে পারেন এবং কোডটিকে আপনার হৃদয়ের সামগ্রীতে রিফেক্টর করতে পারেন। এই "গ্যারান্টি" হ'ল ইউনিট পরীক্ষার একটি সম্পূর্ণ সেট যা আপনি আপনার পরিবর্তনগুলির আগে এবং পরে চালাতে পারবেন, কোনও উপলব্ধিযোগ্য পার্থক্য ছাড়াই।

যদি আপনি সেই স্থায়িত্বের গ্যারান্টি দিতে না পারেন (আপনি সেই পরীক্ষাগুলি পান নি) তবে এটি ভালভাবে ছেড়ে দিন।

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

অবশ্যই, আপনাকে এই জাতীয় অনুশীলনের জন্য প্রস্তুতিতে এই জাতীয় পরীক্ষার সেট তৈরি করা থামানোর কিছু নেই ...


4

ব্যয় এবং বেনিফিটের ক্ষেত্রে প্রায় কোনও কিছুর বিশ্লেষণ করা যায় এবং আমি মনে করি এটি এখানে প্রযোজ্য।

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

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

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

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

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

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

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

অন্য দিকে, এমনকি এটি ছোট এবং বিচ্ছিন্ন শুরু হওয়ার পরেও, কোনও ইউজার ইন্টারফেসে পরিবর্তনের বেলুনের প্রবণতা রয়েছে, সুতরাং "এই স্ক্রিনে একটি নতুন চেক বাক্স যুক্ত করুন" হিসাবে শুরু হওয়াটা আরও শেষ হতে পারে: "এই স্থির UI পরিবর্তন করুন ব্যবহারকারী-সংজ্ঞায়িত টেম্পলেটগুলি, কাস্টম ক্ষেত্রগুলি, কাস্টমাইজড রঙের স্কিমগুলি, ইত্যাদি সমর্থন করার জন্য ""

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


1

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

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


1

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

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

সংক্ষিপ্তসার হিসাবে: আপনার চূড়ান্ত সিদ্ধান্তটি আপনার বিশেষ ক্ষেত্রে 'ব্যয়' / 'বেনিফিট' বিশ্লেষণের ভিত্তিতে হওয়া উচিত।

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