কোনও স্পষ্ট বিমূর্ততা সহ কোড সদৃশ


14

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

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

এই জাতীয় কিছু সম্বোধনের সর্বোত্তম উপায় কি বলে আপনি মনে করেন?

উত্তর:


18

কখনও কখনও কোড সদৃশ একটি "শ্লেষ" এর ফলাফল: দুটি জিনিস একই দেখায়, কিন্তু হয় না।

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

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

সুতরাং, এই দুটি অনুলিপি কোড টুকরা জন্য, আমি জিজ্ঞাসা করব: একটি পরিবর্তন প্রয়োজন আবশ্যক অন্যটিও পরিবর্তন করা আবশ্যক?

আপনি কীভাবে এই প্রশ্নের উত্তর দিচ্ছেন আপনাকে একটি ভাল বিমূর্ততা কী হতে পারে সে সম্পর্কে আরও ভাল অন্তর্দৃষ্টি দিতে পারে।

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

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

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


4

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

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


টাইট স্পেসে সংকুচিত প্রচুর দুর্দান্ত প্রযুক্তির জন্য +1। (আচ্ছা, বর্ণিত কৌশলগুলির জন্যও +1 হত))
ম্যাকনাইল

3

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


2

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

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

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

কীভাবে ছোট কোডের টুকরোগুলি তার ফাংশন স্বাক্ষরগুলি কী চিহ্নিত করে এবং কীভাবে বৃহত্তর টুকরোগুলি শ্রেণীবদ্ধ করা সহজ হবে তা তৈরি করে কীভাবে বিমূর্ত করুন।

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