আপনি কীভাবে সম-উপ-অনুকূল ডিজাইনের মাধ্যমে অন্তহীন পুনরাবৃত্তিটি এড়াতে পারবেন?


10

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


উদাহরণ:

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

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

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

তারপরে আমি অন্য পদ্ধতির চেষ্টা করতে পারি তবে এটির সাথে অনেকগুলি সমস্যা রয়েছে। তারপরে পরেরটি এবং তার পরে একটি


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

সম্পাদনা করুন: আমি যে প্রশ্নটি সাফ করতে চাইছি তার বেশ কয়েকটি ব্যাখ্যা রয়েছে বলে মনে হচ্ছে:

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

3
"ওও দর্শনের সাবস্ক্রাইব" করবেন না। এটি একটি হাতিয়ার, জীবনের কোনও বড় সিদ্ধান্ত নয়। এটি যখন সহায়তা করে তখন এটি ব্যবহার করুন এবং যখন তা না করে তখন ব্যবহার করবেন না।
ব্যবহারকারী 253751

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

2
ওহ সি এর নিদর্শন রয়েছে। তারা ঠিক খুব ভিন্ন নিদর্শন। :)
candied_orange

আমি সম্পাদনাতে এই বেশিরভাগ ভুল ব্যাখ্যা মুছে ফেলেছি
জোনাথন

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

উত্তর:


8

আমি যখন এর মতো কঠিন সিদ্ধান্ত নিতে পারি, আমি সাধারণত নিজেকে তিনটি প্রশ্ন করি:

  1. সমস্ত উপলব্ধ সমাধানের উপকারিতা এবং কনসগুলি কী কী ?

  2. কোন সমাধান আছে, আমি এখনও বিবেচনা করা হয়নি?

  3. সর্বাধিক গুরুত্বপূর্ণ:
    আমার প্রয়োজনীয়তাগুলি ঠিক কী? কাগজে প্রয়োজনীয়তা না, আসল মৌলিক?
    আমি কি কোনওভাবে সমস্যাটিকে সংশোধন করতে / তার প্রয়োজনীয়তাগুলি টুইঙ্ক করতে পারি, যাতে এটি একটি সহজ, সরাসরি-সামনের সমাধানের জন্য অনুমতি দেয়?
    আমি কি আমার ডেটাটিকে কিছু অন্য উপায়ে উপস্থাপন করতে পারি, যাতে এটি এত সহজ, সরল-এগিয়ে সমাধানের জন্য অনুমতি দেয়?

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

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

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

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


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

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

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

13

প্রথম জিনিসগুলি - নিদর্শনগুলি দরকারী বিমূর্ততা সব শেষে নকশা নয়, ওও নকশাকে ছেড়ে দিন।

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

এখন জিনিস মাংস:

এটি খুব কঠিন হয়ে যায় যখন প্রতিটি পদ্ধতির কাছে অন্যের মতোই সমস্যা রয়েছে বলে মনে হয়।

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

নকশার প্যাটার্ন বা পদ্ধতির ব্যবহার ছাড়াই কোডটি খুব সমস্যাযুক্ত হয়ে উঠবে তা গ্রহণ করাও কঠিন।

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

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

এর ফলে প্রেরণার ক্ষতি হয় কারণ "ক্লিন" কোডটি কখনও কখনও কোনও বিকল্প হিসাবে বন্ধ হয়ে যায়।

নিখুঁত হ'ল শত্রু। কিছু কাজ পান, তারপরে এটি রিফ্যাক্টর করুন।

ডিজাইনের এমন কোনও পন্থা রয়েছে যা এই সমস্যাটি হ্রাস করতে সহায়তা করতে পারে? এইরকম পরিস্থিতিতে এমন কি করা উচিত যার জন্য কোনও গ্রহণযোগ্য অনুশীলন রয়েছে?

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


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

@ জোনাথন - সমস্ত ডিজাইন হ'ল ট্রেড অফের একটি সিরিজ। হ্যাঁ, ডিজাইনটি ত্রুটিযুক্ত থাকলে আপনার অবিলম্বে পুনরাবৃত্তি হওয়া উচিত এবং আপনার এটির উন্নতি করার একটি সুস্পষ্ট উপায় রয়েছে। যদি কোনও সুস্পষ্ট উন্নতি না হয় তবে সম্পর্কে সন্ধান বন্ধ করুন।
টেলাস্টিন

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

8

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

এটি একটি টায়ার দিয়ে শুরু করে গাড়ি তৈরির চেষ্টা করার মতো।

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

আপনি যদি স্ক্র্যাচ থেকে এটি ডিজাইন করে প্রয়োগ করেন তবে মডিউলটি কীভাবে দেখবে? সেই "আদর্শ" থেকে কতটা দূরে আপনার বর্তমান বাস্তবায়ন।

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


4

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

এই পরিস্থিতির জন্য আমি আপনাকে যে সর্বোত্তম পরামর্শ দিতে পারি তা হ'ল:

  • একটি "বিগ ব্যাং" এর মধ্যে আপনার মূল লক্ষ্য অর্জনের চেষ্টা করবেন না ,

  • কীভাবে আপনার কোডটি আরও ছোট পদক্ষেপে উন্নত করবেন তা শিখুন!

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

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

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

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

আপনি যদি নিশ্চিত না হন তবে কোথা থেকে শুরু করবেন, কারণ আপনি জানেন না যে একটি রিফ্যাক্টরিং সহজ হয়ে উঠবে কিনা, কখনও কখনও সর্বাধিক পন্থাটি কিছু স্ক্র্যাচ রিফ্যাক্টরিং করা

অবশ্যই, আপনার আসল পরিস্থিতি আরও জটিল হতে পারে। সুতরাং শিখুন, অভিজ্ঞতা সংগ্রহ করুন এবং ধৈর্য ধরুন, এই অধিকার পেতে কয়েক বছর সময় লাগে। আমি এখানে সুপারিশ করতে পারি দুটি বই আছে, সম্ভবত আপনি তাদের সহায়ক বলে মনে করছেন:

  • Refactoring জালিয়া দ্বারা: একটি পূর্ণ ক্যাটালগ বর্ণনা খুব ছোট refactorings।

  • পালকের দ্বারা লিগ্যাসি কোডের সাথে কার্যকরভাবে কাজ করা : কীভাবে খারাপভাবে ডিজাইন করা কোডের বৃহত অংশগুলির সাথে ডিল করতে হয় এবং এটি আরও ছোট পদক্ষেপে আরও পরীক্ষামূলক করে তোলা যায় তা চমৎকার পরামর্শ দেয়


1
এটিও খুব সহায়ক। ছোট পদক্ষেপযুক্ত বা স্ক্র্যাচ রিফ্যাক্টরিং একটি দুর্দান্ত ধারণা কারণ এটি তখন এমন কিছু হয়ে যায় যা এটিকে খুব বেশি বাধা না দিয়ে অন্যান্য কাজের পাশাপাশি ধীরে ধীরে সম্পন্ন করা যায়। আমি যদি একাধিক উত্তর অনুমোদন করতে পারি!
জোনাথন

1

কখনও কখনও সেরা দুটি নকশার নীতিগুলি হ'ল KISS * এবং YAGNI **। স্রেফ "হ্যালো ওয়ার্ল্ড!" প্রিন্ট করতে হবে এমন কোনও প্রোগ্রামে প্রতিটি পরিচিত ডিজাইনের প্যাটার্ন ক্র্যাম করার প্রয়োজন মনে করবেন না।

 * Keep It Simple, Stupid
 ** You Ain't Gonna Need It

প্রশ্ন আপডেটের পরে সম্পাদনা করুন (এবং পিটার বি কিছুটা কী বলে তা মিরর করে):

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

তবে যদি কাজটি অনুপাতের বাইরে চলে যায়, তবে সমস্যাটি থেকে সর্বাধিক কুৎসিত কাজ করার জন্য এটি ব্যবহারিক সিদ্ধান্ত নেবে।


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

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

1

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

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

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

তাই টিএল; ডিআর: বিরতি নিন, জোর করবেন না, সাহায্যের জন্য বলুন।

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