সিস্টেম ত্রুটিগুলি থেকে উদ্বেগ / সহনশীল / পুনরুদ্ধার করার জন্য নকশার ধরণ / পদ্ধতির প্রস্তাব দিন, ব্যতিক্রম হ্যান্ডলিং (জাভা, সি ++, পার্ল, পিএইচপি)


13

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

কিছু ত্রুটি রিপোর্ট করা প্রয়োজন।

কিছু ত্রুটি অভ্যন্তরীণভাবে হ্যান্ডেল করা যেতে পারে (পুনরায় চেষ্টা করে বা বেমানান (এড়ানো যায়)।

এগুলি ধরার জন্য আপনি কীভাবে কোডটি গঠন করেন?

তবে সমস্ত ত্রুটিগুলি লগ করা দরকার।

কোন সেরা অনুশীলন আছে?

এবং অনুকরণের জন্য তাদের দ্বারা প্রভাবিত উপাদানগুলি পুরোপুরি পরীক্ষা করতে সক্ষম হতে হবে?

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

(স্ট্যাকওভারফ্লোতেও জিজ্ঞাসা করা হয়েছে: /programming/7432596/rec सुझाव-a-design-pattern-approach-to-exposing-tolerating-recovering-from-s সিস্টেমে তবে আমি ভেবেছিলাম এটি প্রোগ্রামারগুলিতেও জিজ্ঞাসা করা উচিত) আমি মনে করি প্রোগ্রামারদের প্রশ্নোত্তর বিস্তৃত সফ্টওয়্যার / প্রোগ্রামিং সমস্যাগুলি কভার করে যখন স্ট্যাকওভারফ্লো প্রযুক্তিগত বাস্তবায়ন আইএমএইচও সম্পর্কে আরও বেশি থাকে)।


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


@ পেটার টার্ক, মাইকেরা একটি ভাল উত্তর সরবরাহ করেছে, সম্ভবত তাদের উত্তর গ্রহণ করবে।
থেরোবাইওয়াক

উত্তর:


16

ব্যর্থ দ্রুত একটি দুর্দান্ত নকশা পদ্ধতির, এবং সম্ভবত এটি একটি নিদর্শন হিসাবে গণ্য করা যেতে পারে: http://en.wikedia.org/wiki/Fail- ব্রেকফাস্ট

আমি দরকারী হতে বেশ কয়েকটি নীতিও পেয়েছি:

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

1
এছাড়াও কৌতূহলীভাবে ব্যর্থ - যদি সম্ভব হয় তবে শেষ করার আগে পরিষ্কার করুন
স্টিভেন এ। লো

কী বিবেচনা করবেন সে সম্পর্কে পরিষ্কার পয়েন্টের জন্য +1 @ মিকেরা সম্ভবত গ্রহণযোগ্য উত্তর, আমি অন্যদের অবদান রাখার জন্য আরও কিছুক্ষণের জন্য উন্মুক্ত রেখে দেব।
therobyouknow

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

5

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

  1. এই ব্যতিক্রমটির সাথে আমি কী করতে পারি দরকারী, (লগিং ব্যতীত)? যদি উত্তরটি হ্যাঁ হয় তবে কার্যবিধির কোডটি লিখুন এবং যদি কাজের বাকী ব্যতিক্রম ছুঁড়ে দিতে পারে তবে 2 এ যান:
  2. ব্যতিক্রমটি রানটাইম ব্যতিক্রমের চারদিকে लपेटুন, এটিকে নিক্ষেপ করুন, 3 এ যান।
  3. উচ্চ-স্তরের শ্রেণিতে যেখানে একটি সম্ভাব্য ডাটাবেস / প্রক্রিয়া লেনদেন শুরু হয়েছে, ব্যতিক্রমটি ধরুন, লেনদেনটি রোলব্যাক করুন, ব্যতিক্রমটি পুনরায় করুন।
  4. টপ লেভেল শ্রেণী (যা এক যেখানে লেনদেন সূচিত হয়েছে হতে পারে), একজন লগিং যেমন পরিকাঠামোকে ব্যবহার করে ব্যতিক্রম লগ ইন করুন slf4j (সঙ্গে মিলিত log4j উদাহরণস্বরূপ), বা log4net । সম্ভব হলে অ্যাপ্লিকেশন বিকাশকারীদের সমন্বয়ে এমন বিতরণ তালিকায় ব্যতিক্রমটিকে সরাসরি ইমেল করুন।
  5. যদি কোনও জিইউআই থাকে তবে সমস্যাটির কারণটি সবচেয়ে ব্যবহারকারী-বান্ধব উপায়ে ইঙ্গিত করে একটি ত্রুটি বার্তা প্রদর্শন করুন; ব্যতিক্রম / স্ট্যাকট্রেস প্রদর্শন করবেন না, ব্যবহারকারীর যত্ন নেই এবং এটি নালপয়েন্টার এক্সেকশন ছিল তা জানা দরকার নেই।

আমার 0 টি পদক্ষেপটিও যুক্ত করা উচিত , যেখানে আমি "ব্যবসায়" ব্যতিক্রম বলি যা আমি উদ্দেশ্যমূলকভাবে ফেলে দিচ্ছি ("ব্যতিক্রম" শ্রেণিটি প্রসারিত করে আমি একটি নতুন ব্যতিক্রম) যখন ডেটা ত্রুটির কারণে কিছু জটিল চিকিত্সা কার্যকর করা যায় না, তবে এটি তারা বিশ্লেষণের সময় ব্যতিক্রম মামলা হিসাবে চিহ্নিত হয়েছে বলে ঘটেছে বলে জানা যায়।

লগিং অংশ ব্যতীত আমি "মাইকেরা" দ্বারা লিখিত পয়েন্টগুলির সাথে পুরোপুরি একমত; আমি কেবল যুক্ত করব যে ব্যতিক্রমটি একবারে লগ করা উচিত ।

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

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


লগ 4j এর জন্য +1 @ জালেন একটি পদ্ধতির হিসাবে উল্লেখ করেছেন, এটি আমি ব্যবহার করি তাই এটি অন্য কারওরূপে জানতে এটি আরও শক্তিশালী করে।
therobyouknow

0

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

আপনার সমস্ত বস্তু একবারে সঠিকভাবে কাজ করার পরে, আপনার ডিজাইনে একটি পরিষ্কার ত্রুটি-হ্যান্ডলিং দায়িত্বের স্তরক্রম নিয়ে আসা মোটামুটি সহজ হওয়া উচিত।

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