c# - আমার পদ্ধতিটি কি তার নিজস্ব ব্যতিক্রম ছুঁড়ে ফেলা উচিত, বা কোনও ফাইল বিদ্যমান না থাকলে.NET নিক্ষেপ করা উচিত?




exception (3)

আমার কোডটি এখানে:

public void ReadSomeFile(string filePath)
{
    if (!File.Exists(filePath))
        throw new FileNotFoundException();

    var stream = new FileStream(filePath, ....)
    .....
}

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


আপনার পদ্ধতিটিকে ReadSomeFile বলা ReadSomeFile এবং একটি filename এটির ইনপুট হিসাবে নেয়, সুতরাং এটি FileNotFoundException নিক্ষেপ করা FileNotFoundException । যেহেতু আপনি ব্যতিক্রমটি ধরার পরে কোনও মান যুক্ত করতে পারবেন না তবে নিজে এটিকে ছুঁড়ে ফেলুন, কেবল। নেট এটি ফেলে দিন।

তবে যদি আপনার পদ্ধতিটি LoadData(databaseName) এবং এটিতে অনেকগুলি ফাইলে অ্যাক্সেস করতে হবে, ব্যতিক্রমটি ধরা পড়ে এবং একটি কাস্টম ব্যতিক্রম নিক্ষেপ করা মূল্যবান হতে পারে, কারণ আপনি অন্যান্য সহায়ক তথ্যের পাশাপাশি LoadData(databaseName) ব্যতিক্রমটিতে যুক্ত করতে পারেন।


ইতিমধ্যে প্রদত্ত উত্তরগুলি বাদ দিয়ে আপনি এটিও বলতে পারেন যে এটি আপনার প্রত্যাশার উপর নির্ভর করে।

আপনি যদি কোনও লগ ফাইলটি পড়তে চান এবং এটি বিদ্যমান না থাকে, আপনি কি কোনও ত্রুটি বা কেবল একটি খালি স্ট্রিং (বা খালি স্ট্রিং অ্যারে) ফেলে দিতে চান?

যদি কোনও ডিফল্ট মান (একটি খালি স্ট্রিংয়ের মতো) ফেরত দেওয়া হয় তবে আমি try-catch করে ফাংশনটির সামগ্রীটি কেবল try-catch তে আবৃত করে থাকি (তবে কেবল প্রত্যাশিত ত্রুটির জন্য) এবং try ব্লকে আসল সামগ্রীটি ফেরত দেওয়ার সময় catch ব্লকে ডিফল্ট ফিরিয়ে আনতাম ।

এটি তিনটি সম্ভাব্য পরিস্থিতি ছেড়ে দেবে:

  1. কোনও ফাইলের সামগ্রী ফিরে আসে;
  2. ডিফল্ট মানটি ফিরে আসে, কারণ একটি প্রত্যাশিত ত্রুটি ঘটেছে;
  3. .NET দ্বারা একটি ত্রুটি নিক্ষেপ করা হয়েছে, কারণ আপনি সেই নির্দিষ্ট ত্রুটিটি ধরেন নি।

if (File.Exists(f)) { DoSomething(f) } ) একটি বিরোধী if (File.Exists(f)) { DoSomething(f) } । ফাইলটি মুছে ফেলা বা এই দুটি বিবৃতিগুলির মধ্যে তৈরি করা যেতে পারে, সুতরাং এর অস্তিত্বটি এটির মতো পরীক্ষা করে দেখার পক্ষে কিছু বোঝা যায় না।

File.Exists() ছাড়াও, মন্তব্যে উল্লিখিত হিসাবে, যখন File.Exists() সত্য হতে পারে, তবে ফাইলটির প্রকৃত খোলার পরেও বিভিন্ন কারণে ব্যর্থ হতে পারে। সুতরাং আপনাকে ফাইলটি খোলার চারদিকে ত্রুটি পরীক্ষা করা এবং নিক্ষেপ করতে হবে।

যেহেতু আপনি নিজেকে পুনরাবৃত্তি করতে চান না তবে পরিবর্তে আপনার কোড ডিআরওয়াই রাখুন, কেবল ফাইলটি খোলার চেষ্টা করুন এবং new FileStream() ফাইল new FileStream() নিক্ষেপ করুন। তারপরে আপনি ব্যতিক্রমটি ধরতে পারেন এবং আপনি যদি চান তবে মূলটি আবার ফেলে দিন বা কোনও অ্যাপ্লিকেশন-নির্দিষ্ট ব্যতিক্রম ছুঁড়ে ফেলতে পারেন।

অবশ্যই File.Exists() কল করা ন্যায়সঙ্গত হতে পারে, তবে এই প্যাটার্নে নয়।





exception