Skip to content

পোস্ট

ব্যতিক্রম নিক্ষেপ করার সময় বিবেচনা

২১ মার্চ, ২০১৩ • 2 মিনিট পড়া

ব্যতিক্রম নিক্ষেপ করার সময় বিবেচনা

একজন সহকর্মী একটি ইমেল পাঠিয়েছেন যার সাথে তিনি সংগ্রাম করছেন। তিনি ব্যবসায়িক যুক্তি চালনা করতে try/catches ব্যবহার এড়াতে চেষ্টা করছেন।

সমস্যা try/catches নয়, এটি সমস্যার একটি উপসর্গ মাত্র। আপনি কি সমস্যাটি চিহ্নিত করতে পারেন? আপনাকে কিছু অনুমান করতে হবে, কিন্তু আমার বিশ্বাস আপনি একই সিদ্ধান্তে পৌঁছাবেন যা আমি পৌঁছেছি।

কোডটি নীচে রয়েছে; আমি নিরাপদদের রক্ষা করতে এটি পরিবর্তন করেছি:

private Customer GetOrCreateCustomer(long customerTelephoneNumberOrCustomerId)
        {
           Customer customer;
            try
            {
                customer = this.DoMagic(customerMasterTelephoneNumberOrCustomerId);
            }
            catch (DataException)
            {
                try
                {
                    //TODO: I know this isn't ideal. Still thinking of a better way to do this. 
                    customer = this. GetCustomer(customerMasterTelephoneNumberOrCustomerId);
                }
                catch (DataException)
                {
                    customer = this.GetCustomerFromExternal(customerMasterTelephoneNumberOrCustomerId);
                    customer.CustomerId = this.CreateCustomer(customer);
                }
            }

            return customer;
        }

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

আপনি জিজ্ঞাসা করতে পারেন, নালসের ক্ষেত্রে ব্যতিক্রম নিক্ষেপ করা কেন খারাপ?

নীচে ব্যতিক্রম নিক্ষেপ করার বিষয়ে বিবেচনা করার সময় কিছু নির্দেশিকা রয়েছে:

  1. যে ব্যতিক্রমটি নিক্ষেপ করার জন্য আপনাকে নালের জন্য পরীক্ষা করতে হবে তা একটি ইঙ্গিত হওয়া উচিত যে এটি প্রয়োজন নেই। এটি একটি প্রত্যাশিত ফলাফল, তাই একটি ব্যতিক্রম নয়।
  2. একটি ব্যতিক্রম নিক্ষেপ করা একটি সম্পদ-নিবিড় অপারেশন, .Net-এ করা যায় এমন সবচেয়ে সম্পদ-নিবিড় অপারেশনগুলির মধ্যে একটি।
  3. একটি exception শুধুমাত্র তাই, একটি ব্যতিক্রম। এটি কোডে করা অনুমানের একটি ব্যতিক্রম - যখন এই অনুমানগুলি ভাঙা হয়, সিস্টেমকে অবশ্যই সমাপ্ত করতে হবে, এটি এগিয়ে যেতে পারে না কারণ সিস্টেম একটি অজানা অবস্থায় রয়েছে (অর্থাৎ ডাটাবেসটি আর উপলব্ধ নেই) এটি একটি আক্রমণ ভেক্টরও হতে পারে।
  4. একটি ব্যতিক্রম নিক্ষেপ করার অর্থ আপনাকে ব্যবসায়িক নিয়মগুলি প্রয়োগ করতে আপস্ট্রিম কলটিকে একটি try/catch ব্লকে মোড়াতে হবে। একটি নাল মান হল অ্যাপ্লিকেশনের প্রবাহ নিয়ন্ত্রণ করার জন্য একটি ব্যবসায়িক সুযোগ। নাল মানের উপর পদক্ষেপ সেই পয়েন্টে করা উচিত যেখানে একটি ব্যবসায়িক সিদ্ধান্ত নিতে হবে। উদাহরণস্বরূপ, একটি গ্রাহক পরিবর্তনশীল নাল, UI স্তরে ব্যবহারকারীকে একটি বার্তা দেখানো হয় যা বলে যে আইডি ‘1234’ সহ গ্রাহক পাওয়া যায়নি।

লেখক: চাক কনওয়ে একজন এআই ইঞ্জিনিয়ার যার কাছে প্রায় ৩০ বছরের সফটওয়্যার ইঞ্জিনিয়ারিং অভিজ্ঞতা রয়েছে। তিনি ব্যবহারিক এআই সিস্টেম তৈরি করেন—কন্টেন্ট পাইপলাইন, অবকাঠামো এজেন্ট এবং সরঞ্জাম যা বাস্তব সমস্যার সমাধান করে—এবং তার শেখার বিষয়গুলি শেয়ার করেন। তার সাথে সোশ্যাল মিডিয়ায় সংযোগ করুন: X (@chuckconway) অথবা তাকে YouTube এবং SubStack এ দেখুন।

↑ শীর্ষে ফিরে যান

আপনি এটিও পছন্দ করতে পারেন