একটি বিআইজি উত্তর কখন পুনরায় লিখবে?


278

বড় লেখকদের সম্পর্কে শুধু প্রশ্নটি পড়ুন এবং আমি একটি প্রশ্নের মনে পড়েছিলাম যা আমি নিজেই উত্তর চেয়েছিলাম।

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

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

টিএল; ডিআর কখন উত্তরটি আবার নতুন করে লেখেন এবং আপনি এটি সমর্থন করার জন্য কোন যুক্তি ব্যবহার করতে পারেন?


1
এছাড়াও, সম্পর্কিত: programmers.stackexchange.com/questions/20246/...
IAbstract

6
এটা পুরানো, কিন্তু এটা একটি ক্লাসিক নেই - জোএল এর "থিংস আপনি কখনই করা উচিত, পার্ট আমি" joelonsoftware.com/articles/fog0000000069.html
Mawg

এটা একটা ভাল প্রশ্ন. অত্যন্ত প্রাসঙ্গিক, সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ে এই পরিস্থিতি প্রায়শই ঘটে।
ব্র্যাড থমাস

উত্তর:


325

দুঃখিত, এটি দীর্ঘ হতে চলেছে তবে একাধিক পুনর্লিখন প্রকল্পের স্থপতি এবং বিকাশকারী উভয়ই এটি ব্যক্তিগত অভিজ্ঞতার ভিত্তিতে।

নিম্নলিখিত শর্তগুলির কারণে আপনাকে কিছু প্রকার পুনর্লিখন বিবেচনা করতে হবে। এর পরে কোনটি করা উচিত তা কীভাবে সিদ্ধান্ত নেবেন সে সম্পর্কে আমি কথা বলব।

  • বিকাশকারী র‌্যাম্প আপ সময় খুব বেশি। যদি কোনও নতুন বিকাশকারীকে র‌্যাম্প আপ করতে নীচের (অভিজ্ঞতার স্তরের) চেয়ে বেশি বেশি সময় লাগে তবে সিস্টেমটি নতুন করে ডিজাইন করা দরকার। র‌্যাম্প আপের অর্থ, নতুন বিকাশকারী তাদের প্রথম প্রতিশ্রুতি (প্রস্তুত করার জন্য একটি ছোট বৈশিষ্ট্যে) প্রস্তুত হওয়ার আগে সময়ের পরিমাণ বোঝায়
    • কলেজ থেকে সতেজ - 1.5 মাস
    • এখনও সবুজ, তবে 1 মাস - আগে অন্যান্য প্রকল্পে কাজ করেছেন
    • মাঝের স্তর - 2 সপ্তাহ
    • অভিজ্ঞ - 1 সপ্তাহ
    • সিনিয়র স্তর - 1 দিন
  • স্থাপনা স্বয়ংক্রিয় করা যায় না, কারণ বিদ্যমান স্থাপত্যের জটিলতার কারণে
  • এমনকি সরল বাগ ফিক্সগুলি বিদ্যমান কোডের জটিলতার কারণে খুব বেশি সময় নেয়
  • নতুন বৈশিষ্ট্যগুলি অনেক দীর্ঘ সময় নেয় এবং কোডবেসের আন্তঃনির্ভরতার কারণে অনেক বেশি ব্যয় হয় (নতুন বৈশিষ্ট্যগুলি পৃথক করা যায় না, এবং তাই বিদ্যমান বৈশিষ্ট্যগুলিকে প্রভাবিত করে)
  • বিদ্যমান কোডবেসের আন্তঃনির্ভরতার কারণে আনুষ্ঠানিক পরীক্ষার চক্রটি অনেক বেশি সময় নেয়।
  • অনেকগুলি ব্যবহারের কেস খুব কম স্ক্রিনে কার্যকর করা হয়। এটি ব্যবহারকারী এবং বিকাশকারীদের প্রশিক্ষণের সমস্যাগুলির কারণ করে।
  • বর্তমান ব্যবস্থায় যে প্রযুক্তি রয়েছে তার দাবি এটি
    • প্রযুক্তির অভিজ্ঞতার সাথে গুণমান বিকাশকারীদের খুঁজে পাওয়া খুব কঠিন
    • এটি অবচয় করা হয়েছে (নতুন প্ল্যাটফর্ম / বৈশিষ্ট্যগুলি সমর্থন করার জন্য এটি আপগ্রেড করা যাবে না)
    • এখানে কেবলমাত্র আরও অনেকগুলি উচ্চতর স্তরের প্রযুক্তি উপলব্ধ রয়েছে
    • পুরানো প্রযুক্তির অবকাঠামো রক্ষণাবেক্ষণের ব্যয় খুব বেশি

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

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

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

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

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

সাফল্যের জন্য কিছু কৌশল:

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

25
আমি মনে করি জোয়েলের মূল বক্তব্য হ'ল পুনর্লিখনের মাধ্যমে আপনি পুরাতন কোডে সঞ্চিত জ্ঞান হারাবেন।
কোয়ান্ট_দেব

14
@ কোয়ান্ট_দেব আংশিক হ্যাঁ, তবে আপনি যখন কখনও কখনও পুনর্লিখন করেন তখন আপনি বুঝতে পারেন যে পুরানো সিস্টেমের অনেকগুলি বাগ পুরানো সিস্টেমটি যেভাবে কাজ করেছিল, আদর্শ সিস্টেমটি কীভাবে কাজ করা উচিত সে সম্পর্কিত কোনও যুক্তিযুক্ত যুক্তি নয়।
Tjart

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

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

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

109

আমি দুটি বড় লেখায় অংশ নিয়েছি। প্রথম একটি ছোট প্রকল্প ছিল। দ্বিতীয়টি ছিল একটি সফ্টওয়্যার সংস্থার মূল পণ্য।

বেশ কয়েকটি সমস্যা রয়েছে:

  • পুনর্লিখনগুলি সর্বদা প্রত্যাশার চেয়ে বেশি সময় নেয়।
  • পুনরায় লেখকের গ্রাহকের সরাসরি প্রভাব / সুবিধা নেই।
  • পুনর্লিখনের জন্য নিবেদিত ক্ষমতা গ্রাহককে সমর্থন করার জন্য ব্যবহৃত হয় না।
  • আপনার যদি 100% ডকুমেন্টেশন না থাকে তবে আপনি পুনরায় লেখার সাথে কার্যকারিতা হারাবেন।

পুনর্লিখনগুলি হ'ল আসল উত্তর খুব কমই। আপনি কোনও কিছু না হারিয়ে এবং প্রচুর ঝুঁকি ছাড়াই কোডের অনেকগুলি রিফ্যাক্টর করতে পারেন।

পুনরায় লেখকদের উত্তর হতে পারে যদি:

  • আপনি অন্য ভাষা বা প্ল্যাটফর্মে স্যুইচ করছেন।
  • আপনি ফ্রেমওয়ার্ক / বাহ্যিক উপাদানগুলি স্যুইচ করছেন।
  • বিদ্যমান কোডবেস আর রক্ষণাবেক্ষণযোগ্য নয়।

তবে আমি দৃact়ভাবে রিফ্যাক্টরিং ব্যবহার করে ধীর পদ্ধতির পরামর্শ দিচ্ছি। এটি কম ঝুঁকিপূর্ণ এবং আপনি আপনার গ্রাহকদের খুশি রাখবেন।


11
রিফ্যাক্টর পদ্ধতির জন্য +1। প্রচুর সময় বিদ্যমান সিস্টেমটি পুনর্লিখন এবং বজায় রাখতে পর্যাপ্ত সময় বা ম্যানহোরস নেই।
রায়ান হেইস

এটি বর্তমানে একটি ডেমো অ্যাপ্লিকেশানের জন্য ব্যবহৃত হয় (কোনও গ্রাহক সম্প্রতি এটি কিনেছেন না এবং আমি এটি পুনরায় তৈরি করার উপযুক্ত সময় এখন পেয়েছি)।
জন

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

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

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

72

এটি পুনর্লিখনের সময় যখন:

অ্যাপলিকেশনটির পুনর্লিখনের ব্যয় + সময়ের সাথে সাথে বর্তমান সিস্টেম বজায় রাখার ব্যয়ের তুলনায় পুনর্লিখিত অ্যাপ্লিকেশনটি বজায় রাখা কম হয়।

কিছু বিষয় যা বর্তমানকে আরও ব্যয়বহুল রক্ষণাবেক্ষণ করে:

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

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

16
আমি পয়েন্ট # 2 সম্পর্কে এখানে জিগ্লিং করছি।
পল নাথান

4
@ পল: যখন একজন ক্লায়েন্ট আমাকে তা বলেছিল আমি তখনও করেছি, তখন আমি জানতে পেরেছিলাম যে তারা গুরুতর ... এবং আমি পুনর্লিখনের জন্য প্রয়োজনীয়তা সংগ্রহ করব be কি উত্তেজনাপূর্ণ দিন ছিল।
রায়ান হেইস

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

2
আমি এই প্রতিক্রিয়া পছন্দ, মজার এবং সত্য। আমি "কম" এর ঠিক আগে "পরিমাণ" যুক্ত করতে চাই। এতবার দাবি করা সহজ, তবে অপচয় হওয়া সময়কে মাপকাঠিতে সক্ষম হওয়া জরুরী।
কেভিন হু

17

যদি আপনার প্রকল্পের আর্কিটেকচারে একটি মৌলিক পরিবর্তন প্রয়োজন হয়, তবে এটি নতুন করে শুরু করার সম্ভবত সময় এসেছে।

এমনকি এটির সাথে, সম্ভাব্যভাবে বড় আকারের কোড থাকবে যা আপনার নতুন প্রকল্পে পুনরায় ব্যবহারের জন্য মূল্যবান।

সতর্কতা সতর্ক যদিও। একটি বর্তমান প্রকল্পের তার ব্যবসায়ের নিয়মগুলি পরীক্ষিত এবং প্রকৃত ব্যবহারের অগণিত ঘন্টা সহ পরিমার্জন করে থাকবে, যা এমন কিছু যা স্ক্র্যাচ থেকে শুরু হওয়া প্রকল্পের ক্ষেত্রে সত্য হবে না।

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


3
আপনার খুব সতর্কতা অবলম্বন করা উচিত 'কোডের বৃহত সোয়াথগুলি পুনরায় সংযুক্ত করুন', এটি অব্যবহৃত লিগ্যাসি কোড এবং দুর্বল কোড কাঠামোর দিকে নিয়ে যেতে পারে। রিফ্যাক্টরিং আমার মতে আরও ভাল সমাধান।
mrwooster

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

1
+1 টি। এছাড়াও, পুনর্লিখনে সময় লাগবে, সেই সময়ে রক্ষণাবেক্ষণ করতে হবে, তবে উভয় কোড বেসগুলিতে একই পরিবর্তনগুলি করা প্রয়োজন।
ল্যারি কোলেম্যান

12

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

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


হাফস্টাডটারের আইন উল্লেখ করার জন্য +1 ।
বেলনর্ন

11

বন্ধ করুন! Rewriting প্রায় কখনোই উত্তর। প্রায়শই না, রিফ্যাক্টরিং একটি ভাল বাজি।


অবশ্যই, হয় বার যখন একটি লেখা সমর্থনযোগ্য:

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

আমি কেন পুনর্লিখনের উপর রিফ্যাক্টর করার পরামর্শ দিচ্ছি তা বোঝার জন্য, পুনর্লিখনের সাথে কী জড়িত তা বিবেচনা করুন। তোমাকে অবশ্যই:

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

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

রিফ্যাক্টরিংয়ের বড় সুবিধা হ'ল:

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

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


2
পুনরায় লেখার চেয়ে কেন প্রায়শই রিফ্যাক্টরিং করা না কেন আপনি এই উত্তরটি প্রসারিত করে বলতে পারেন? এবং পুনর্লিখনের উত্তর কখন হবে ?
গ্যাবলিন

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

10

এই গ্রাফিকটি সহায়তা করতে পারে, এটি কোডের মান মানের এবং অ্যাপ্লিকেশনটির ব্যবসায়িক মানের একটি ফাংশন:

এখানে চিত্র বর্ণনা লিখুন

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


4
আপনি কেন কম ব্যবসায়িক মূল্য সহ একটি প্রকল্প পুনর্লিখনের জন্য বিনিয়োগ করবেন? শুধু এটি স্ক্র্যাপ!
জর্জেন ফগ

এ কারণেই এটি "প্রতিস্থাপন বা ..." রচনা করে। আপনি মান আছে এমন কিছু দিয়ে প্রতিস্থাপন করতে পারেন। বা এটিকে এমন কিছুতে পরিণত করুন যার মান রয়েছে। তবে আপনার একটা কথা আছে "এটিকে স্ক্র্যাপ করুন" বিকল্পটি যুক্ত করতে আমি এটি সম্পাদনা করব।
তুলিনাস কর্ডোভা

8

আমি মনে করি আমি আমার ক্যারিয়ারের একমাত্র পরিস্থিতি যেখানে বড় লেখার উত্তর:

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

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

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


আপনার নিয়োগকর্তার মতো শব্দগুলি গ্রাহকদের সাথে কথা বলার এবং পরিস্থিতি ব্যাখ্যা করার জন্য তাদের সাহায্য করার সর্বোত্তম উপায় কী হতে পারে তা বোঝাতে হবে, যদিও এর অর্থ তাদের প্রাথমিকভাবে আরও বেশি অর্থ প্রদান করতে হবে, কারণ তারা দীর্ঘমেয়াদে সঞ্চয় করবে।

7

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

16 বিট কোডটি 32 এ স্থানান্তর করা এক ব্যক্তির দ্বারা এক মাসে করা যেতে পারে, তবে NOOOOOOOOO, এটি তৈরি করার জন্য আমাদের এটি পুনরায় লিখতে হয়েছিল, এটি আরও ভাল ছিল Soooooooooo। এই জিনিসটি অন্যান্য শিল্পের জন্য অভিযোজিত হতে পারে, তাদের এমনকি শুরু করার আগেই পূর্ণ চশমা এবং স্যুয়েডো-কোড থাকবে। চশমা তৈরি করা হয়েছিল, তবে আসল কোডটি লেখার জন্য খুব বেশি সময় লাগেনি। এটি দেরিতে প্রকাশিত হয়েছিল, 16 বিট 'স্টার্ট' এর চেয়ে বেশি বাগ সহ (এটি v.3.0 এ ছিল এবং অবশেষে এমন এক পর্যায়ে পৌঁছেছিল যে কেউ নতুন বাগের খবর না দিয়েই আমরা প্রায় এক সপ্তাহে এটি তৈরি করেছি)।

আপনি মনে করতে পারেন যে একই অ্যাপ্লিকেশনটি 3-4 বার পুনরায় লেখালেখি কিছু উন্নতি ঘটাতে পারে, তবে আমি মনে করি না জিইউআইয়ের ফ্রন্ট-এন্ডটি এতটা ন্যায়সঙ্গত হতে পারে।

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


5

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

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

আমরা কখনই পুরো বিষয়টি পুনরায় লিখিনি। আমরা যদিও নতুন কাজের জন্য সেই প্ল্যাটফর্মটি ব্যবহার বন্ধ করে দিয়েছি এবং একটি নতুন নতুন প্রকল্পের জন্য একটি নতুন নতুন প্ল্যাটফর্ম তৈরি করেছি। এটি অনুমোদিত হয়েছে এবং আমরা যুক্তিসঙ্গত সময়ে একটি দুর্দান্ত পণ্য সরবরাহ করেছি।


5

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

এই এসপি প্রোগ্রামটি বিভিন্ন জিনিসগুলিতে ছড়িয়ে পড়ে

  • include(close.aspx) যার অভ্যন্তরে কোডের একটি লাইন রয়েছে যা সর্বশেষ উন্মুক্ত ডাটাবেস সংযোগটি বন্ধ করে দেয়।
  • লিগ্যাসি কোডটি এলোমেলোভাবে মন্তব্য করেছে
  • সুরক্ষার জন্য কোনও বিবেচনা নেই
  • স্প্যাগেটি কোড, এটির কয়েক হাজার লাইন। সবই এক ফাইলে।
  • তাদের নামের পিছনে কোনও স্পষ্ট অর্থ ছাড়াই কার্য এবং ভেরিয়েবলগুলি

আমাদের যদি কখনও সামান্য পরিবর্তন আনার প্রয়োজন হয় তবে এটি দুঃস্বপ্নের মোডে কাল-তোহের এক সাথে পাঁচটি গেম খেলার মতো।

আমাকে কার্যকারিতাটির প্রতিলিপি তৈরি করতে এবং এমন একটি পণ্য তৈরি করার জন্য নিয়োগ করা হয়েছিল যা শিল্পের অন্যদের কাছে কাস্টমাইজযোগ্য এবং বিক্রয়যোগ্য হতে পারে। সমস্যাটি হ'ল প্রতিটি জিনিস প্রতিটি ব্যবসায়ের চাহিদা পূরণের জন্য এই জিনিসটি গত 10 বছরে লেখা হয়েছে (ভাল, আমি যাইহোক তাদের প্রায় পাঁচ বা ছয় সিগমা বলতে পারি)।

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


4

জোল স্পলস্কির এই সম্পর্কে একটি দুর্দান্ত নিবন্ধ রয়েছে: জিনিসগুলি আপনার কখনই করা উচিত নয়, প্রথম ভাগ

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

আপনি ১০০% নিশ্চিত হতে পারবেন না (যখন নেটস্কেপও ভুল করেন (জোয়েল আর্টিকেল থেকে)), আমার মনে হয়েছিল জোলের নিবন্ধটি sentশ্বর প্রেরণ করা হয়েছিল, কারণ আমি হতাশাবাদী হতে পারি এবং কোড ভাবনা দূরে ফেলে দিতে ভালোবাসি আমি সবসময় এটি আরও ভাল লিখতে পারি সময়, তবে আমি বুঝতে পেরেছি এখন এটির জন্য অনেক খরচ

একটি সুনির্দিষ্ট উত্তর দেওয়ার জন্য, আমি কেবলমাত্র এটিই বলব যে আপনাকে একটি সম্পূর্ণ ব্যয় বনাম মান বিশ্লেষণ করতে হবে।

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

ঠিক আমার 2 সেন্ট ঠিক আছে ??


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

শাখা প্রশাখার জন্য +1। প্রচুর লোক "পুনর্লিখন করবেন না" বলে কারণ মনে হচ্ছে আপনি পুরানো কোড ফেলে দিচ্ছেন - তবে আপনি তা করেন না। আপনার সমান্তরাল কোডবেস থাকতে পারে।
লাঞ্চমিট317

ন্যায়সঙ্গতভাবে, আপনি যদি এমন ব্যক্তি হন যে জোয়েল স্পলস্কিকে পরামর্শের জন্য জিজ্ঞাসা করেন, তবে আপনার একটি সম্পূর্ণ পুনর্লিখন করা উচিত নয় :-) এবং অন্যথায়, আপনি কেবলমাত্র পুনর্লিখন করা উচিত যদি আপনি সমস্ত স্টেকহোল্ডারকে বোঝাতে পারেন কেন জোলের যুক্তি গণনা করা হয় না? আপনার নির্দিষ্ট ক্ষেত্রে
gnasher729

3

বিদ্যমান সমাধানটি স্কেল করে না।

আমি আপনার দিকে তাকাচ্ছি, এমএস অ্যাক্সেস।


আপনি সঠিকটির দিকে তাকিয়ে আছেন কিনা তা নিশ্চিত নই। জেট রেডকে স্কেল করার জন্য কখনও বোঝানো হয়নি, আফাইক AI
জেনসজি

এই প্রশ্ন জিজ্ঞাসা উত্তর কিভাবে?
gnat

3

জোয়েলের মতে, বড় বড় লেখাগুলি হ'ল কোনও সংস্থা সবচেয়ে খারাপ কৌশলগত ভুল করতে পারে:

যে জিনিসগুলি আপনার কখনই করা উচিত নয়, প্রথম ভাগ

... এটি মনে রাখা জরুরী যে আপনি যখন প্রথম থেকে শুরু করেছিলেন তখন বিশ্বাস করার কোনও কারণ নেই যে আপনি প্রথমবারের চেয়ে আরও ভাল কাজ করতে যাচ্ছেন। প্রথমত, আপনার কাছে সম্ভবত একই প্রোগ্রামিং টিম নেই যা একটি সংস্করণে কাজ করেছে, সুতরাং আপনার কাছে আসলে "আরও অভিজ্ঞতা" নেই। আপনি কেবল বেশিরভাগ পুরানো ভুল আবার করতে যাচ্ছেন, এবং এমন কিছু নতুন সমস্যা প্রবর্তন করবেন যা মূল সংস্করণে ছিল না।

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


5
হ্যাঁ। আমি তার সাথে কিছু পাল্টা সন্ধান করছিলাম। এটি কখনও কখনও করতে হবে।
জন

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

জোয়েস নিবন্ধটি ভাল কারণ এটি সাবধানে ব্যাখ্যা করে যে কীভাবে খারাপ জিনিসগুলি যেতে পারে।

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

আমি ভেবেছিলাম যে জোয়েল মূল ধারণাটি হিট করেছে, "আপনি কখনই জানেন না যে কোন সিদ্ধান্ত নথিভুক্ত করা হয়নি যে আপনাকে কঠিন পদ্ধতি শিখতে হবে"
ম্যাথএট্যাক

2

কখনই না, সর্বদা রিফ্যাক্টর - সত্য যদি কোডটি আপনার দ্বারা লিখিত হয় - আপনি এর থেকে আরও ভাল করতে পারবেন না।

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

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



+1 আমি আপনার মতামতটি চাই, এপিআই-র একটি নতুন সেটটিতে পুনর্লিখন সম্পর্কে আপনার মতামত জানতে চান? (আমার উত্তর নীচে দেখুন)
গিদিওন

হ্যাঁ, এটি ভাল পয়েন্ট। মাইক্রোসফ্ট উইনএক্সপি কোড পুনরায় লিখেছিল এবং তারা এমনকি প্রথম ভিস্তার খুচরা সংস্করণে ফাইল মুছতে / অনুলিপি পেতে পারে না। যখন তারা কেবল তাদের কোড ভিত্তিতে অগ্রগতি করছিল তখন আমরা ক্রমাগতভাবে আরও ভাল মানের (W3.11 => W95 => W98 => এমই => এক্সপি) পাচ্ছি, ভিস্তার যেখানে তারা অনেকগুলি মূল অংশ পুনরায় লিখেছিল একটি বিপর্যয়। নতুন এপিআইয়ের জন্য ... আমি বর্তমান কোডটি যতটা অক্ষত রাখতে পারি তার জন্য পৃথক করব এবং উচ্চতর স্তরে নতুন এপিআই ব্যবহার করব। যেমন। আপনার মূল ক্লাসগুলি যেমন রয়েছে তেমন থাকে তবে নতুন API ব্যবহার করে ইন্টিগ্রেশন করা হয় is সবকিছু এত অগোছালো না হলে 0 থেকে শুরু করা ছাড়া আর কিছুই করা যায় না
স্লেভেক

1
"... সত্যটি যদি কোডটি আপনার দ্বারা লেখা থাকে - আপনি এর থেকে আরও ভাল করতে পারবেন না।" আমার কাছে যথেষ্ট প্রতিনিধি থাকলে এই পোস্টটি ডাউন-ভোট দেবে। এটি পরাজিত, অবাস্তব এবং এ থেকে বোঝা যায় যে কোনওভাবে লোক বিন্দুতে অগ্রসর হতে পারে না তারা হ'ল কোডটি তারা অতীতে লেখার কোডের উন্নতি is
JᴀʏMᴇᴇ

1
@ জ্যামু: সম্মত - প্রথমবার প্রয়োগ করার সময় আপনি যদি কিছুই শিখেন না এবং কোনও অভিজ্ঞতা অর্জন না করেন এবং / অথবা আপনি যদি আরও ভাল কাজ করতে না পারেন তবে আপনার আরও জ্ঞান / অভিজ্ঞতা / পূর্ববর্তী বিষয় রয়েছে; তাহলে আপনি আলু এবং প্রোগ্রামার নন।
ব্রেন্ডন

2

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


2

"যদি আমি একাদশে যাচ্ছিলাম তবে এখান থেকে শুরু হবে না" সম্পর্কে ক্লাসিক রসিকতা রয়েছে।

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

  • জন্তুটিকে বজায় রাখতে এবং ক্রমবর্ধমানভাবে চুল্লি করার জন্য কার্যকারিতা যুক্ত করার জন্য খুব বেশি চাপ,

  • বিভাগে খুব সামর্থ্য,

  • বর্ধিত কাজের জন্য ক্লায়েন্ট বা পরিচালনা থেকে খুব সামান্য কেনা,

বা যাই হোক না কেন, এবং সমস্যাটি অসহনীয় পর্যায়ে পৌঁছানো অবধি এই ঘটনাটি আরও দূরে সরে যায়।

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


2

পুনরায় লেখকটি এমন একটি কৌশল অনুসরণ করতে অনুমতি দেয় যা প্রতিযোগিতামূলক প্রান্তটি সরবরাহ করে বা তার গ্রাহকদের আরও ভালভাবে এমন কোনও উপায়ে পরিবেশন করতে দেয় যাতে বর্তমান আর্কিটেকচারটি সামঞ্জস্য করতে পারে না It's

পরিবর্তে, পুনর্লিখনগুলি প্রায়শই পরিচালিত উদ্বেগগুলি হ্রাস করতে ঘটে:

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

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

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

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

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


দেখে মনে হচ্ছে আপনার সেই দিকটি রিফ্যাক্টর সক্ষম হওয়া উচিত। রিফ্যাক্টরিং করার সময়, আপনার প্রয়োজনীয় নমনীয়তা তৈরি করার বিষয়টি আপনার মনে রয়েছে যাতে পরবর্তী বৈশিষ্ট্যটি সহজে লেখা যায়।
আয়ান

1

সম্পূর্ণ নতুন প্রযুক্তিতে যাওয়ার সময় পছন্দসই কার্যকারিতা সরবরাহ করার প্রয়োজন হয়।

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

"কাঙ্ক্ষিত কার্যকারিতা সরবরাহ করা দরকার": প্রায় 2000 সালের দিকে, আমি বক্সের বাইরে থাকা থ্রেডিং, একটি অবজেক্ট ক্যাশে এবং ক্লায়েন্ট-নিয়ন্ত্রিত লেনদেন সক্ষম করতে সি ++ থেকে জাভাতে একটি প্রধান সার্ভার উপাদান পুনরায় লেখার জন্য একটি প্রকল্প শুরু করেছি। সেই সময়, সি ++ এর জন্য একাধিক থ্রেডিং লাইব্রেরি ছিল যা আমাদের সমর্থন করতে হত এবং আমাদের ডাটাবেস কোডের বেশিরভাগ থ্রেড-সক্ষম করার জন্য একটি প্রায়-সম্পূর্ণ পুনরায় লেখার প্রয়োজন ছিল। যেমন ক্লায়েন্ট নিয়ন্ত্রিত লেনদেন ... পুরানো স্থাপত্যের সাথে ঘটবে না।

তারপরেও, আমি নিশ্চিত নই যে আমি বর্তমানের সিস্টেমের আচরণ সম্পর্কে বিস্তারিত জ্ঞান ব্যতীত আমি পুনরায় লেখার কাজটি করেছি, এবং এটি তুলনামূলকভাবে পরিষ্কার কোড ছিল যা তার 11 বছরের জীবনে খুব বেশি ওয়ার্ট বিকাশ করে নি।


0

আপনি যে পয়েন্টটি শুরু করতে হবে তা স্থির করার জন্য, আপনার বর্তমান প্রকল্পে চালিয়ে যাওয়ার মানটি ওভার শুরু হওয়ার সাথে মানের চেয়ে কম হয়ে গেলে আপনার কাজ করা উচিত।

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


0

আমার মেট্রিকের সাথে আপনাকে পুনরায় লেখার ন্যায্যতা জানাতে দুটি শর্ত পূরণ করতে হবে:

  1. পুনর্লিখনের পরে নতুন বৈশিষ্ট্যগুলি সহজ / দ্রুত / কম বগি লিখতে হবে
  2. পুনর্লিখনটি বর্তমান নতুন বৈশিষ্ট্য যুক্ত করার চেয়ে কম বা সমমান সময় নেবে।

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

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

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


0

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

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


0

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

প্রায় কোনও বাস্তব বিশ্বের দৃশ্যের জন্য যদিও আমি কেবল জায়গায় রিফ্যাক্টরিংয়ের পরামর্শ দেব। ^: _ ^। পুনর্লিখনগুলির জন্য অনেকগুলি লুকানো, অপ্রত্যাশিত ব্যয় হতে পারে যখন অননুমোদিত আইনী এবং ব্যবসায়ের প্রয়োজনীয়তা পপ-আপ শুরু হয় এবং শেষ মুহুর্তে হ্যাকিংয়ের জিনিসগুলি শেষ মুহুর্তে শুরু হয়।

== বৃহত্তর ভাল, এবং স্টাফ জন্য জায়গায় রিফ্যাক্টরিং ==

নিয়মিত পুরানো বর্ধিত পদ্ধতির সাথে উত্তরাধিকারের কোডটি রিফ্যাক্টরিং,

  1. আপনার যদি সুযোগটি ইউএমএলে রূপান্তরিত হয় এবং সেখানে যে কোনও ছোট্ট আর্কিটেকচার রয়েছে তা নথি করুন।
  2. আপনি যদি সংস্করণ নিয়ন্ত্রণে থাকেন তবে কিছু কোড মন্থন প্রতিবেদন তৈরি করা এবং কোন ফাইল এবং ফাইল বিভাগগুলিকে সর্বাধিক ঘন ঘন পরিবর্তন করা হয়েছে তা নির্ধারণ করুন। এগুলি একটি নোট করুন কারণ এগুলি সম্ভবত আপনি যে ক্ষেত্রগুলির সাথে প্রথমে মোকাবেলা করতে চান সেগুলি হবে।
  3. আপনি কোনও কোড পরিবর্তন করার আগে সর্বদা কিছু পরীক্ষার কভারেজ যুক্ত করার চেষ্টা করুন (এমনকি কুৎসিত পূর্ণ স্ট্যাক কার্যকরী পরীক্ষাগুলিও করবে) will যদি বড় অগোছালো প্রক্রিয়াজাতীয় কোড এক্সট্রাক্ট লজিকের সাথে মোকাবিলা করে আপনি কিছু যুক্তিসঙ্গত নাম পদ্ধতি বা ফাংশনে রূপান্তর করতে চান এবং যদি সম্ভব হয় তবে আপনার নতুন পদ্ধতিটি যাচাই করে এমন কিছু পরীক্ষার কেস যুক্ত করুন। আপনার যা কিছু godশ্বরকে ভয়ঙ্কর হ্যাক করে নিন এবং যদি সম্ভব হয় তবে পরিবর্তনটি পরমার্থী করুন যদি এটি মার্জিন প্রস্থ বা শিরোনামের মতো সাধারণভাবে কিছুচিহ্নযুক্ত হয় তবে পরের বারটি আপডেট করার জন্য এটি আরও কিছুটা সোজা এগিয়ে থাকবে।
  4. অ্যাডাপ্টারের প্যাটার্নটি ব্যবহার করুন এবং যুক্তিযুক্ত নামযুক্ত শ্রেণি এবং পদ্ধতিগুলির একগুচ্ছ অধীনে লিগ্যাসি কোডের নয়ার বিটগুলি লুকিয়ে রেখে কাজ করুন যাতে সর্বাধিক সাধারণ কাজগুলির জন্য আপনি এবং অন্যান্য বিকাশকারীরা আপনাকে সম্পাদন করে যাতে পিছনে চলছে এমন ভীতিকর বিট সম্পর্কে উদ্বিগ্ন হওয়ার দরকার নেই সেই সুন্দর ছোট্ট পরিষ্কার পদ্ধতি এবং ক্লাসগুলির পিছনে যে পেছনে আপনি সেই উত্তরাধিকারের কোডটি আড়াল করেছেন - সেই সুন্দর পরিবারগুলির মতো যারা বিকৃত খুনি জম্বি প্রাক্তন পরিবারের সদস্যদের বার্নায় রাখে যাতে তারা দিনের বেলা নষ্ট না করে খামার । । স্বাভাবিকভাবে।
  5. আপনি কোডের বিভাগগুলি সরিয়ে ফেলতে এবং পরিষ্কার করতে থাকায় আপনার পরীক্ষার কভারেজ বাড়িয়ে তুলুন। যখন আপনি বর্ধমান আত্মবিশ্বাসের সাথে প্রয়োজন / পছন্দসই হন তখন আপনি আরও গভীর খনন করতে পারেন এবং আরও বেশি কোড "পুনর্লিখন" করতে পারেন।
  6. আপনার কোডবেস উন্নত করতে অবিরত করতে পুনরাবৃত্তি করুন বা অতিরিক্ত রিফ্যাক্টরিং পদ্ধতির প্রয়োগ করুন।

বিমূর্ততা দ্বারা শাখা

  1. আপনি যে কোডটি মুছতে চান তাতে সমস্যার স্থানটি নির্ধারণ করুন (অধ্যবসায় স্তর, পিডিএফ জেনারেটর, চালানের ট্যালি মেকানিজম, উইজেট জেনারেটর ইত্যাদি)।
  2. সাধারণ আচরণের পাশাপাশি এই কার্যকারিতাটিকে লক্ষ্যবস্তু করে এমন কোড কোডের বিরুদ্ধে কিছু কার্যকরী পরীক্ষার কেসগুলি (স্বয়ংক্রিয় বা ম্যানুয়াল তবে আপনি স্বয়ংক্রিয় জানেন) চালান (প্রয়োজনে লিখুন)।
  3. বিদ্যমান উত্সবেস থেকে কিছু যুক্তিসঙ্গত ইন্টারফেস সহ একটি শ্রেণিতে সেই উপাদানটির সাথে যুক্ত যুক্তিটি বের করুন।
  4. সমস্ত কোড যাচাই করুন এখন ক্রিয়াকলাপ সম্পাদন করতে নতুন ইন্টারফেস ব্যবহার করছে যা পূর্বে পুরো কোড জুড়ে এলোমেলোভাবে ছড়িয়ে পড়েছিল (কোড বেসটি গ্রেপ করুন, নতুন ক্লাসে একটি ট্রেস যুক্ত করুন এবং যে পৃষ্ঠাগুলিকে এটি কল করা উচিত তা যাচাই করুন ইত্যাদি) এবং তা কোন একক ফাইলকে সংশোধন করে কোন প্রয়োগকরণ ব্যবহৃত হবে তা আপনি নিয়ন্ত্রণ করতে পারেন ((অবজেক্ট রেজিস্ট্রি, কারখানার শ্রেণি, যাই হোক না কেন IActivityXClass = সেটিংস.অ্যাকটিভিটিএক্সপ্লিমেন্টার ();)
  5. ক্রিয়ামূলক পরীক্ষার কেসগুলি পুনরায় চালু করুন যা যাচাই করে যা এখনও আপনার নতুন ক্লাসে সমস্ত ক্রিয়াকলাপ এক্স থ্রোইনের সাথে কাজ করছে verify
  6. নতুন ক্রিয়াকলাপ এক্স র‌্যাপার ক্লাসের আশেপাশে যেখানে ইউনিট পরীক্ষা সম্ভব সেখানে লিখুন।
  7. উত্তরাধিকার বাস্তবায়নের চেয়ে কম উন্মাদ স্প্যাগেটি যুক্তিযুক্ত একটি নতুন শ্রেণি প্রয়োগ করুন যা উত্তরাধিকার শ্রেণীর মতো একই ইন্টারফেসের সাথে মেনে চলে।
  8. লিগ্যাসি ক্লাসের জন্য আপনার লেখা ইউনিট পরীক্ষায় নতুন শ্রেণি পাস করেছে তা যাচাই করুন।
  9. আপনার কোডটি রেজিস্ট্রি / ফ্যাক্টরিমেড / পুরানো শ্রেণীর পরিবর্তে নতুন ক্লাসটি ব্যবহার করে যা কিছু পরিবর্তন করুন by
  10. আপনার কার্যকরী পরীক্ষা এখনও পাস হয়েছে তা যাচাই করুন।

বন্ধ নীতি এবং একটি সাধারণ ব্যবসার লজিক / দৃ Pers় স্তর স্তর খুলুন

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

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

0

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

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

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

এম্বেডেড লিনাক্স সিস্টেমগুলি ... নতুন সরঞ্জামগুলি ইনস্টল করার বিষয়ে চিন্তা করুন- এসএনএন থেকে গিটে স্যুইচ করুন। অথবা আপনার সিস্টেমে ভি ইত্যাদি যোগ করুন ইত্যাদি etc.

এটি সবসময় পুনরায় লেখক বনাম পুনরায় লেখার দরকার হয় না .. আপনার আর্কিটেকচারটি সম্ভবত উন্নতির প্রয়োজন, তবে এটি কাজ করে ... সম্ভবত আপনার কোডটি কীভাবে রচিত হয় সে সম্পর্কে আপনার কেবল ভাবনা দরকার etc.


-2

আমি মনে করি না যে আমি লোকদের কোনও উত্তরাধিকার অ্যাপ্লিকেশন পুনরায় লিখতে দেখেছি ।

যা ঘটে তা হ'ল লোকেরা আলাদা আলাদা স্থাপত্য, প্রযুক্তি ইত্যাদির সাথে সম্পূর্ণ নতুন অ্যাপ্লিকেশন লিখছে যা পূর্ববর্তী প্রজন্মের সাথে কিছু বৈশিষ্ট্যযুক্ত। এবং এটিকে অ্যাপ্লিকেশন ২.০ বলা হয়, তবে বাস্তবে এর সাথে খুব কম জিনিস মিল রয়েছে common

তবে আপনি যে বৈশিষ্ট্যটির সমতা অর্জনের চেষ্টা করছেন সে অর্থে এটি আসলটির "পুনর্লিখন" নয়।

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