সি # /। নেট এ ছোঁড়া ব্যতিক্রমগুলি কীভাবে ডকুমেন্ট করবেন


139

আমি বর্তমানে একটি ছোট কাঠামো লিখছি যা সংস্থার মধ্যে অন্যান্য বিকাশকারীরা অভ্যন্তরীণভাবে ব্যবহার করবে।

আমি ভাল ইন্টেলিসেন্স তথ্য দিতে চাই, তবে নিক্ষিপ্ত ব্যতিক্রমগুলি কীভাবে দলিল করা যায় তা সম্পর্কে আমি নিশ্চিত নই ।

নিম্নলিখিত উদাহরণে:

public void MyMethod1()
{
    MyMethod2();

    // also may throw InvalidOperationException
}

public void MyMethod2()
{
    System.IO.File.Open(somepath...); // this may throw FileNotFoundException

    // also may throw DivideByZeroException
}

আমি জানি ব্যতিক্রমগুলি দলিল করার জন্য মার্কআপটি হ'ল:

/// <exception cref="SomeException">when things go wrong.</exception>

আমি যা বুঝতে পারি না সেটি হল কোড দ্বারা ছুঁড়ে দেওয়া ব্যতিক্রমগুলি কীভাবে ডকুমেন্ট করা যায় MyMethod1() ?

  • আমি কি ব্যতিক্রম নথিপত্র নথিভুক্ত করা উচিত MyMethod2()
  • আমি কি ব্যতিক্রম নথিপত্র নথিভুক্ত করা উচিত File.Open()?

সম্ভাব্য ব্যতিক্রম দলিল করার সর্বোত্তম উপায় কী হবে?


4
আমি জানি যে এটি আপনি যা চেয়েছিলেন ঠিক তা নয় (এবং এটি সত্যিই একটি পুরানো প্রশ্ন) তবে এরিক লিপার্ট (মাইক্রোসফ্ট সি # সংকলক এবং ডিজাইন দলগুলির মূল বিকাশকারী) 4 ধরণের ব্যতিক্রম সম্পর্কে একটি ব্লগ পোস্ট লিখেছিলেন যা আমি মনে করি প্রতিটি বিকাশকারী ব্যতিক্রম হ্যান্ডলিং কোড লেখার সময় চিন্তা করা উচিত: ব্লগস.এমএসডিএন
বি

@ জাভাজাভজাভাজাভা লিঙ্কটির জন্য ধন্যবাদ - অবশ্যই পড়ার জন্য মূল্যবান।
আর্নল্ড জোকাস

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

উত্তর:


110

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

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

আপনার পদ্ধতিটি আপনার এপিআই-এর মুখের দিকে থাকলে যদি আপনি এটি করতে চান তবে অন্য কোনও জায়গা। ঠিক যেমন একটি মুখোমুখি একক ইন্টারফেসে একাধিক ইন্টারফেসকে সরল করে তোলে, আপনার API এর একক ব্যতিক্রমকে একাধিক ব্যতিক্রম সহজ করতে হবে। কলারদের জন্য আপনার কোড ব্যবহার করা সহজ করে তোলে।


অ্যান্ড্রুর কিছু উদ্বেগের উত্তর দেওয়ার জন্য (মন্তব্যগুলি থেকে), তিন ধরণের ব্যতিক্রম রয়েছে: আপনি যাদের সম্পর্কে জানেন না, যাদের সম্পর্কে আপনি জানেন এবং যা কিছু জানেন না এবং যেগুলি সম্পর্কে আপনি জানেন এবং কিছু করতে পারেন।

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

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

আপনি যা সম্পর্কে জানেন এবং সে সম্পর্কে কিছু করতে পারেন সেগুলি হ'ল আপনার ডকুমেন্টিং এবং মোড়ক করা উচিত।

আপনি এখানে ব্যতিক্রম হ্যান্ডলিং সম্পর্কে আরও কিছু গাইডলাইন খুঁজে পেতে পারেন


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

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

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

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

আপনি 'যেতে দিন' ব্যাতিক্রম হিসাবে, আপনি সর্বদা সেটিকে নিম্ন স্তরে ধরে রাখতে পারেন যা তাদের লগ করে বা কোনও কিছু। তুমি জান; প্রোগ্রামটিকে ক্র্যাশ করার সুযোগ দেওয়ার জন্য কেবল ব্যবহারকারী-বান্ধব উপায়ে তৈরি করা।
নাইয়ারগডস

96

আপনার স্ট্যান্ডার্ড এক্সএমএল ডকুমেন্টেশন ব্যবহার করা উচিত ।

/// <exception cref="InvalidOperationException">Why it's thrown.</exception>
/// <exception cref="FileNotFoundException">Why it's thrown.</exception>
/// <exception cref="DivideByZeroException">Why it's thrown.</exception>
public void MyMethod1()
{
    MyMethod2();
    // ... other stuff here
}

/// <exception cref="FileNotFoundException">Why it's thrown.</exception>
/// <exception cref="DivideByZeroException">Why it's thrown.</exception>
public void MyMethod2()
{
    System.IO.File.Open(somepath...);
}

/// <exception cref="FileNotFoundException">Why it's thrown.</exception>
public void MyMethod3()
{
    try
    {
        MyMethod2();
    }
    catch (DivideByZeroException ex)
    {
        Trace.Warning("We tried to divide by zero, but we can continue.");
    }
}

এইভাবে এটি করার মানটি হ'ল আপনি যে পরিচিত ব্যতিক্রমগুলি ঘটতে পারে তার ডকুমেন্টেশন সরবরাহ করছেন। আপনি ভিজ্যুয়াল স্টুডিও ব্যবহার করছেন এবং আপনি আশা করতে পারেন এমন ব্যতিক্রমগুলির পরে আপনাকে (বা অন্যদের) মনে করিয়ে দিতে যদি এই ডকুমেন্টেশন ইন্টেলিজেন্সে উপলব্ধ।

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


1
কিভাবে এটি কোনও মান যুক্ত হয়? উদাহরণস্বরূপ, এই সমস্ত ব্যতিক্রমগুলি ব্যতিক্রম প্রকারের উপকরণ iv আমার অভিজ্ঞতা থেকে এটি প্রয়োগের মধ্যে থাকা অন্যান্য API গুলি থেকে ছুঁড়ে দেওয়া হতে পারে এমন অন্যান্য ব্যাতিক্রমের ধরণের বিষয়ে চিন্তা করা ব্যবহারিক হবে না। আমার বক্তব্যটি হ'ল যে কোনও ব্যবসায়ের তথ্য বহন করার চেয়ে কোনও পদ্ধতি থেকে ফেলে দেওয়া ব্যতিক্রম সম্পর্কে আমাদের উদ্বিগ্ন হওয়া উচিত নয়।
ইলুমিনাতি

7
@ শিরঞ্জিঞ্জ আপনার অভিজ্ঞতা ভুল
গ্রোজ

35

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

আপডেট: দেখে মনে হচ্ছে অ্যাজেন জনসন আর # 8-র জন্য উপলভ্য নয়, বিকল্প হিসাবে রিসার্পারের ব্যতিক্রমী চেকআউট ...

পদক্ষেপ 1: ঘোস্টডক এক্সএমএল মন্তব্য তৈরি করে (সিটিআরএল-শিফট-ডি), যখন রিশার্পারের এজেন্ট জনসন প্লাগইন ব্যতিক্রমটিও দলিল করার পরামর্শ দেয়:

ধাপ 1

পদক্ষেপ 2: পাশাপাশি ব্যতিক্রম ডকুমেন্টেশন যুক্ত করতে পুনঃশার্পারের শর্টকাট কী (আল্ট-এন্টার) ব্যবহার করুন:

পদক্ষেপ 2 http://i41.tinypic.com/osdhm

আশা করি এইটি কাজ করবে :)


টিনিপিক লিঙ্কগুলি নষ্ট হয়ে গেছে।
এনিভেস

11

আমি যা বুঝি সেগুলি থেকে <এক্সসেপশন> উপাদানটি ব্যবহারের অভিপ্রায়টি ব্যতিক্রম নয়, সাজানোর পদ্ধতিগুলি ব্যবহার করার সময়:

/// <summary>Does something!</summary>
/// <exception cref="DidNothingException">Thrown if nothing is actually done.</exception>
public void DoSomething()
{
// There be logic here
}

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

যতদূর এর থেকে আরও নির্দিষ্ট কিছু পাওয়া যায়, সম্ভবত আপনি নিজের কাস্টমাইজড ব্যতিক্রমগুলি ধরে ফেলতে পারেন?


4

আপনার পদ্ধতির জন্য চুক্তির অংশটি প্রাক শর্তগুলি বৈধ কিনা তা পরীক্ষা করা উচিত, তাই:

public void MyMethod2()
{
    System.IO.File.Open(somepath...); // this may throw FileNotFoundException
}

হয়ে

/// <exception cref="FileNotFoundException">Thrown when somepath isn't a real file.</exception>
public void MyMethod2()
{
    FileInfo fi = new FileInfo( somepath );
    if( !fi.Exists )
    {
        throw new FileNotFoundException("somepath doesn't exists")
    }
    // Maybe go on to check you have permissions to read from it.

    System.IO.File.Open(somepath...); // this may still throw FileNotFoundException though
}

এই পদ্ধতির সাথে, আপনি ছুঁড়ে ফেলা OutOfMemoryException হতে পারে এমন ডকুমেন্ট না রেখেই আপনি পরিষ্কারভাবে ছুঁড়ে ফেলা সমস্ত ব্যতিক্রমগুলি ডকুমেন্ট করা সহজ etc.


1
নিশ্চিত না যে আপনি যদি Openকলটি যেভাবেই ছুঁড়ে মারে কেবল ব্যতিক্রমটি নকল করতে চলেছেন তবে সেই চেকটির মূল বক্তব্য কী তা নয় (উল্লেখ করবেন না, যেমনটি আপনি উল্লেখ করেছেন যে একটি প্রতিযোগিতা রয়েছে এবং চেক এর সাফল্যের গ্যারান্টি দেয় না Open) .. ।
ম্যাট এনরাাইট

1
@ ম্যাটইনর্ট মঞ্জুর, তবে আমি বিষয়টিকে চিত্রিত করার জন্য এটি কিছুটা সংক্ষেপিত করেছি ...
রোল্যান্ড শ

1

আপনার সমস্ত ব্যতিক্রমগুলি ডকুমেন্ট করা উচিত যা আপনার পদ্ধতি দ্বারা সম্ভবত ছুঁড়ে দেওয়া যেতে পারে।

প্রয়োগের বিশদটি গোপন করার জন্য, আমি নিজেই মাইমাথড 2 থেকে কিছু ব্যতিক্রম হ্যান্ডেল করার চেষ্টা করব।

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


1

প্রকৃতপক্ষে, যেমন এটি ইতিমধ্যে উত্তর দেওয়া হয়েছে, ব্যতিক্রমগুলি দলিল করার উপায়টি এক্সএমএল মন্তব্যগুলি ব্যবহার করা।

প্লাগইনগুলি ছাড়াও, আপনি স্ট্যাটিক বিশ্লেষণ সরঞ্জামগুলিও ব্যবহার করতে পারেন যা টিএফএসের সাথে একীভূত হতে পারে আপনার ব্যতিক্রমগুলি নথিভুক্ত রয়েছে তা নিশ্চিত করতে be

নীচের লিঙ্কগুলিতে আপনি দেখতে পারেন যে কীভাবে আপনার পদ্ধতিগুলির দ্বারা নিক্ষেপ করা ব্যতিক্রমগুলি ডকুমেন্ট করা হচ্ছে তা স্টাইলকপের জন্য কাস্টম বিধি তৈরি করবেন।

http://www.josefcobonnin.com/post/2009/01/11/XML- ডকুমেন্টেশন- মন্তব্যসমূহ- এক্সেক্সশনস- I.aspx http://www.josefcobonnin.com/post/2009/01/15/XML- ডকুমেন্টেশন -Comments-ব্যতিক্রমসমূহ-II.aspx

শুভেচ্ছা।


0

আপনার পদ্ধতিতে নথি প্রত্যাশিত ব্যতিক্রম, আপনার উদাহরণে আমি ব্যবহারকারীকে জানাতে পারি যে পদ্ধতিটি কোনও ফাইল নিক্ষেপ করতে পারে ব্যতিক্রম পাওয়া যায় নি।

মনে রাখবেন যে কলারের কাছে কী প্রত্যাশা করা উচিত তা অবহিত করা যাতে তারা কীভাবে এটি মোকাবেলা করতে পারেন তা চয়ন করতে পারেন।

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