কীভাবে দৈত্য আঠালো পদ্ধতি এড়ানো যায়?


21

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

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

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

আমি কীভাবে এ জাতীয় পদ্ধতি এড়াতে পারি? এটি কি জট বাঁধার উপাত্তের লক্ষণ বা এমন কোনও কিছুর প্রতিফলন যা আমি ভুল করছি?


3
এপিআইগুলি বোঝাতে ব্যবহৃত হয়। যে জটলা জবাব পেয়েছে সেখান থেকে আপনি একটি এপিআই তৈরি করেছিলেন এবং তারপরে এটি আবার জট বাঁধা। হতে পারে এটি কেবল ব্যবসায়ের প্রয়োজনীয়তা। তবে আপনি মান যুক্ত করেছেন কারণ অন্য কেউ এসে আপনার এপিআই ব্যবহার করে সহজেই অন্য আঠা ফাংশন করতে পারে। হাত কাঁপানোর দরকার নেই ...
আদিত্য এমপি

1
আমরা কি এখানে অবজেক্টগুলিতে কথা বলছি বা পুরো জায়গা জুড়ে কেবল ফানসি?
এরিক রিপেন

3
আমি মনে করি না যে এটি এই প্রশ্নের সদৃশ, আমি আরও কিছুটা সাধারণভাবে (এবং একটি ফাংশনের চেয়ে বৃহত্তর স্কেল) বলছি।
সে.এম.হাবস

1
এরিক - আমি এখানে বস্তু এবং পদ্ধতি সম্পর্কে কথা বলছি। আমি বেশ কয়েকটি শর্তযুক্ত মেসেজ নিয়েছি এবং সেগুলি এপিআইতে পরিণত করেছি। সমস্যাটি তখন আসে যখন এপিআই কল করার সময় আসবে। এখানে প্রথম উত্তরটি হ'ল আমি যা খুঁজছি ঠিক তা হতে পারে।
সে.এম.হাবস

2
পৃথিবীতে কিভাবে এটি একটি সদৃশ?
ম্যাটড্যাভি

উত্তর:


12

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

দুটি কোডবেস সহ জীবন

লেজারএসএমবি প্রায় 5 বছর ধরে দুটি কোডবেস নিয়ে বেঁচে আছে এবং পুরাতন কোডবেসটি নির্মূল করার আগে এটি আরও বেশ কয়েকটি হবে। পুরানো কোডবেসটি দেখতে সত্যই এক ভৌতিক ঘটনা। খারাপ ডিবি ডিজাইন, পার্ল IS->some_func(\%$some_object);কোডের মতোই নির্মাণ করে যা দেখায় যে স্প্যাগেটি রূপকটি কখনও কখনও কেন ব্যবহৃত হয় (মডিউল এবং পিছনে এবং কোনও ছড়া বা কারণ ছাড়াই ভাষাগুলির মধ্যে রূপদানের পথ)। নতুন কোডবেস ডিবি ক্যোয়ারিকে সঞ্চিত পদ্ধতিতে সরিয়ে, অনুরোধ পরিচালনার জন্য একটি ক্লিনার কাঠামো রেখে এবং আরও অনেক কিছু এড়িয়ে চলে।

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

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

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

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

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


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

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

8

মনে হচ্ছে আপনি যা করেছেন তা পূর্ববর্তী কোডবাসের জট বেঁধে নেওয়া হয়েছে এবং একটি সুন্দর মডুলার পূর্ববর্তী কোডবেস তৈরি করেছেন।

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

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


6

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


2
আঠালো-গাছ তো পাও না তখন?
পিটার বি

3
@ পিটারবি হতে পারে, তবে যখন আপনার বিভিন্ন পদ্ধতিতে আলাদা আলাদা কাজ করা হয় তখন বিভিন্ন নির্ভরতা আহরণ করা আরও সহজ। নতুন পদ্ধতিগুলি বের করার পরে আপনি আরেকটি রিফ্যাক্টরিং পাস করতে পারেন।
পলিং

1

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

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


0

দেখে মনে হচ্ছে আপনি API টি বাস্তবায়নের কথা চিন্তা করেই API কে রিফ্যাক্ট করছেন তবে API যে কোডটি ব্যবহার করছেন - তা আপনি যে "আঠার কোড" এর কথা বলছেন তা নিয়ে যথেষ্ট চিন্তা না করে।

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

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