প্রতিবারই আমাকে একটি ব্যতিক্রম সম্পর্কে অতিরিক্ত তথ্য সরবরাহ করতে হবে আমি ভাবছি যে উপায়টি আসলে এটি করার সঠিক উপায়।
এই প্রশ্নের খাতিরে আমি একটি উদাহরণ লিখেছি। আসুন ধরে নেওয়া যাক এমন একটি শ্রেণি রয়েছে যেখানে আমরা Abbreviation
সম্পত্তি আপডেট করতে চাই । সলিউড দৃষ্টিকোণ থেকে এটি নিখুঁত হতে পারে না তবে আমরা যদি ডিআই এর মাধ্যমে কর্মী-পদ্ধতিটি কিছু পরিষেবা দিয়ে পাস করি তবে একই পরিস্থিতি ঘটতে পারে - একটি ব্যতিক্রম ঘটলে এর কোনও প্রসঙ্গ নেই। উদাহরণে ফিরে যান ...
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Abbreviation { get; set; }
}
তারপরে ক্লাসের কয়েকটি উদাহরণ এবং লুপ রয়েছে যেখানে কর্মী-পদ্ধতি বলা হয়। এটা ছুড়ে দিতে পারে StringTooShortException
।
var persons =
{
new Person { Id = 1, Name = "Fo" },
new Person { Id = 2, Name = "Barbaz" },
}
public IEnumerable<Person> GenerateAbbreviation(IEnumerable<Person> persons)
{
foreach (var person in persons)
{
try
{
person.Abbreviation = GenerateAbbreviation(person.Name);
}
catch(Exception ex)
{
// ?
}
}
// throw AggregateException...
}
public IEnumerable<string> GenerateAbbreviation(string value)
{
if (value.Length < 5)
{
throw new StringTooShortException(value);
}
// generate abbreviation
}
অনুসন্ধানটি হ'ল: কীভাবে এটি Person
বা এর Id
(বা অন্য কিছু) যুক্ত করবেন?
আমি নিম্নলিখিত তিনটি কৌশল জানি:
1 - Data
সম্পত্তি ব্যবহার করুন
পেশাদাররা:
- অতিরিক্ত তথ্য সেট করা সহজ
- এমনকি আরও ব্যতিক্রম তৈরি করার প্রয়োজন হয় না
- অতিরিক্ত প্রয়োজন হয় না
try/catch
কনস:
- সহজেই এর মধ্যে সংহত করা যায় না
Message
- লগাররা এই ক্ষেত্রটিকে উপেক্ষা করে এবং তা ফেলে দেবে না
- কীগুলি প্রয়োজন এবং কাস্টিং বিকেসু মানগুলি দরকার
object
- অপরিবর্তনীয় নয়
উদাহরণ:
public IEnumerable<Person> GenerateAbbreviation(IEnumerable<Person> persons)
{
foreach (var person in persons)
{
try
{
person.Abbreviation = GenerateAbbreviation(person.Name);
}
catch(Exception ex)
{
ex.Data["PersonId"] = person.Id;
// collect ex
}
}
// throw AggregateException...
}
2 - কাস্টম বৈশিষ্ট্য ব্যবহার করুন
পেশাদাররা:
Data
সম্পত্তি অনুরূপ কিন্তু দৃ strongly়ভাবে টাইপ- একীভূত করা সহজ
Message
কনস:
- কাস্টম ব্যতিক্রম প্রয়োজন
- লগার তাদের উপেক্ষা করবে
- অপরিবর্তনীয় নয়
উদাহরণ:
public IEnumerable<Person> GenerateAbbreviation(IEnumerable<Person> persons)
{
foreach (var person in persons)
{
try
{
person.Abbreviation = GenerateAbbreviation(person.Name);
}
catch(Exception ex)
{
// not suitable for this exception because
// it doesn't have anything in common with the Person
}
}
// throw AggregateException...
}
3 - অন্য একটি ব্যতিক্রম ব্যতিক্রম মোড়ানো
পেশাদাররা:
Message
অনুমানযোগ্য পদ্ধতিতে ফর্ম্যাট করা যায়- লগারগুলি অভ্যন্তরীণ ব্যতিক্রমগুলি ডাম্প করবে
- অপরিবর্তনীয়
কনস:
- অতিরিক্ত প্রয়োজন
try/catch
- বাসা বাড়ায়
- অভিযানের গভীরতা বৃদ্ধি করে
উদাহরণ:
public IEnumerable<Person> GenerateAbbreviation(IEnumerable<Person> persons)
{
foreach (var person in persons)
{
try
{
try
{
person.Abbreviation = GenerateAbbreviation(person.Name);
}
catch(Exception ex)
{
throw new InvalidPersonDataException(person.Id, ex);
}
}
catch(Exception ex)
{
// collect ex
}
}
// throw AggregateException...
}
- অন্য কোন নিদর্শন আছে?
- আরও ভাল নিদর্শন আছে?
- আপনি কি তাদের / তাদের সবার জন্য সেরা অনুশীলনের পরামর্শ দিতে পারেন?