কিভাবে একটি ভাল ব্যতিক্রম বার্তা লিখতে হয়


101

আমি বর্তমানে একটি কোড পর্যালোচনা করছি এবং আমি যে জিনিসগুলি লক্ষ্য করছি সেগুলির মধ্যে একটি ব্যতিক্রম সংখ্যা যেখানে ব্যতিক্রম বার্তাটি কেবল সেখানে ব্যতিক্রম ঘটেছে সেখানে পুনরাবৃত্তি বলে মনে হচ্ছে । যেমন

throw new Exception("BulletListControl: CreateChildControls failed.");

এই বার্তায় তিনটি আইটেম বাকি ব্যতিক্রম থেকে আমি কাজ করতে পারি। আমি স্ট্যাক ট্রেস থেকে ক্লাস এবং পদ্ধতি জানি এবং আমি জানি এটি ব্যর্থ হয়েছে (কারণ আমি একটি ব্যতিক্রম পেয়েছি)।

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

ব্যতিক্রম ছোঁড়ার জন্য আপনার কাছে অন্য কোনও টিপস রয়েছে? বিশেষত নতুন ধরণের এবং ব্যতিক্রম বার্তা তৈরির বিষয়ে।


4
এগুলি কি লগ ফাইলের জন্য বা ব্যবহারকারীর কাছে উপস্থাপনের জন্য?
জন হপকিন্স

5
শুধুমাত্র ডিবাগিংয়ের জন্য। তারা একটি লগ আপ শেষ হতে পারে। সেগুলি ব্যবহারকারীর সামনে উপস্থাপন করা হবে না। আমি ব্যবহারকারীর কাছে ব্যতিক্রম বার্তা উপস্থাপনের অনুরাগী নই।
কলিন ম্যাকেয়ে

উত্তর:


70

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

এখানে কয়েকটি উদাহরণ দেওয়া হল।

Context: Saving connection pooling configuration changes to disk.
Problem: Write permission denied on file '/xxx/yyy'.
Solution: Grant write permission to the file.

এই ক্ষেত্রে, অপারেটর ঠিক কী করতে হবে এবং কোন ফাইলটি অবশ্যই প্রভাবিত করবে তা জানে। তারা আরও জানে যে সংযোগ পুলিংয়ের পরিবর্তনগুলি নেয় নি এবং পুনরাবৃত্তি করা উচিত।

Context: Sending email to 'abc@xyz.com' regarding 'Blah'.
Problem: SMTP connection refused by server 'mail.xyz.com'.
Solution: Contact the mail server administrator to report a service problem.  The email will be sent later. You may want to tell 'abc@xyz.com' about this problem.

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

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

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

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

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


1
+1 এটি একটি ভাল সিস্টেম। কোনটি আরও গুরুত্বপূর্ণ: নিশ্চিত হয়েই তথ্যটি পারা যায় বা ছোট শব্দ ব্যবহার করে?
মাইকেল কে

3
প্রসঙ্গ, সমস্যা, সমাধান সহ সমাধানের জন্য আমার পছন্দ +1
ওয়েবডেভ

1
এই কৌশলটি তাই সহায়ক। আমি অবশ্যই এটি ব্যবহার করতে যাচ্ছি।
কিড ডায়মন্ড

প্রসঙ্গটি অপ্রয়োজনীয় ডেটা। এটি স্ট্যাক ট্রেসটিতে ইতিমধ্যে উপস্থিত। রয়ে সমাধান বাঞ্ছনীয় কিন্তু সবসময় সম্ভব / দরকারী। বেশিরভাগ সমস্যা হ'ল একরকমভাবে অ্যাপ্লিকেশন বন্ধ করুন বা মুলতুবি করা ক্রিয়াকলাপগুলি উপেক্ষা করুন এবং পরবর্তী বার আপনি সফল হবেন এই প্রত্যাশায় ... ব্যতিক্রম শ্রেণির নামটি এমন হওয়া উচিত যে সমাধানটি সুস্পষ্ট হয়ে উঠবে, FileNotFoundবা ConnectExceptionআপনি কী করবেন জানেন))
gavenkoa

2
@ থমাস ফ্লিনকো আপনার উদাহরণে ট্রেসগুলিতে স্ট্যাক ট্রেসে init (), এক্সিকিউট () এবং ক্লিনআপ () থাকবে। লাইব্রেরিতে ভাল নামকরণের স্কিমা এবং পরিষ্কার / বোধগম্য এপিআই সহ আপনার স্ট্রিং ব্যাখ্যাগুলির দরকার নেই। এবং দ্রুত ব্যর্থ হন, সমস্ত সিস্টেমে ভাঙ্গা অবস্থা বহন করবেন না। অনন্য আইডির সাহায্যে ট্রেস এবং লগিং রেকর্ডগুলি অ্যাপ্লিকেশন প্রবাহ / রাষ্ট্রের ব্যাখ্যা দিতে পারে।
gavenkoa

23

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

ব্যতিক্রমটির "বার্তা" ব্যতিক্রমটির (সম্পূর্ণ যোগ্যতাসম্পন্ন) শ্রেণীর নাম

একটি ব্যতিক্রম তার নিজের সদস্য ভেরিয়েবলের মধ্যে যথাযথভাবে ঘটেছে সম্পর্কে যথাসম্ভব বিশদ থাকতে হবে; উদাহরণস্বরূপ, IndexOutOfRangeExceptionএকটিতে এমন সূচক মান থাকা উচিত যা অবৈধ বলে প্রমাণিত হয়েছিল, পাশাপাশি উপরের এবং নীচের মানগুলিও ব্যতিক্রমটি ছুঁড়ে দেওয়ার মুহুর্তে বৈধ ছিল। এইভাবে, প্রতিবিম্বটি ব্যবহার করে আপনি একটি বার্তা স্বয়ংক্রিয়ভাবে তৈরি করতে পারেন যা এটি পড়তে পারে: IndexOutOfRangeException: index = -1; min=0; max=5এবং এটি, স্ট্যাক ট্রেসের সাথে, সমস্যাটি সমাধানের জন্য আপনার প্রয়োজনীয় সমস্ত বস্তুনিষ্ঠ তথ্য হওয়া উচিত। এটিকে "সূচি -1 1 থেকে 5 এবং 5 এর মধ্যে ছিল না" মত সুন্দর বার্তায় ফর্ম্যাট করা কোনও মান যুক্ত করে না।

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

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

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

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


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

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

13

একটি সাধারণ নিয়ম হিসাবে, একটি ব্যতিক্রম বিকাশকারীদের দরকারী তথ্য (প্রত্যাশিত মান, প্রকৃত মান, সম্ভাব্য কারণ / সমাধান ইত্যাদি) দিয়ে কারণ চিহ্নিত করতে সহায়তা করা উচিত

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


+1 - প্রত্যাশিত মান বনাম প্রকৃত মানগুলি অত্যন্ত কার্যকর। প্রশ্নে প্রদত্ত উদাহরণে, আপনি কেবল এই
কথাটি

4

নেট কখনই না throw new Exception("...")(যেমন প্রশ্নের লেখক দেখিয়েছেন)। ব্যতিক্রমটি মূল ব্যতিক্রমের ধরণ এবং কখনও সরাসরি নিক্ষেপ করার কথা নয়। পরিবর্তে উদ্ভূত .NET ব্যতিক্রমগুলির মধ্যে একটি ফেলে দিন বা ব্যতিক্রম (বা অন্য কোনও ব্যতিক্রম প্রকার) থেকে প্রাপ্ত আপনার নিজস্ব কাস্টম ব্যতিক্রম তৈরি করুন।

কেন ব্যতিক্রম নিক্ষেপ করবেন না? কারণ ব্যতিক্রম ছোঁড়া আপনার ব্যতিক্রম বর্ণনা করতে কিছুই করে না এবং আপনার কলিং কোডকে এমন কোড লিখতে বাধ্য করে catch(Exception ex) { ... }যা সাধারণত কোনও ভাল জিনিস নয়! :-)।


2

আপনি যে বিষয়গুলি ব্যতিক্রমটিতে "যুক্ত করতে" সন্ধান করতে চান তা হ'ল ডেটাগুলির উপাদানগুলি যা ব্যতিক্রম বা স্ট্যাক ট্রেসের অন্তর্নিহিত নয়। সেগুলি "বার্তা" এর অংশ কিনা বা লগ করার সময় সংযুক্ত হওয়া দরকার কিনা তা একটি আকর্ষণীয় প্রশ্ন।

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

সুতরাং ... হয় তালিকাবদ্ধ বা, নেট জন্য, লগ করা ব্যতিক্রম তথ্য সংগ্রহ (সিএফ @ প্লিপ!) যোগ করুন:

  • প্যারামিটারগুলি (এটি কিছুটা আকর্ষণীয় হয়ে উঠতে পারে - এটি সিরিয়ালায়িত না হলে আপনি ডেটা সংগ্রহের সাথে যোগ করতে পারবেন না এবং কখনও কখনও একক প্যারামিটার আশ্চর্যজনকভাবে জটিলও হতে পারে)
  • অতিরিক্ত ডেটা ADO.NET বা লিনক এসকিউএল বা অনুরূপে ফিরে এসেছে (এটি কিছুটা আকর্ষণীয়ও হতে পারে!)।
  • আর কিছু যা আপাত নাও হতে পারে।

কিছু জিনিস অবশ্যই আপনার প্রাথমিক ত্রুটি প্রতিবেদন / লগ এগুলি না হওয়া অবধি আপনার প্রয়োজন হবে না। আপনার প্রয়োজনীয় জিনিসগুলি না পাওয়া পর্যন্ত আপনি বুঝতে পারবেন না এমন কিছু জিনিস আপনি পেতে পারেন।


0

ব্যতিক্রমসমূহ কী কী জন্য ?

(1) ব্যবহারকারীকে কিছু ভুল হয়েছে?

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

"ত্রুটি" বার্তা স্পষ্ট এবং succinctly রাষ্ট্র উচিত কি যদি কিছু, ব্যবহারকারী করতে পারেন ভুল হয়েছে এবং কি, পুনরুদ্ধার ত্রুটি শর্ত থেকে।

যেমন "দয়া করে এই বোতামটি আবার চাপবেন না"

(২) কোনও বিকাশকারীকে বললে ভুল হয়ে গেছে?

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

(৩) কোনও এক্সেক্সশন হ্যান্ডলারকে (অর্থাত্ কোড) বলছেন যে কিছু ভুল হয়েছে?

প্রকার ব্যতিক্রমের সিদ্ধান্ত নেবে যা ব্যতিক্রম হ্যান্ডলার এটি তাকান পাবেন এবং বৈশিষ্ট্য ব্যতিক্রম বস্তুর উপর সংজ্ঞায়িত হ্যান্ডলার তা মোকাবেলা করার অনুমতি দেবে।

ব্যতিক্রম বার্তা সম্পূর্ণ অপ্রাসঙ্গিক


-3

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

ব্যতিক্রম বার্তার সামগ্রীটি বার্তার প্রাপকের উপর নির্ভরশীল - তাই আপনাকে নিজেকে সেই ব্যক্তির জুতাতে রাখতে হবে।

একটি সমর্থন প্রকৌশলী যত তাড়াতাড়ি সম্ভব ত্রুটির উত্স সনাক্ত করতে সক্ষম হতে হবে। একটি সংক্ষিপ্ত বর্ণনামূলক স্ট্রিং প্লাস যেকোন ডেটা অন্তর্ভুক্ত করুন যা সমস্যার সমাধানে সহায়তা করতে পারে। সর্বদা স্ট্যাক ট্রেস অন্তর্ভুক্ত করুন - যদি আপনি পারেন - তবে এটিই তথ্যের একমাত্র সত্য উত্স।

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

এছাড়াও - একটি বড় "হাল্ট ত্রুটি!" আইকন। এটি একটি ত্রুটি - এটি বিশ্বের শেষ নয়।

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


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

1
আমিও একমত না ব্যতিক্রম ধরণের কলিং কোডটি বোঝা উচিত যা এটি গ্রাস করবে। উদাহরণস্বরূপ, যদি আমি কোনও কাঠামো কল করি এবং এর ফলে অভ্যন্তরীণভাবে কোনও ফাইলডোনাটক্সিস্টিপ্সেশন হয় তবে ফ্রেমওয়ার্কটির আহ্বায়ক হিসাবে এটি আমার কোনও অর্থ বোধ করতে পারে না। পরিবর্তে একটি কাস্টম ব্যতিক্রম তৈরি করা এবং অভ্যন্তরীণ ব্যতিক্রম হিসাবে নিক্ষিপ্ত ব্যতিক্রমটি পাস করা ভাল।
বাইটেডেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.