11000 লাইনের সি ++ উত্স ফাইল সম্পর্কে কী করবেন?


229

সুতরাং আমাদের প্রকল্পে এই বিশাল (11000 লাইন বিশাল?) মেনমডিউল.পিপি উত্স ফাইলটি রয়েছে এবং প্রতিবারই আমি এটি স্পর্শ করতে চাই আমি ক্রিঞ্জ করি।

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

ফাইলটি ব্যবহার করা হয়েছে এবং আমাদের পণ্যের বেশ কয়েকটি (> 10) রক্ষণাবেক্ষণ সংস্করণে সক্রিয়ভাবে পরিবর্তিত হয়েছে এবং তাই এটি রিফ্যাক্টর করা সত্যিই শক্ত। যদি আমি এটিকে "কেবল" বিভক্ত করে তুলি, 3 টি ফাইলে শুরু করার জন্য বলি, তবে রক্ষণাবেক্ষণ সংস্করণ থেকে পরিবর্তনগুলি একত্রিত করা একটি দুঃস্বপ্ন হয়ে যাবে। এবং আপনি যদি এত দীর্ঘ এবং সমৃদ্ধ ইতিহাসের সাথে কোনও ফাইল বিভক্ত করেন তবে SCCইতিহাসের পুরানো পরিবর্তনগুলি সন্ধান এবং পরীক্ষা করা হঠাৎ করে আরও শক্ত হয়ে যায়।

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

এই পরিস্থিতিতে আপনি কি করবেন? SCCওয়ার্কফ্লো গণ্ডগোল না করে কীভাবে নতুন বৈশিষ্ট্যগুলিকে আলাদা উত্স ফাইলে স্থানান্তরিত করবেন সে সম্পর্কে কোনও ধারণা ?

(সরঞ্জামগুলিতে দ্রষ্টব্য: আমরা এর সাথে সি ++ Visual Studioব্যবহার করি ; আমরা AccuRevযেমন ব্যবহার SCCকরি তবে আমি মনে করি যে SCCএখানে প্রকৃতপক্ষে কোন গুরুত্ব আসে না; আমরা Araxis Mergeপ্রকৃত তুলনা এবং ফাইলগুলি মার্জ করার জন্য ব্যবহার করি)


15
@ বল্টক্লক: আসলে ভিম এটিকে খুব দ্রুত খুলবে।
ereOn

58
69305 লাইন এবং গণনা। আমাদের আবেদনে একটি ফাইল যা আমার সহকর্মী তার বেশিরভাগ কোডটি ডাম্প করে ফেলে here এখানে এটি পোস্ট করা প্রতিহত করতে পারেনি। আমার কাছে এই প্রতিবেদন করার জন্য আমার সংস্থার কেউ নেই।
অগ্নেল কুরিয়ান 1'10

204
আমি পাই না। মন্তব্য "এত তাড়াতাড়ি" কীভাবে এতগুলি উপার্জন পেতে পারে? কিছু লোক কোনও রূপকথার মধ্যে বাস করে বলে মনে হয়, যেখানে সমস্ত প্রকল্প স্ক্র্যাচ থেকে লেখা এবং / অথবা 100% চতুর, টিডিডি, ... ব্যবহার করে থাকে (আপনার যে কোনও বুজওয়ার্ড এখানে রাখুন)।
স্টিফান

39
@ স্টেফান: যখন একটি অনুরূপ কোড বেসের মুখোমুখি হয়েছিলাম তখন আমি ঠিক তা-ই করেছি। আমি আমার 95% সময় 10 বছরের পুরানো কোড বেসে ক্রুডের চারপাশে কাজ করতে, এবং 5% আসলে কোড লেখার জন্য ব্যয় করি না। সিস্টেমের কিছু দিক পরীক্ষা করা আসলেই অসম্ভব ছিল (এবং আমি ইউনিট পরীক্ষা বোঝাতে চাইছি না, আসলে কোডটি কাজ করেছে কিনা তা দেখার জন্য এটি আসলে চালিত করে )। আমি আমার 6 মাসের ট্রায়াল পিরিয়ডটি শেষ করতে পারি নি, আমি হাতছাড়া করে লড়াই করে এবং কোডটি লিখতে পেরে ক্লান্ত হয়ে পড়েছিলাম I
বাইনারি ওয়ারিয়ার 15

50
ফাইলটি বিভক্ত করার ইতিহাস ট্র্যাকিং দিকটি বিবেচনা করে: পুরো ফাইলটি অনুলিপি করতে চাইলে আপনার সংস্করণ নিয়ন্ত্রণ সিস্টেমের অনুলিপি কমান্ডটি ব্যবহার করুন এবং তারপরে যে কপিগুলি আপনি চান না তার প্রত্যেকটি থেকে অপসারণ করুন then যে ফাইলটিতে। এটি সামগ্রিক ইতিহাস সংরক্ষণ করে, যেহেতু প্রতিটি বিভক্ত ফাইলই তার ইতিহাসটিকে বিভাজনের মধ্য দিয়ে আবার চিহ্নিত করতে পারে (যা ফাইলের বেশিরভাগ সামগ্রীর দৈত্য মোছার মতো দেখাবে)।
rmeador 18

উত্তর:


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

  2. ফাইলে এমন কিছু কোড সন্ধান করুন যা মূলত কেবলমাত্র কয়েকটি সংখ্যক শাখায়ই প্রযোজ্য এবং একা দাঁড়িয়ে থাকতে পারে। অল্প সংখ্যক শাখার কারণে এটি দ্রুত পরিবর্তন হচ্ছে কিনা তা বিবেচনা করে না। এটিকে তার নিজস্ব ক্লাস এবং ফাইলগুলিতে সরান। পদ্ধতি পুনরাবৃত্তি করুন।

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

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

আমার মনে হয় আপনি ভুল বলছেন যে ধরণের এসসিসির কোনও ব্যাপার নেই, কারণ উদাহরণস্বরূপ গিটের মার্জিং ক্ষমতাগুলি আপনি যে मर्জ করা সরঞ্জামটি ব্যবহার করছেন তার চেয়ে সম্ভবত ভাল। সুতরাং মূল সমস্যাটি, বিভিন্ন এসসিসির জন্য বিভিন্ন সময়ে "মার্জ করা শক্ত" হয়। তবে, আপনার এসসিসি পরিবর্তন করতে সক্ষম হওয়ার সম্ভাবনা কম, সুতরাং সমস্যাটি সম্ভবত অপ্রাসঙ্গিক।


মার্জ করার ক্ষেত্রে: আমি জিআইটির দিকে নজর দিয়েছি এবং এসভিএন এর দিকে চেয়েছি এবং পেরফোর্সের দিকে নজর রেখেছি এবং আপনাকে জানাতে পারি যে আমি কোথাও কিছু দেখিনি যা আমরা করি তার জন্য আকুরিভ + আরাক্সিসকে মারধর করে। :-) (যদিও জিআইটি এটি করতে পারে [ স্ট্যাকওভারফ্লো. com/ প্রশ্নগুলি / ১28২৮৯২২/২ ] এবং অ্যাকিউরাইভ করতে পারে না - সবাইকে নিজেরাই সিদ্ধান্ত নিতে হবে যে এটি মার্জ বা ইতিহাস বিশ্লেষণের অংশ কিনা।)
মার্টিন বা

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

129

মার্জ করা এত বড় দুঃস্বপ্ন হতে পারে না যখন আপনি ভবিষ্যতে 30000 এলওসি ফাইল পাবেন। তাই:

  1. এই ফাইলটিতে আরও কোড যুক্ত করা বন্ধ করুন।
  2. এটা ভাগ কর.

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


@ মার্টিন: ভাগ্যক্রমে আপনি এখানে আপনার ফাইলটি আটকাননি, সুতরাং এর কাঠামো সম্পর্কে আমার কোনও ধারণা নেই। তবে সাধারণ ধারণাটি এটিকে যৌক্তিক অংশগুলিতে বিভক্ত করা। এই জাতীয় যৌক্তিক অংশগুলিতে আপনার "মূল শ্রেণি" থেকে বিভিন্ন গ্রুপের ফাংশন থাকতে পারে বা আপনি এটি বেশ কয়েকটি সহায়ক ক্লাসে বিভক্ত করতে পারেন।
কিরিল ভি লিয়াডভিনস্কি

3
10 রক্ষণাবেক্ষণ সংস্করণ এবং অনেক সক্রিয় বিকাশকারী সহ, ফাইলটি যথেষ্ট দীর্ঘ সময়ের জন্য হিমায়িত হওয়ার সম্ভাবনা নেই।
কোবি

9
@Martin, আপনি GOF রীতির একটি দম্পতি যে কৌতুক করতে হবে, একটি একক আছে ছদ্মরূপ যে mainmodule.cpp কার্যাবলী মানচিত্র, অন্যথায় (আমি নিচে সুপারিশ করেছি) একটি স্যুট তৈরি কমান্ড শ্রেণীর একটি ফাংশন প্রতিটি মানচিত্র / mainmodule.app এর বৈশিষ্ট্য। (আমার উত্তরে আমি এটি প্রসারিত করেছি))
ocodo

2
হ্যাঁ সম্পূর্ণরূপে সম্মত হন, কোনও সময়ে আপনাকে এতে কোড যুক্ত করা বন্ধ করতে হবে বা শেষ পর্যন্ত এটি 30 কে, 40 কে, 50 কে, কাবুম মেইনমডিউলটি কেবল সেগটি ফল্ট হয়েছে। :-)
ক্রিস

67

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

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

যে কোনও ক্ষেত্রে, যেহেতু কোডের গন্ধগুলি কেবল সময়ের সাথে আরও খারাপ হবে, কমপক্ষে কিছু সময় এগুলির ব্যয় রিফ্যাক্টরিংয়ের ব্যয়কে ছাড়িয়ে যাবে। আপনার বর্ণনা থেকে আমি ধরে নেব যে আপনি টিপিং পয়েন্টটি পেরিয়ে গেছেন।

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

যাই হোক না কেন, এটি একটি বড় প্রকল্পের মতো শোনাচ্ছে, তাই শুভ কামনা :)


18
এটি প্রচুর গন্ধযুক্ত: এটি গন্ধযুক্ত যে ব্লব অ্যান্টি-প্যাটার্ন দা ঘরে রয়েছে ... en.wikedia.org/wiki/God_object । তার প্রিয় খাবার স্প্যাঘেটি কোড হল: en.wikipedia.org/wiki/Spaghetti_code :-)
jdehaan

@ জেডিহান: আমি এটি সম্পর্কে কূটনীতিক হওয়ার চেষ্টা করছিলাম :)
ব্রায়ান রাসমুসেন

আমার কাছ থেকেও +1, আমি যে জটিল কোডগুলি লিখেছি তা কভার করার জন্য লিখেছি এমন কি স্পর্শ করার সাহস পাচ্ছি না।
ড্যানি টমাস

49

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

মূল প্রধান শ্রেণীর উপরে একটি নতুন সিপিসি ক্লাস .োকান। আপাতত, এটি মূলত সমস্ত কলকে বর্তমান প্রধান শ্রেণিতে পুনঃনির্দেশ করবে, তবে এই নতুন শ্রেণির এপিআইকে যতটা সম্ভব পরিষ্কার এবং সংহত করে তোলার লক্ষ্য।

এটি হয়ে গেলে আপনি নতুন ক্লাসে নতুন কার্যকারিতা যুক্ত করার সম্ভাবনা পাবেন।

বিদ্যমান কার্যকারিতা হিসাবে, আপনি পর্যাপ্ত স্থিতিশীল হয়ে ওঠার জন্য আপনাকে ক্রমান্বয়ে তাদের নতুন শ্রেণিতে স্থানান্তর করতে হবে। আপনি এই টুকরো কোডটির জন্য এসসিসির সহায়তা হারাবেন, তবে এটি সম্পর্কে খুব বেশি কিছু করা যায় না। ঠিক সঠিক সময় বাছাই করুন।

আমি জানি এটি নিখুঁত নয়, যদিও আমি আশা করি এটি সহায়তা করতে পারে, এবং প্রক্রিয়াটি অবশ্যই আপনার প্রয়োজনের সাথে খাপ খাইয়ে নিতে হবে!

অতিরিক্ত তথ্য

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

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


জিআইটি কীভাবে তা করে / আপনি এটি জিআইটি দিয়ে কীভাবে করেন সে সম্পর্কে একটি রেফারেন্স সবচেয়ে স্বাগত।
মার্টিন বা

@ মার্টিন গিট এটি স্বয়ংক্রিয়ভাবে করে।
ম্যাথু

4
@ মার্টিন: গিট এটি স্বয়ংক্রিয়ভাবে করে - কারণ এটি ফাইলগুলি ট্র্যাক করে না, এটি সামগ্রী ট্র্যাক করে। কেবল "এক ফাইলের ইতিহাস পাওয়া" গিটের পক্ষে আসলে আরও বেশি কঠিন।
আরাফ্যাজিওন

1
@ মার্টিন youtube.com/watch?v=4XpnKHJAok8 হ'ল টোর্ভাল্ডস গিট নিয়ে কথা বলার বিষয়। তিনি পরে আলাপে এটি উল্লেখ করেছেন।
ম্যাথিউ

6
@Martin, এই প্রশ্নের তাকান: stackoverflow.com/questions/1728922/...
Benjol

30

কনফুসিয়াস বলেছেন: "গর্ত থেকে বেরিয়ে আসার প্রথম পদক্ষেপটি গর্ত খনন বন্ধ করা stop"


25

আমাকে অনুমান করতে দিন: বিবিধ বৈশিষ্ট্য সেট সহ দশটি ক্লায়েন্ট এবং "কাস্টমাইজেশন" প্রচার করে এমন বিক্রয় ম্যানেজার? আমি এর আগে এমন পণ্য নিয়ে কাজ করেছি। আমাদের মূলত একই সমস্যা ছিল।

আপনি স্বীকার করেছেন যে একটি বিশাল ফাইল থাকা সমস্যা, তবে আরও বেশি সমস্যা হ'ল দশটি সংস্করণ যা আপনাকে "বর্তমান" রাখতে হবে। এটাই একাধিক রক্ষণাবেক্ষণ। এসসিসি এটিকে আরও সহজ করে তুলতে পারে, তবে এটি সঠিক করতে পারে না।

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

একবার এই ফাইলটির কেবল একটি সংস্করণ সমস্ত শাখা দ্বারা সুস্পষ্টভাবে ভাগ করে নেওয়া হয়, তারপরে traditionalতিহ্যবাহী রিফ্যাক্টরিং পদ্ধতিগুলি শুরু করা আরও সহজ।

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

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


2
আমি একমত যে লক্ষ্যটি সফ্টওয়্যারটির একটি সংস্করণ থাকা উচিত, তবে কনফিগারেশন ফাইলগুলি (রানটাইম) ব্যবহার করা এবং সময় প্রথা সংকলন না করাই ভাল না
স্কোভ পেডারসেন

এমনকি প্রতিটি গ্রাহকের তৈরির জন্য "কনফিগার ক্লাস"।
টিসি।

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

22

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

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

আমি মনে করি আপনার কাছে কেবল এই বিকল্পগুলি রয়েছে:

  1. মাইগ্রেট করবেন না এবং আপনার যা আছে তা নিয়ে থাকবেন না। সম্ভবত আপনার চাকরি ছেড়ে দিন এবং ভাল ডিজাইনের পাশাপাশি গুরুতর সফ্টওয়্যারটিতে কাজ শুরু করুন। আপনি যদি ক্র্যাশ বা দু'জনের পক্ষে বাঁচার জন্য পর্যাপ্ত তহবিল দিয়ে দীর্ঘকালীন প্রকল্পে কাজ করে থাকেন তবে চরম প্রোগ্রামিং সর্বদা সেরা সমাধান নয়।

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

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


19

এই সমস্যাটি হ'ল "উত্তরাধিকারের কোডের সাথে কার্যকরভাবে কাজ করা" বইয়ের একটি অধ্যায়ে হ্যান্ডল করা হয়েছে ( http://www.amazon.com/Working-Effectively-Legacy- মিশেল- ফিথারস / dp /0131177052 )।


informit.com/store/product.aspx?isbn=0131177052 এই বইয়ের টিওসি (এবং 2 টি নমুনা অধ্যায়) দেখা সম্ভব করে তোলে। 20 অধ্যায় কত দিন? (এটি কতটা কার্যকর হতে পারে তা অনুভব করার জন্য।)
মার্টিন বা

17
অধ্যায় 20 10,000 লম্বা দীর্ঘ, তবে লেখক কীভাবে এটি হজম খণ্ডগুলিতে ভাগ করবেন ... 8)
টনি ডেলরয়

1
এটি প্রায় 23 পৃষ্ঠাগুলি, তবে 14 টি চিত্র সহ। আমি মনে করি আপনার এটি পাওয়া উচিত, আপনি ইমো করার সিদ্ধান্ত নেওয়ার চেষ্টা করে অনেক বেশি আত্মবিশ্বাসী বোধ করবেন।
এমিল ভ্রিজডাগস

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

2
@ মার্টিন, বইটি দুর্দান্ত তবে এটি টেস্ট, রিফ্যাক্টর, পরীক্ষার চক্রের উপর নির্ভর করে যা আপনি এখন যেখান থেকে বেশ কঠিন হতে পারে। আমি একই পরিস্থিতিতে ছিলাম এবং এই বইটি আমার সর্বাধিক সহায়ক। আপনার যে কুৎসিত সমস্যা রয়েছে তার জন্য এটি ভাল পরামর্শ পেয়েছে। তবে আপনি যদি ছবিতে কোনও ধরণের পরীক্ষার জোতা পেতে না পারেন তবে বিশ্বের সমস্ত রিফ্যাক্টরিং পরামর্শ আপনাকে সাহায্য করবে না।

14

আমি মনে করি আপনি কমান্ড ক্লাসের একটি সেট তৈরি করতে সেরা হবেন যা মেইনমডিউল.পিপি এর এপিআই পয়েন্টগুলিতে মানচিত্র করে।

একবার এগুলি স্থানে আসার পরে, কমান্ড ক্লাসগুলির মাধ্যমে এই এপিআই পয়েন্টগুলিতে অ্যাক্সেস করার জন্য আপনার বিদ্যমান কোড বেসটি রিফ্যাক্টর করতে হবে, এটি শেষ হয়ে গেলে আপনি প্রতিটি কমান্ডের প্রয়োগকে একটি নতুন শ্রেণি কাঠামোতে রিফ্যাক্টর মুক্ত করতে পারেন free

অবশ্যই, 11 কে.এল.সি. এর একক শ্রেণীর সাথে কোডটি সম্ভবত খুব সংযুক্ত এবং ভঙ্গুর রয়েছে, তবে স্বতন্ত্র কমান্ড ক্লাস তৈরি করা অন্য যে কোনও প্রক্সি / ফ্যাসাদ কৌশল হিসাবে অনেক বেশি সহায়তা করবে।

আমি কাজটি enর্ষা করি না, তবে সময়টি সমস্যাটি সমাধান না করে কেবল আরও খারাপ হবে।

হালনাগাদ

আমি পরামর্শ দিচ্ছি যে কমান্ড প্যাটার্নটি ফোকাসের চেয়ে ভাল।

এক (তুলনামূলকভাবে) একশাস্ত্রের সম্মুখভাগে প্রচুর বিভিন্ন কমান্ড ক্লাস বজায় রাখা / পরিচালনা করা ভাল। 11 কেএলপি ফাইলের মধ্যে একটি একক সম্মুখের ম্যাপিং সম্ভবত নিজেই কয়েকটি আলাদা গ্রুপে বিভক্ত হওয়া দরকার।

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

অবশ্যই, উভয় বিকল্প একক 11 কেএলকি এবং বর্ধমান, ফাইলের চেয়ে ভাল।


একই প্রস্তাব সহ আমি প্রস্তাবিত সমাধানের বিকল্পকে +1 করুন: বড় সমস্যাটিকে ছোট ছোট করে আলাদা করার জন্য এপিআই পরিবর্তন করুন।
বেনোট

13

একটি গুরুত্বপূর্ণ পরামর্শ: রিফ্যাক্টরিং এবং বাগফিক্সগুলি মিশ্রণ করবেন না। আপনি যা চান তা হ'ল আপনার প্রোগ্রামটির একটি সংস্করণ যা পূর্ববর্তী সংস্করণটির অনুরূপ , উত্স কোডটি ভিন্ন except

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

তারপরে আপনি সমস্ত রক্ষণাবেক্ষণ রিলিজগুলি "নতুন" মেইন সিপিপি বা আপনার কাঠামোর যা কিছু আছে তার উপর স্যুইচ করার চেষ্টা করতে পারেন। আবার: অন্য কোনও পরিবর্তন বা বাগফিক্স নেই কারণ সেগুলি ট্র্যাক করা নরক হিসাবে বিভ্রান্তিকর।

আরেকটি জিনিস: আপনি একবারে পুরো জিনিসটিকে রিফ্যাক্টর করে একটি বড় পাস তৈরি করতে যতটা ইচ্ছা করতে পারেন, আপনি যতটা চিবিয়ে পারেন তার চেয়ে বেশি কামড় দিতে পারেন। সম্ভবত কেবল একটি বা দুটি "অংশ" বাছাই করুন, সেগুলি সমস্ত রিলিজে নিয়ে আসুন, তারপরে আপনার গ্রাহকের জন্য আরও কিছু মান যুক্ত করুন (সর্বোপরি, রিফ্যাক্টরিং সরাসরি মূল্য যুক্ত করে না তাই এটি একটি ব্যয় যা ন্যায়সঙ্গত হতে হবে) এবং তারপরে অন্যটি বেছে নিন এক বা দুটি অংশ।

স্পষ্টতই এর জন্য দলটিতে কিছুটা শৃঙ্খলা থাকা দরকার যা প্রকৃতপক্ষে স্প্লিট ফাইলগুলি ব্যবহার করে এবং মেন সিপ্পিতে সর্বদা কেবল নতুন স্টাফ যোগ না করে, তবে আবারও, একটি বৃহত্তর রিফ্যাক্টর করার চেষ্টা করা সেরা ক্রিয়াকলাপ নাও হতে পারে।


1
আউট ফ্যাক্টরিং এবং #include ফিরে জন্য +1। আপনি সমস্ত 10 টি শাখা এই করেনি থাকেন (সেখানে কাজের বিট, কিন্তু সামলানো) আপনি এখনো আপনার সব শাখা জুড়ে পরিবর্তন পোস্টিং অন্যান্য সমস্যা হবে, কিন্তু যে সমস্যা wouldn ' t প্রসারিত হয়েছে (অগত্যা) এটা কি কুরুচিপূর্ণ? হ্যাঁ এটি এখনও রয়েছে তবে সমস্যাটিতে সামান্য পরিমাণে যৌক্তিকতা আনতে পারে। সত্যিকারের, সত্যিই বড় পণ্যটির রক্ষণাবেক্ষণ এবং সার্ভিসিংয়ে বেশ কয়েক বছর ব্যয় করে আমি জানি যে রক্ষণাবেক্ষণে অনেক ব্যথা জড়িত। খুব কমপক্ষে এটি থেকে শিখুন, এবং অন্যদের কাছে একটি সাবধানবাণী গল্প হিসাবে পরিবেশন করুন।
জয়

10

রোফেল, এটি আমার পুরানো কাজের কথা মনে করিয়ে দেয়। দেখে মনে হচ্ছে, আমি যোগদানের আগে সবকিছুই একটি বিশাল ফাইলের মধ্যে ছিল (এছাড়াও সি ++)। তারপরে তারা এটিকে বিভক্ত করেছেন (সম্পূর্ণরূপে এলোমেলো পয়েন্টগুলিতে ব্যবহার করে) প্রায় তিনটি (এখনও বিশাল ফাইল)। এই সফ্টওয়্যারটির গুণমানটি যেমনটি আপনি আশা করতে পারেন, ভয়াবহ ছিল। প্রকল্পটি মোট প্রায় 40k এলওসি তে। (প্রায় কোনও মন্তব্য নেই তবে ডুপ্লিকেট কোডের প্রচুর পরিমাণ রয়েছে)

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

আমার বলতে হবে যে এটি প্রায় আধা বছর সময় নিয়েছে এবং সেই সময়ে বাগফিক্সগুলির পাশে পুরানো কোড বেসের কোনও বিকাশ হয়নি।


সম্পাদনা:

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

সফ্টওয়্যারটি একটি এমবেডেড সিস্টেমের জন্য ছিল, একটি লেবেল প্রিন্টার।

আমার আরও একটি বিষয় যুক্ত করা উচিত যা তাত্ত্বিকভাবে প্রকল্পটি ছিল সি ++। তবে এটি মোটেও OO ছিল না, এটি সি হতে পারে নতুন সংস্করণটি অবজেক্ট ওরিয়েন্টেড।


9
প্রতিবার আমি "স্ক্র্যাচ থেকে" রিফ্যাক্টরিং সম্পর্কিত বিষয়ে শুনি আমি একটি বিড়ালছানাকে হত্যা করি!
কুগেল

আমি খুব অনুরূপ সুরের পরিস্থিতিতে পড়েছি, যদিও মূল প্রোগ্রামটির লুপটি আমাকে গ্রিপস করতে হয়েছিল মাত্র 9000 ডলারের এলওসি। এবং এটি যথেষ্ট খারাপ ছিল।
AndyUK

8

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

এক, আপনার দলটিকে এই ফাইলটির বর্তমান উত্পাদনের সংস্করণে কোনও কোড স্থির করার সিদ্ধান্ত নিতে হবে।

দ্বিতীয়ত, আপনাকে এই উত্পাদন সংস্করণটি গ্রহণ করতে হবে এবং একটি শাখা তৈরি করতে হবে যা বড় ফাইলটিকে বিভক্ত করার জন্য প্রিপ্রসেসিং নির্দেশিকা ব্যবহার করে বিল্ডগুলি পরিচালনা করে। JUST প্রিপ্রোসেসর নির্দেশিকা (#ifdefs, # অন্তর্ভুক্ত, #endifs) ব্যবহার করে সংকলনকে বিভক্ত করা এপিআই পুনরায় পুনর্নির্মাণের চেয়ে সহজ। আপনার এসএলএ এবং চলমান সহায়তার জন্য এটি অবশ্যই সহজ।

এখানে আপনি ক্লাসের মধ্যে কোনও নির্দিষ্ট সাবসিস্টেমের সাথে সম্পর্কিত ফাংশনগুলি কেটে ফেলতে পারেন এবং এটিকে একটি ফাইল মেইনলুপ_ফুস্টফফ.পি.পি বলে রাখতে পারেন এবং এটিকে সঠিক জায়গায় মেইনলুপ.সি.পি. তে অন্তর্ভুক্ত করতে পারেন।

অথবা

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

এই পদ্ধতির মধ্যে এমন উপাদানগুলি অন্তর্ভুক্ত থাকবে যা আপনি যে সংস্করণের সংকলন করছেন তার উপর ভিত্তি করে ব্যবহৃত হয়ে থাকে।

মূল কাঠামোটি হ'ল নীচের মত বিবৃতি দেওয়ার পরে আপনার মেইনক্লাস। সিপি-তে একটি নতুন ফাইল মেইনক্লাসকোম্পোনস সিপিপি অন্তর্ভুক্ত থাকবে:

#if VARIANT == 1
#  define Uses_Component_1
#  define Uses_Component_2
#elif VARIANT == 2
#  define Uses_Component_1
#  define Uses_Component_3
#  define Uses_Component_6
...

#endif

#include "MainClassComponents.cpp"

মেইনক্লাসকোম্পোনস.পিপি ফাইলের প্রাথমিক কাঠামোটি এখানে উপ উপাদানগুলির মধ্যে নির্ভরতা কাজ করার জন্য থাকবে:

#ifndef _MainClassComponents_cpp
#define _MainClassComponents_cpp

/* dependencies declarations */

#if defined(Activate_Component_1) 
#define _REQUIRES_COMPONENT_1
#define _REQUIRES_COMPONENT_3 /* you also need component 3 for component 1 */
#endif

#if defined(Activate_Component_2)
#define _REQUIRES_COMPONENT_2
#define _REQUIRES_COMPONENT_15 /* you also need component 15 for this component  */
#endif

/* later on in the header */

#ifdef _REQUIRES_COMPONENT_1
#include "component_1.cpp"
#endif

#ifdef _REQUIRES_COMPONENT_2
#include "component_2.cpp"
#endif

#ifdef _REQUIRES_COMPONENT_3
#include "component_3.cpp"
#endif


#endif /* _MainClassComponents_h  */

এবং এখন প্রতিটি কম্পোনেন্টের জন্য আপনি একটি কম্পোনেন্ট_এক্সএক্সপিপি ফাইল তৈরি করেন।

অবশ্যই আমি সংখ্যাগুলি ব্যবহার করছি তবে আপনার কোডের ভিত্তিতে আপনার আরও কিছু যৌক্তিক ব্যবহার করা উচিত।

প্রিপ্রসেসর ব্যবহার করে আপনাকে এপিআই পরিবর্তনগুলি নিয়ে চিন্তা না করে জিনিসগুলিকে বিভক্ত করতে দেয় যা উত্পাদনের একটি দুঃস্বপ্ন।

একবার উত্পাদন স্থির হয়ে গেলে আপনি আসলে পুনরায় ডিজাইনে কাজ করতে পারেন।


এটি অভিজ্ঞ-এর-কার্য-পরে-বেদনাদায়ক ফলাফলগুলির মতো দেখায়।
জেবিআরওয়িলকিনসন

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

8

ঠিক আছে আমি আপনার ব্যথা বুঝতে পেরেছি: :) আমি এরকম কয়েকটি প্রকল্পেও এসেছি এবং এটি সুন্দরও নয়। এর পক্ষে সহজ কোনও উত্তর নেই।

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

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


4

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


সর্বদা হিসাবে, আমি ডাউনটাওয়েটের জন্য একটি ব্যাখ্যা পেতে চাই।
বিজন পোলাক্স

4

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


4

এটি বড় সমস্যার কোনও উত্তর নয়, তবে এর নির্দিষ্ট অংশটির একটি তাত্ত্বিক সমাধান:

  • আপনি কোথায় বড় ফাইলটি সাবফাইলে বিভক্ত করতে চান তা নির্ধারণ করুন। এই প্রতিটি পয়েন্টে কিছু বিশেষ বিন্যাসে মন্তব্য করুন।

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

  • স্ক্রিপ্ট চালান। মূল ফাইলটি মুছুন।

  • যখন আপনাকে কোনও শাখা থেকে মার্জ করা দরকার তখন প্রথমে টুকরোগুলি একসাথে যুক্ত করে বড় ফাইলটি পুনরায় তৈরি করুন, মার্জ করুন এবং তারপরে এটি আবার বিভক্ত করুন।

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


4

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

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


আমি মনে করি অন্যরাও অনুরূপ জিনিস প্রস্তাব করেছিল। এটি সংক্ষিপ্ত এবং বিন্দুতে এবং আমি মনে করি এটি মূল সমস্যার জন্য একটি বৈধ প্রারম্ভিক পয়েন্ট হতে পারে।
মার্টিন বা

3

বাহ, দুর্দান্ত লাগছে। আমি আপনার বসকে ব্যাখ্যা করছি বলে মনে করি, জন্তুটিকে রিফ্যাক্টর করার জন্য আপনার অনেক সময় দরকার a যদি তিনি রাজি না হন, ছেড়ে দেওয়া একটি বিকল্প।

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


3

আমার সহানুভূতি - আমার আগের চাকরীতে আমি এমন একটি ফাইলের সাথে একইরকম পরিস্থিতির মুখোমুখি হয়েছিলাম যেটি আপনি মোকাবেলা করতে হয়েছে তার চেয়ে কয়েকগুণ বড়। সমাধানটি ছিল:

  1. প্রশ্নে প্রোগ্রামটিতে ক্রিয়াটি পরীক্ষা করার জন্য কোড লিখুন to মনে হচ্ছে আপনি ইতিমধ্যে এটি হাতে পাবেন না ...
  2. এমন কোনও কোড শনাক্ত করুন যা কোনও সহায়ক / ইউটিলিটি ক্লাসে বিমূর্ত করা যেতে পারে। বড় হতে হবে না, এমন কিছু যা সত্যই আপনার 'প্রধান' শ্রেণীর অংশ নয়।
  3. রিফ্যাক্টর কোডটি চিহ্নিত করে একটি পৃথক শ্রেণিতে identified
  4. কিছুই যাতে না ভাঙে তা নিশ্চিত করতে আপনার পরীক্ষাগুলি পুনরায় চালিত করুন।
  5. আপনার সময় থাকলে, যান 2 এবং কোডটি পরিচালনাযোগ্য করে তুলতে প্রয়োজনীয় হিসাবে পুনরাবৃত্তি করুন।

আপনি ধাপ 3 এ যে ক্লাসগুলি তৈরি করেন পুনরাবৃত্তিগুলি সম্ভবত তাদের নতুন-পরিষ্কার ফাংশনের জন্য উপযুক্ত এমন আরও কোড শোষণ করতে বাড়বে।

আমি যোগ করতে পারে:

0: লিগ্যাসি কোড সহ কাজ করার জন্য মাইকেল পালকের বইটি কিনুন

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


2

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

যদি আপনি একটি কার্যক্ষম সমাধান চিহ্নিত করে থাকেন তবে সেই অনুযায়ী অ্যাপ্লিকেশনটিকে রিফ্যাক্টর করুন।

যদি আরও যুক্তিযুক্ত আর্কিটেকচার তৈরির সমস্ত প্রচেষ্টা ব্যর্থ হয়, তবে কমপক্ষে আপনি জানেন যে সমাধানটি সম্ভবত প্রোগ্রামটির কার্যকারিতাটিকে নতুন করে সংজ্ঞায়িত করতে পারে।


+1 - আপনার নিজের সময়ে এটি পুনরায় লিখুন যদিও অন্যথায় কেউ তাদের ডামি থুতু ফেলতে পারে।
জন ব্ল্যাক

2

আমার 0.05 ইউরোসেন্টস:

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

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

পুনরায় নকশার জন্য সম্ভবত একটি পৃথক প্রকল্পের প্রয়োজন হবে, এটি একটি চলন্ত লক্ষ্যে করার চেষ্টা করা কার্যকর হবে না।

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

এই প্রকল্পের জন্য আপনাকে সম্ভবত ব্যবসায়ের কিনতে পাওয়া দরকার। আপনি সম্ভবত দ্রুত বিকাশের সময়, কম বাগ, সহজ রক্ষণাবেক্ষণ এবং কম সামগ্রিক বিশৃঙ্খলা নিয়ে তর্ক করতে পারেন। "আমাদের সমালোচনামূলক সফ্টওয়্যার সম্পদের ভবিষ্যত-প্রমাণ এবং রক্ষণাবেক্ষণের কার্যকারিতা সক্রিয়ভাবে সক্ষম করুন" এর ধারায় কিছু :) :)

এভাবেই আমি সমস্যাটি মোকাবেলা করতে শুরু করব।


2

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



2

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


2

এই বাক্যটি আমি আপনার পোস্টের সবচেয়ে আকর্ষণীয় অংশ হিসাবে পেয়েছি:

> ফাইলটি আমাদের পণ্যের বেশ কয়েকটি (> 10) রক্ষণাবেক্ষণ সংস্করণে ব্যবহৃত এবং সক্রিয়ভাবে পরিবর্তিত হয় এবং তাই এটি রিফ্যাক্টর করা সত্যিই শক্ত is

প্রথমত, আমি আপনাকে সুপারিশ করব যে আপনি এই 10 + রক্ষণাবেক্ষণ সংস্করণগুলি উন্নত করতে উত্স নিয়ন্ত্রণ ব্যবস্থা ব্যবহার করুন যা শাখা সমর্থন করে।

দ্বিতীয়ত, আমি দশটি শাখা তৈরি করব (আপনার প্রতিটি রক্ষণাবেক্ষণ সংস্করণের জন্য একটি)।

আমি ইতিমধ্যে আপনি cringing বোধ করতে পারেন! তবে হয় আপনার উত্স নিয়ন্ত্রণটি বৈশিষ্ট্যের অভাবে আপনার পরিস্থিতির জন্য কাজ করছে না, বা এটি সঠিকভাবে ব্যবহার হচ্ছে না।

এখন আপনি যে শাখায় কাজ করছেন তার কাছে - আপনি যথাযথ হিসাবে দেখতে দেখতে এটি রিফ্যাক্টর করুন, এই জ্ঞানে নিরাপদ যে আপনি আপনার পণ্যের অন্যান্য নয়টি শাখা বিরক্ত করবেন না।

আমি কিছুটা উদ্বিগ্ন হব যে আপনার মূল () ফাংশনে আপনার এতটা আছে have

আমি যে কোনও প্রকল্পে লিখি, আমি মূল () কেবলমাত্র মূল বস্তুর সূচনা করতে পারি - যেমন সিমুলেশন বা অ্যাপ্লিকেশন অবজেক্ট - এই ক্লাসগুলি যেখানে আসল কাজটি করা উচিত।

আমি পুরো প্রোগ্রাম জুড়ে বিশ্বব্যাপী ব্যবহারের জন্য একটি অ্যাপ্লিকেশন লগিং অবজেক্টটি প্রাথমিকভাবে শুরু করব।

অবশেষে, প্রধানত আমি প্রিপ্রসেসর ব্লকগুলিতে ফাঁস সনাক্তকরণ কোড যুক্ত করি যা নিশ্চিত করে যে এটি কেবলমাত্র ডিইবিইউজি বিল্ডগুলিতে সক্ষম রয়েছে। এটিই আমি মূল () তে যুক্ত করব। মেইন () ছোট হওয়া উচিত!

তুমি বলেছো এটা

> ফাইলটিতে মূলত আমাদের প্রোগ্রামের "প্রধান শ্রেণি" (প্রধান অভ্যন্তরীণ কাজ প্রেরণ এবং সমন্বয়) থাকে

দেখে মনে হচ্ছে এই দুটি কাজ দুটি পৃথক বস্তুর মধ্যে বিভক্ত হতে পারে - একটি সমন্বয়কারী এবং একটি কাজের প্রেরণকারী।

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

যদি আপনি সিদ্ধান্ত নিতে সক্ষম না হন তবে দাঁতটির সাথে লড়াই করুন এবং এটির জন্য আপনার ম্যানেজারের সাথে পেরেক করুন - আপনার অ্যাপ্লিকেশনটি রিফ্যাক্ট করা দরকার - এবং এটির শব্দগুলি খারাপভাবে! একটি উত্তর জন্য নেবেন না!


আমি যেমন বুঝতে পেরেছি, সমস্যাটি হ'ল: আপনি বুলেট এবং রিফ্যাক্টরটি কামড়ালে আপনি সংস্করণগুলির মধ্যে আর প্যাচগুলি বহন করতে পারবেন না। এসসিসি নিখুঁতভাবে সেট আপ হতে পারে।
পিটারচেন

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

2

যেমনটি আপনি বর্ণনা করেছেন, মূল সমস্যাটি হ'ল প্রাক-বিভক্ত বনাম বিভক্ত হওয়া, বাগ-সংশোধন ইত্যাদিতে মার্জ করা ইত্যাদি Tool এর চারপাশে সরঞ্জাম। পার্ল, রুবি ইত্যাদির স্ক্রিপ্টকে হার্ডকোড করতে খুব বেশি সময় লাগবে না post হ্যান্ডল পরিচালনা করার ক্ষেত্রে সবচেয়ে সহজ যেটি করুন:

  • সংক্ষিপ্তকরণের আগে / পূর্ববর্তী সময়ে নির্দিষ্ট লাইনগুলি সরিয়ে ফেলুন (যেমন রক্ষীদের অন্তর্ভুক্ত)
  • প্রয়োজনে ভিন্ন ভিন্ন আউটপুট থেকে অন্যান্য জিনিসগুলি সরিয়ে ফেলুন

আপনি এমনকি এটি তৈরি করতে পারেন যখনই সেখানে কোনও চেকিন থাকে, কনটেনটেশন চলে এবং আপনি একক-ফাইলের সংস্করণগুলির থেকে পৃথক হওয়ার জন্য কিছু প্রস্তুত পেয়েছেন।


2
  1. এই ফাইল এবং কোডটি আবার কখনও স্পর্শ করবেন না!
  2. চিকিত্সা এমন কিছু যা আপনি আটকে আছেন like সেখানে এনকোড করা কার্যকারিতার জন্য অ্যাডাপ্টারগুলি লিখতে শুরু করুন।
  3. বিভিন্ন ইউনিটে নতুন কোড লিখুন এবং কেবল অ্যাডাপ্টারের সাথে কথা বলুন যা দৈত্যটির কার্যকারিতাটি encapsulate করে।
  4. ... উপরের শুধুমাত্র একটির পক্ষে যদি সম্ভব না হয় তবে চাকরিটি ছেড়ে দিন এবং আপনাকে একটি নতুন পেয়ে যাবেন।

2
+/- 0 - গুরুত্ব সহকারে, আপনি কোথায় বাস করছেন এমন লোকেরা যে আপনি এই জাতীয় প্রযুক্তিগত তথ্যের উপর ভিত্তি করে কোনও চাকরি ছাড়ার পরামর্শ দিচ্ছেন?
মার্টিন বা

1

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

যদি সেই বড় সুইচ (যা আমি মনে করি) মূল রক্ষণাবেক্ষণের সমস্যা হয়ে যায়, আপনি অভিধান এবং কমান্ড প্যাটার্নটি ব্যবহার করতে এটি রিফ্যাক্টর করতে পারেন এবং বিদ্যমান কোড থেকে লোডারটিতে সমস্ত স্যুইচ যুক্তি সরিয়ে ফেলতে পারেন, যা সেই মানচিত্রকে জনপ্রিয় করে তোলে, যেমন:

    // declaration
    std::map<ID, ICommand*> dispatchTable;
    ...

    // populating using some loader
    dispatchTable[id] = concreteCommand;

    ...
    // using
    dispatchTable[id]->Execute();

2
না, আসলে কোনও বড় সুইচ নেই। বাক্যটি এই নিকটস্থির বর্ণনা দিতে আমি আসতে পারি কেবলমাত্র নিকটতম :)
মার্টিন বা

1

আমি মনে করি কোনও ফাইলকে বিভক্ত করার সময় উত্সের ইতিহাস ট্র্যাক করার সবচেয়ে সহজ উপায়টি এরকম কিছু হবে:

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

"ইতিহাস সংরক্ষণের অনুলিপিটি আপনার এসসিএম সিস্টেমের যে কোনও আদেশ দেয়" ব্যবহার করে "... খারাপ জিনিস এটি সরবরাহ করে না
মার্টিন বা

খুব খারাপ. এটি একাকী আরও আধুনিক কিছুতে স্যুইচ করার ভাল কারণ বলে মনে হচ্ছে। :-)
ক্রিস্টোফার ক্রিউটজিগ

1

আমি মনে করি এই পরিস্থিতিতে আমি কী করব তা বুলেট থেকে সামান্য এবং:

  1. আমি কীভাবে ফাইলটি বিভক্ত করতে চেয়েছি তা (বর্তমান বিকাশের সংস্করণের ভিত্তিতে)
  2. ফাইলটিতে প্রশাসনিক লক রাখুন ("শুক্রবার সন্ধ্যা 5 টায় কেউ মেনোমডিউল.পিপি স্পর্শ করবেন না!")
  3. আপনার দীর্ঘ সপ্তাহান্তে> 10 টি রক্ষণাবেক্ষণ সংস্করণে (পুরানো থেকে সর্বাপেক্ষা প্রাচীনতম) প্রয়োগ করে বর্তমান সংস্করণ পর্যন্ত ব্যয় করুন।
  4. সফ্টওয়্যারটির সমস্ত সমর্থিত সংস্করণ থেকে মুখ্যমডিউল.পিপি মুছুন। এটি একটি নতুন বয়স - এর চেয়ে বেশি কোনও মেনমডিউল সিপিপি নেই।
  5. ম্যানেজমেন্টকে বিশ্বাস করুন যে আপনি সফ্টওয়্যারটির একাধিক রক্ষণাবেক্ষণ সংস্করণকে সমর্থন করবেন না (কমপক্ষে একটি বড় সমর্থন চুক্তি ব্যতীত)। যদি আপনার প্রতিটি গ্রাহকের নিজস্ব অনন্য সংস্করণ থাকে .... ইয়েশীহ্। আমি 10+ কাঁটাচামচ বজায় রাখার চেয়ে সংকলক নির্দেশিকা যুক্ত করব।

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

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