অন্য কারও কি রিফ্যাক্টরিং সমস্যা আছে? [বন্ধ]


17

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


16
আপনার আরও কঠোর সময়সীমা দরকার :)

আপনি নিজের কোড (শখের প্রকল্পগুলি) বা আপনার কাজের অংশ হিসাবে আপনি যে কোডটি লিখছেন সে সম্পর্কে আপনি এখানে কি কথা বলছেন?
কারসন 63000


1
আপনি কি কোনও সুযোগে জীবনের অন্য কোথাও কিছুটা মলদ্বারে রয়েছেন? আমি জানি আমি যদি নিজেকে ছেড়ে দিতে পারি তবে আমি ভয়াবহভাবে ওসিডি এবং নিখুঁত হতে পারি ...
হামফ্রে বোগার্ট

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

উত্তর:


18

এই মুহুর্তগুলি যখন আমার সাথে ঘটে তখন আমি উপভোগ করি।

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

যেভাবেই হোক, নিজের ভুল থেকে শিক্ষা নেওয়া দুর্দান্ত জিনিস!


8

এই ক্রিয়াকলাপটি সীমাবদ্ধ করে এটিকে আরও উত্পাদনশীল করার জন্য এখানে কয়েকটি বিধি রয়েছে:

  • টাইম-বক্স এটি, যেমন টাইমারটি 25 মিনিটে সেট করুন
  • যখন আপনার শালীন পরীক্ষার কভারেজ থাকে তখনই এটি করুন।
  • আপনার রিফ্যাক্টরিং পরবর্তী কয়েকটি বৈশিষ্ট্য বিকাশের জন্য দরকারী করার চেষ্টা করুন

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

1
@ অস্কার: সম্মত আমি যা বোঝাতে চাইছি তা হ'ল নিজস্ব স্বার্থে রিফ্যাক্টরিং এড়ানো এবং YAGNI তৈরি করা।
আজহেগ্লোভ

7

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


3

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

যখন আমি ছোট এবং অনভিজ্ঞ ছিলাম, তখন আমি আমার প্রোগ্রামিং ক্ষমতা সম্পর্কে খুব অহঙ্কারী ছিলাম এবং সর্বদা এটি কল্পনা করতাম যে এটি সত্যই নকশা করা এবং পরিকল্পনা করা সম্ভব - সব নিখুঁত হতে হবে।

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

যে সমস্ত বললো, আমি অনুমান করা IS refactoring খুব খুব বেশী পেতে সম্ভব। আমি এখনও এটি দেখিনি। এবং আমার যত বেশি অভিজ্ঞতা আছে, তত বেশি আমি মনে করি যে যদি আরও সফ্টওয়্যার দলগুলি ধীরে ধীরে সময়সীমা বেঁধে প্রযুক্তিগত debtণে যেতে অস্বীকৃতি জানায় তবে এটি ভাল জিনিস হবে thing সর্বোপরি, রিফ্যাক্টরিংকে সত্যিকারের বিশ্বে রেখে দেওয়ার সবচেয়ে সাধারণ কারণ এটি।


2

আমি অনুভূতি বা কোড গন্ধের উপর নিখুঁতভাবে নির্ভর না করার পরামর্শ দেব।

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

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

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


1

কোনও সন্দেহ নেই যে আমি এই ফাঁদে পড়ে যাচ্ছি তবে ভবিষ্যতের সহায়তা / ডিবাগিংয়ের জন্য কিছু রিফ্যাক্টরিং গুরুত্বপূর্ণ।

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


1

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

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


1

আমি যে থাম্বের নিয়ম অনুসরণ করি তা হ'ল: আমি রিফ্যাক্টর না হওয়া অবধি যতক্ষণ না that সময়ে এটি যতটা অনুকূল হতে পারে এবং তারপরে পরিস্থিতি পরিবর্তন না হওয়া পর্যন্ত আমি আবার এটিকে রিফ্যাক্টর করি না, বা যদি আমার নতুন এবং আরও ভাল উপায় সম্পর্কে অনুপ্রেরণা না থাকে তবে জিনিসগুলি করুন (উদাহরণস্বরূপ একটি নতুন ভাষার বৈশিষ্ট্য ব্যবহার করে)।

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

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