
একজন সহকর্মী একটি ইমেইল পাঠিয়েছেন যাতে কিছু কোড রয়েছে যা নিয়ে তিনি সমস্যায় পড়েছেন। তিনি ব্যবসায়িক লজিক চালানোর জন্য 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;
}
এই সিস্টেমে একটি অন্তর্নিহিত দর্শন রয়েছে যে null গুলো খারাপ। বেশিরভাগ ক্ষেত্রে যেখানে একটি null তৈরি হতে পারে সেখানে একটি এক্সেপশন থ্রো করা হয়। প্রথমে আমি এতে কোনো সমস্যা দেখিনি। আমি এটিকে একটি আর্কিটেকচার সিদ্ধান্ত, একটি নান্দনিকতা হিসেবে দেখেছিলাম, কিন্তু কোডের সাথে ইন্টারফেস করার সময়, এটি আমার কাছে স্পষ্ট যে এটি একটি আর্কিটেকচারাল ভুল।
আপনি হয়তো জিজ্ঞাসা করতে পারেন, null এর ক্ষেত্রে এক্সেপশন থ্রো করা কেন খারাপ?
এক্সেপশন থ্রো করার বিষয়ে বিবেচনা করার সময় নিচে কিছু নির্দেশিকা দেওয়া হলো:
১. এক্সেপশন থ্রো করার জন্য null চেক করতে হয় এই বিষয়টিই একটি ইঙ্গিত যে এটির প্রয়োজন নেই। এটি একটি প্রত্যাশিত ফলাফল, তাই এটি একটি এক্সেপশন নয়।
২. এক্সেপশন থ্রো করা একটি রিসোর্স নিবিড় অপারেশন, .Net এ করা যেতে পারে এমন সবচেয়ে রিসোর্স নিবিড় অপারেশনগুলোর মধ্যে একটি।
৩. একটি exception
ঠিক তাই, একটি এক্সেপশন। এটি কোডে করা অনুমানের একটি ব্যতিক্রম – যখন এই অনুমানগুলো ভেঙে যায়, সিস্টেমকে অবশ্যই বন্ধ হতে হবে, এটি এগিয়ে যেতে পারে না কারণ সিস্টেম একটি অজানা অবস্থায় রয়েছে (যেমন ডাটাবেস আর উপলব্ধ নেই) এটি একটি আক্রমণের ভেক্টরও হতে পারে।
৪. এক্সেপশন থ্রো করার মানে হলো ব্যবসায়িক নিয়ম প্রয়োগ করার জন্য আপনাকে আপস্ট্রিম কলটি একটি try/catch
ব্লকে মুড়ে দিতে হবে। একটি null মান হলো অ্যাপ্লিকেশনের প্রবাহ নিয়ন্ত্রণ করার একটি ব্যবসায়িক সুযোগ। null মানের উপর কর্ম সেই পয়েন্টে করা উচিত যেখানে একটি ব্যবসায়িক সিদ্ধান্ত নিতে হবে। উদাহরণস্বরূপ, একটি customer ভেরিয়েবল null, UI লেয়ারে ব্যবহারকারীকে একটি বার্তা দেখানো হয় যাতে বলা হয় যে ‘১২৩৪’ আইডি সহ গ্রাহক খুঁজে পাওয়া যায়নি।
লেখক: চাক কনওয়ে সফটওয়্যার ইঞ্জিনিয়ারিং এবং জেনারেটিভ এআই-তে বিশেষজ্ঞ। তার সাথে সোশ্যাল মিডিয়ায় যোগাযোগ করুন: X (@chuckconway) অথবা তাকে YouTube-এ দেখুন।