। নেট: যখন প্রয়োজনীয় কনফিগারেশন সেটিংস মিস করা হয় তখন কোন ব্যতিক্রম ছুঁড়ে যায়?


123

এখানে একটি স্ট্যান্ডার্ড দৃশ্য রয়েছে:

if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
   throw new SomeStandardException("Application not configured correctly, bozo.");

সমস্যাটি হচ্ছে, কোনটি ব্যতিক্রম SomeStandardExceptionহওয়া উচিত তা আমি পুরোপুরি নিশ্চিত নই ।

আমি 3.5 ফ্রেমওয়ার্কটি উপলব্ধি করেছি এবং দুটি সম্ভাব্য প্রার্থী পেয়েছি: ConfigurationExceptionএবং ConfigurationErrorsException

System.Configuration.ConfigurationException

একটি কনফিগারেশন সিস্টেম ত্রুটি দেখা দিলে ছুঁড়ে দেওয়া ব্যতিক্রম।

মন্তব্য

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

বিঃদ্রঃ:

ConfigurationExceptionবস্তুর অনগ্রসর সামঞ্জস্যের জন্য রক্ষা করা হয়। ConfigurationErrorsException বস্তুর কনফিগারেশন সিস্টেমের জন্য এখান থেকে প্রতিস্থাপন করে।

এই ব্যতিক্রমটি আসলে আমার যা প্রয়োজন তার জন্য নিখুঁত মনে হয়, তবে এটি অপ্রচলিত হিসাবে চিহ্নিত হয়েছে, সুতরাং, আক্ষেপে ixnay।

এটি আমাদের পুরোপুরি ধাঁধা ConfigurationErrorsException:

System.Configuration.ConfigurationErrorsException

বর্তমান মান সাফল্যমঞ্চের মানগুলির মধ্যে একটি নয়।

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

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

কোন সমাধানগুলি, যদি কোনও হয় তবে আপনি ছেলেরা এটির জন্য ব্যবহার করছেন এবং আমি কি এটি চুষতে এবং এর জন্য আমার নিজের ব্যতিক্রম রোল করতে চলেছি?

অ্যাডেন্ডা সম্পাদনা করুন

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

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


1
জন্য ডকুমেন্টেশন System.Configuration.ConfigurationErrorsException আপডেট করা হয়েছে।
স্লোলাইফ

উত্তর:


36

ফ্রেমওয়ার্কে বিদ্যমান ব্যতিক্রমগুলিতে আপনি আপনার ব্যতিক্রম-ছোঁড়ার মধ্যে সীমাবদ্ধ নন। আপনি যদি বিদ্যমান ব্যতিক্রমগুলি ব্যবহার করার সিদ্ধান্ত নেন তবে আপনার চিঠির ডকুমেন্টেশনটি পুরোপুরি অনুসরণ করতে হবে না। ডকুমেন্টেশন বর্ণনা করে যে ফ্রেমওয়ার্ক কীভাবে একটি প্রদত্ত ব্যতিক্রম ব্যবহার করে, তবে আপনি কীভাবে কোনও বিদ্যমান ব্যতিক্রম ব্যবহার / পুনরায় ব্যবহার করতে চান তা সম্পর্কে কোনও সীমাবদ্ধতা বোঝায় না ।

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

[Serializable]
public class ConfigurationMissingException : ConfigurationErrorsException
{}

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

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


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

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

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

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

48

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

আমার কাছে, কনফিগারেশন এক্সসেপশন (এবং এটি প্রতিস্থাপন করা হয়েছে, কনফিগারেশনইরিজ এক্সপ্লেশন - বিভ্রান্তিমূলক এমএসডিএন ডক্স সত্ত্বেও) কনফিগারেশনের সংরক্ষণ, পড়া ইত্যাদির ত্রুটির জন্য।


আমি অবৈধ অপারেশন এক্সপসেশনের বিকল্পটি বেছে নিয়েছি, কারণ এটি এএসপি.নেট পৃষ্ঠা সুরক্ষিত অনার পদ্ধতি দ্বারা পরিচালিত হয়েছে, কনফিগারেশন ইরার্সেক্সপশন এবং এর থেকে প্রাপ্ত সমস্ত ব্যতিক্রম নয়
মিক

2
এটি সত্যই আমাকে অবাক করে দেবে, যদি আমি কনফিগারটি ভুল করে ফেলেছি তবে আমি যদি একটি অবৈধপ্রকাশের অভিজ্ঞতা গ্রহণ করি।
কেউলেজে

18

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

.NET 2.0 এর আগে, পরামর্শ ছিল System.Configration.ConfigrationException ব্যবহার করা । কনফিগারেশনএক্সেপশন .NET 2.0 এ অচল হয়ে পড়েছিল, কারণগুলির জন্য যা আমার কাছে কখনই পরিষ্কার ছিল না এবং কনফিগারেশনএররিজএক্সসেপশন ব্যবহার করার জন্য প্রস্তাবনাটি পরিবর্তিত হয়েছিল।

আমি ব্যতিক্রমটি ছুঁড়ে ফেলার জন্য একটি সহায়ক পদ্ধতি ব্যবহার করি যাতে .NET 1.x থেকে 2.0 এ স্থানান্তরিত হওয়ার সময় এক জায়গায় ছুঁড়ে ফেলা ব্যতিক্রমটি পরিবর্তন করা সহজ হয় বা মাইক্রোসফ্ট যদি আবার সুপারিশ পরিবর্তন করার সিদ্ধান্ত নেয়:

if(string.IsNullOrEmpty(Configuration.AppSettings("foobar")))
{
   throw CreateMissingSettingException("foobar");
}

...

private static Exception CreateMissingSettingException(string name)
{
    return new ConfigurationErrorsException(
        String.Format
        (
        CultureInfo.CurrentCulture,
        Properties.Resources.MissingConfigSetting,
        name
        )
        );
}

16

আইএমও এটিই আসল উত্তর। +1
এলসি

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

7

ConfigurationErrorsExceptionআপনার বর্ণিত পরিস্থিতিতে ফেলে দেওয়ার সঠিক ব্যতিক্রম। এমএসডিএন ডকুমেন্টেশনের আগের সংস্করণটি ConfigurationErrorsExceptionআরও অর্থবোধ করে।

http://msdn.microsoft.com/en-us/library/system.configuration.configurationerrorsexception(VS.80).aspx

আগের এমএসডিএন সারাংশ এবং মন্তব্যগুলি হ'ল:

  • একটি কনফিগারেশন-সিস্টেম ত্রুটি দেখা দিলে ফেলে দেওয়া ব্যতিক্রম।
  • ConfigurationErrorsException ব্যতিক্রম যখন কোন ত্রুটি দেখা দেয় যখন কনফিগারেশন সংক্রান্ত তথ্য পড়তে বা লেখা হচ্ছে ফেলে দেওয়া হয়।

7
ডকুমেন্টেশন থেকে: "এই এআইপিটি পণ্যের অবকাঠামো সমর্থন করে এবং আপনার কোড থেকে সরাসরি ব্যবহারের উদ্দেশ্যে নয় the
ওলেগ শ

6

কনফিগারেশনএলমেন্ট ক্লাস (যা কনফিগারেশনসেকশনের মতো অনেকগুলি কনফিগারেশন-সম্পর্কিত ক্লাসের বেস ক্লাস) এর একটি পদ্ধতি রয়েছে অনার্কায়ার্ডপ্রোপার্টি নটফাউন্ড (অন্যান্য সহায়ক পদ্ধতিও রয়েছে)। আপনি তাদের কল করতে পারেন।

অন-রিকোয়ার্ডডপ্রোপার্টি নটফাউন্ড এভাবে প্রয়োগ করা হয়েছে:

protected virtual object OnRequiredPropertyNotFound(string name) {
    throw new ConfigurationErrorsException(SR.GetString("Config_base_required_attribute_missing", new object[] { name }), this.PropertyFileName(name), this.PropertyLineNumber(name)); }

1

আমি এটি স্তন্যপান করব এবং আমার নিজস্ব রোল করব ... তবে আপনি এটি করার আগে, সিস্টেমটি এই কনফিগারেশন সেটিংসের জন্য কোনও ডিফল্ট মান ধরে নেওয়া সম্ভব? আমি সাধারণত প্রতিটি সেটিংয়ের জন্য এটি করার চেষ্টা করি যা সম্ভবত অপস ম্যানেজমেন্ট লোককে মিস করতে পারে ... (বা সম্ভবত আমার বলা উচিত, যতটা সম্ভব সেটিংসের জন্য - কারওর জন্য এটি সিস্টেমের ডিফল্ট সিদ্ধান্ত নেওয়া সুস্পষ্ট নয়) appropriate ..)

সাধারণভাবে একটি কাস্টম ব্যতিক্রম অনেক প্রচেষ্টা নয় ... এখানে একটি উদাহরণ ...

[Serializable]
public class MyCustomApplicationException : ApplicationException
{
    #region privates
    #endregion privates

    #region properties
    #endregion properties

    public MyCustomApplicationException (string sMessage,
        Exception innerException)
        : base(sMessage, innerException) { }
    public MyCustomApplicationException (string sMessage)
        : base(sMessage) { }
    public MyCustomApplicationException () { }

    #region Serializeable Code
    public MyCustomApplicationException (
       SerializationInfo info, StreamingContext context)
        : base(info, context) { }
    #endregion Serializeable Code
}

2
এমএসডিএন: ... একটি অ্যাপ্লিকেশন যার নিজস্ব ব্যতিক্রম তৈরি করতে হবে, [...] ব্যতিক্রম শ্রেণি থেকে কাস্টম ব্যতিক্রম প্রাপ্ত। এটি প্রাথমিকভাবে ভাবা হয়েছিল যে কাস্টম ব্যতিক্রমগুলি অ্যাপ্লিকেশন এক্সেসপশন ক্লাস থেকে নেওয়া উচিত; তবে বাস্তবে এটি উল্লেখযোগ্য মান যুক্ত করতে পাওয়া যায় নি।
গ্যাস্পার নাগি

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

1

আপনার কনফিগার ফাইলগুলির জন্য আপনি ব্যবহার করতে পারেন এমন একটি বিকল্প পদ্ধতি হ'ল বিপরীতে কাস্টম কনফিগারেশন বিভাগগুলি ব্যবহার করা AppSettings। এইভাবে আপনি উল্লেখ করতে পারেন যে কোনও সম্পত্তি IsRequiredএবং কনফিগারেশন সিস্টেম আপনার জন্য এই চেকিং পরিচালনা করবে। সম্পত্তিটি যদি অনুপস্থিত থাকে তবে এটি একটি নিক্ষেপ করবে ConfigurationErrorsExceptionতাই আমি মনে করি যে উত্তরটি সমর্থন করে যা আপনার ক্ষেত্রে সেই ব্যতিক্রমটি ব্যবহার করা উচিত।


0

আমার সাধারণ নিয়ম হবে:

  1. যদি অনুপস্থিত কনফিগারেশনের ঘটনাটি খুব সাধারণ না হয় এবং আমি বিশ্বাস করি যে আমি এই ব্যয়টি অন্যান্য ব্যাতিক্রমের তুলনায় কখনও অন্যভাবে পরিচালনা করতে চাই না, তবে আমি কেবল একটি উপযুক্ত বার্তা সহ বেসিক "ব্যতিক্রম" শ্রেণিটি ব্যবহার করি:

    নতুন ব্যতিক্রম নিক্ষেপ করুন ("আমার বার্তা এখানে")

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


0

আমি আপনার প্রশ্নের ভিত্তির সাথে একমত নই:

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

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

অন্যদের, নির্দিষ্ট আছে আপনি কি সত্যিই যদি আছে একটি ব্যতিক্রম নিক্ষেপ করুন - কারনের জন্য - কোন কারণে আপনি System.Exception থেকে উত্তরাধিকার সূত্রে প্রাপ্ত করে আপনার ব্যতিক্রম টাইপ সংজ্ঞায়িত করতে পারিনি নয়।


2
এই নির্দিষ্ট দৃশ্যে পারফরম্যান্সের বিষয়টি কেন ঠিক হবে? আইইউসি, তারপরে ব্যতিক্রমটি ঠিক একবার নিক্ষেপ করা হয় এবং প্রক্রিয়াটি সম্ভবত পরে যাই হোক না কেন নীচে চলে যায় (অবশ্যই, ব্যবহারকারীর কাছে একটি সুন্দর পপ-আপ দেখানোর পরে)। (চালিয়ে যেতে ...)

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

1
আপনি কিছু মিস করেছেন: "যখন কোনও অ্যাপ্লিকেশন কনফিগারেশন সেটিংস অনুপস্থিত থাকে বা এতে একটি অবৈধ মান থাকে", এটি খারাপ ব্যবহারকারীর ইনপুটের মতো নয়। এটি অনুপস্থিত একটি প্রাথমিক কনফিগারেশন। একটি কাস্টম ব্যতিক্রম হওয়া উচিত এবং অ্যাপটি চলমান থেকে থামানো উচিত।
jcollum

2
এই বিশেষ অ্যাপ্লিকেশনটিতে, এটি প্রায় সম্পূর্ণরূপে কনফিগারেশন ফাইলের সেটিংস দ্বারা চালিত। যদি সেটিংস এতে না থাকে (যেখানে তারা এনক্রিপ্ট করা থাকে), অ্যাপ্লিকেশনটি চালিয়ে যেতে পারে না এবং অবশ্যই শেষ করতে হবে। কার্যত একটি ব্যতিক্রম প্রয়োজন।
মাইক হুফার

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

-2

আপনি এক্সএমএল ব্যতিক্রম উত্তরাধিকার সূত্রে বা এটি ব্যবহার করে চেষ্টা করতে পারেন।

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