সফটওয়্যার ডেভেলপমেন্ট ইন C শার্প (C#) – Exception Handling পর্ব-১
আগের পর্বে আমরা Business Logic কোড UI তে লিখেছিলাম। সফটওয়্যার ইঞ্জিনিয়ারিংয়ে Business Logic কোড সাধারণত UI তে লিখা হয়না। এখন আমাদের কাজ হবে নতুন একটি Class বানিয়ে Business Logic অংশটুকু তাতে সরিয়ে ফেলা। আমরা TotalPriceCalculator নামে নতুন একটি Class নিলাম।
TotalPriceCalculator Class এর মধ্যে GetTotalPrice নামে একটি public মেথড লিখলাম যেটি একটি string parameter নিবে। যদিও parameter হিসেবে byte পাঠাতে পারতাম কিন্তু Exception বুঝার সুবিধার্থে string parameter নিলাম। এই মেথডটিতে আমরা Business Logic Implement করবো অর্থাৎ মোট টিকিটের দাম হিসেব করে তা রিটার্ন করবো।
TotalPriceCalculator Class এর কোডটি নিন্মরুপঃ
public class TotalPriceCalculator
{
public double GetTotalPrice(string noOfTicketsInString)
{
byte noOfTickets = byte.Parse(noOfTicketsInString);
double totalPrice = 50 * noOfTickets;
return totalPrice;
} //end method
} //end class
আমরা এখন UI থেকে এই মেথডটি কল করবো। UI তে TotalPriceButton এর Click event কোডটি দেখা যাক:
private void totalPriceButton_Click(object sender, EventArgs e)
{
try
{
TotalPriceCalculator totalPriceCalculator = new TotalPriceCalculator();
double totalPrice = totalPriceCalculator.GetTotalPrice(noOfTicketTextBox.Text);
MessageBox.Show(totalPrice.ToString() + " taka", "Total Price");
}
catch (FormatException formatExObj)
{
MessageBox.Show("Please enter numeric value.");
}
catch (OverflowException overflowExObj)
{
MessageBox.Show("No. of Tickets must be between 1 to 255.");
}
catch (Exception exceptionObj)
{
MessageBox.Show("Unknown error occurred! please contact to vendor.");
}
}
ইউজার যদি Invalid Input দেয় তাহলে GetTotalPrice() মেথডটি Exception throw করবে। UI এর সংশ্লিষ্ট catch ব্লক তা handle করবে। ধরুন আমি ইনপুট হিসেবে 1245 দিলাম তাহলে GetTotalPrice() মেথড UI তে তার কলার এর দিকে OverflowException throw করবে।
এবার আরেকটি পদ্ধতি দেখে নিইঃ
ধরুন UI এর প্রোগ্রামার TotalPriceCalculator Class টির writer (মনেকরুন Class টি আরেকজন প্রোগ্রামার লিখেছেন) কে বললো আমি UI তে এতগুলো catch ব্লক এবং ইউজারকে কি মেসেজ দেখাতে হবে তা লিখতে পারবোনা আপনি যেহেতু Class টি লিখেছেন তাহলে আপনি আপনার Class থেকে ইউজারকে কি মেসেজ দেখাবো সেগুলো লিখে দিন। তাহলে TotalPriceCalculator Class টির প্রোগ্রামার নিচের মতো করে কোডটি লিখতে পারবেনঃ
public class TotalPriceCalculator
{
public double GetTotalPrice(string noOfTicketsInString)
{
try
{
byte noOfTickets = byte.Parse(noOfTicketsInString);
double totalPrice = 50 * noOfTickets;
return totalPrice;
}
catch (FormatException formatExObj)
{
throw new Exception("Please enter numeric value.");
}
catch (OverflowException overflowExObj)
{
throw new Exception("No. of Tickets must be between 1 to 255.");
}
catch (Exception exceptionObj)
{
throw new Exception("Unknown error occurred! please contact to vendor.");
}
} //end method
} //end class
তাহলে UI প্রোগ্রামারের ঝামেলা অনেক কমে গেলো উনি নিচের অল্প কোডটি লিখলেই চলবে:
private void totalPriceButton_Click(object sender, EventArgs e)
{
try
{
TotalPriceCalculator totalPriceCalculator = new TotalPriceCalculator();
double totalPrice = totalPriceCalculator.GetTotalPrice(noOfTicketTextBox.Text);
MessageBox.Show(totalPrice.ToString() + " taka", "Total Price");
}
catch (Exception exceptionObj)
{
MessageBox.Show(exceptionObj.Message);
}
}
এক্ষেত্রে ইউজার যদি ইনপুট হিসেবে string দেয় তাহলে GetTotalPrice() মেথডটিতে FormatException Exception ঘটবে কিন্তু মেথডটি ঐ catch ব্লকের message সহ শুধুমাত্র Exception object(FormatException object নয়) throw করবে। UI এর catch ব্লক MessageBox এর মাধ্যমে এক্সেপশনের মেসেজটি ইউজারকে দেখাবে।
উপরের কোডগুলো প্রোগ্রাম ইউজারের ম্যাসেজিংয়ের জন্য অনেক ফ্রেন্ডলি হলেও প্রোগ্রাম/প্রজেক্ট যখন অনেক বড় হয়ে যাবে অর্থাৎ প্রোগ্রামে যখন অনেকগুলো ক্লাস থাকবে এবং ক্লাসের মধ্যে অনেক মেথড থাকবে তখন প্রোগ্রামারের জন্য কি ধরনের Exception ঘটেছে তা বের করে সল্যুশন দেয়া কষ্টকর হয়ে যাবে। পরবর্তী পর্বে প্রোগ্রামার এবং ইউজার দুইজনের জন্য যাতে প্রোগ্রামের কোড ফ্রেন্ডলি হয় তা ইনশাআল্লাহ্ দেখাবো।
আমি Hasnat Riaz। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 12 বছর যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 16 টি টিউন ও 14 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 1 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
প্রাক্তন ছাত্র, কম্পিউটার সায়েন্স এন্ড টেলিকমিউনিকেশন ইঞ্জিনিয়ারিং বিভাগ, নোয়াখালী বিজ্ঞান ও প্রযুক্তি বিশ্ববিদ্যালয়।
@Hasnat Riaz ভাই আপনার ইমেইল আইডিটা দেন আমার কিছু প্রশ্ন আছে।