Thuta Learning
ရှာဖွေရန်
ProjectsProgrammingbeginner

Project: Contact Book – Part 3 (Validation + Polish)

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • Project: Contact Book – Part 3 (Validation + Polish) ကို လက်တွေ့ project ထဲမှာ အသုံးချတတ်မယ်
  • ကိုယ်တိုင် code ရေးပြီး run ကြည့်တတ်မယ်
  • Project တစ်ခုလုံးကို အဆင့်လိုက် ဆောက်တတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Part 2 အထိ Contact Book က CRUD operations အားလုံး အလုပ်လုပ်နေပြီ ဖြစ်ပေမယ့် user က invalid input (empty name, wrong menu choice) ရိုက်ရင် app crash သွားနိုင်ပါတယ်။ Advanced chapter က exception handling (try/catch) concept ကို ဒီနေရာမှာ လက်တွေ့ အသုံးချပြီး app ကို robust ဖြစ်အောင် ပြင်ဆင်မှာပါ။ ဒါအပြင် LINQ OrderBy() နဲ့ contacts list ကို name အလိုက် sort လုပ်ပြီး ပြသတဲ့အခါ ပိုသေချာသင့်တင့်စေမှာပါ။ ဒီ part ပြီးရင် Contact Book project က end-to-end အနေနဲ့ ပြည့်စုံသွားပါပြီ — Basic, Intermediate, Advanced chapters သုံးခုလုံးက concept တွေကို တစ်ခုတည်းသော project ထဲမှာ ပေါင်းစပ်အသုံးချနိုင်ခဲ့ပါပြီ။

လက်တွေ့ ဆောက်ကြည့်မယ်

Custom exception class InvalidContactException ကို Exception ကနေ inherit ပြီး ရေးပါ။ AddContact() method ထဲမှာ Name သို့မဟုတ် Phone က empty ဖြစ်ရင် InvalidContactException throw လုပ်ပါ။ Main() method ရဲ့ Add branch ထဲမှာ try/catch နဲ့ ဒီ exception ကို catch ပြီး error message ကို console မှာ ပြပါ။ ShowAll() method ကို LINQ OrderBy(c => c.Name) သုံးပြီး name အက္ခရာစဉ် sort ဖြစ်အောင် ပြင်ပါ။ နောက်ဆုံးအနေနဲ့ Console.WriteLine() တွေနဲ့ output format ကို header/separator line ထည့်ပြီး ပိုကြည့်ကောင်းအောင် polish လုပ်ပါ။

Code နမူနာ

csharp
class InvalidContactException : Exception
{
    public InvalidContactException(string message) : base(message) { }
}

class ContactManager
{
    private List<Contact> contacts = new List<Contact>();

    public void AddContact(Contact c)
    {
        if (string.IsNullOrWhiteSpace(c.Name) || string.IsNullOrWhiteSpace(c.Phone))
        {
            throw new InvalidContactException("Name and Phone are required.");
        }
        contacts.Add(c);
    }

    public void ShowAll()
    {
        Console.WriteLine("---- Contact List (sorted) ----");
        foreach (Contact c in contacts.OrderBy(c => c.Name))
        {
            Console.WriteLine($"{c.Name,-15} | {c.Phone,-12} | {c.Email}");
        }
        Console.WriteLine("--------------------------------");
    }
}

// Main() ရဲ့ Add branch ထဲမှာ
// try
// {
//     manager.AddContact(new Contact { Name = name, Phone = phone, Email = email });
//     Console.WriteLine("Contact added successfully.");
// }
// catch (InvalidContactException ex)
// {
//     Console.WriteLine("Error: " + ex.Message);
// }
You should see
Empty name/phone နဲ့ contact add လုပ်ဖို့ ကြိုးစားရင် app crash မဖြစ်ဘဲ error message ပြပြီး၊ contact list ကို name အက္ခရာစဉ်အတိုင်း သင့်တင့်စွာ ပြနိုင်တဲ့ ပြီးပြည့်စုံတဲ့ Contact Book app ရရှိပါမယ်။

၅ မိနစ် စမ်းကြည့်

Phone number format ကို regex သို့မဟုတ် simple length check နဲ့ validate လုပ်ပြီး၊ format မမှန်ရင် InvalidContactException ထပ်ထုတ်အောင် ပြင်ကြည့်ပါ။

သတိလေးတစ်ချက်

Exception ကို catch လုပ်ရုံနဲ့ silent ဖြစ်အောင် message မပြဘဲ ချန်ထားခြင်း မလုပ်ပါနဲ့ — user ကို ဘာမှားနေလဲ အမြဲ ပြောပြပါ။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Custom exception class ကို Exception ကနေ inherit မလုပ်ဘဲ ရေးလို့ catch (InvalidContactException ex) နဲ့ မမိတတ်တာ
  • try/catch ကို method တစ်ခုလုံးအတွက် မဟုတ်ဘဲ AddContact() call တစ်ခုတည်းကို wrap လုပ်ဖို့ မေ့တတ်ပြီး unrelated code တွေအထိ catch ထဲပါသွားတတ်တာ

အခု ကိုယ်တိုင် စမ်းကြည့်

Phone number format ကို regex သို့မဟုတ် simple length check နဲ့ validate လုပ်ပြီး၊ format မမှန်ရင် InvalidContactException ထပ်ထုတ်အောင် ပြင်ကြည့်ပါ။

You'll know it worked when: Empty name/phone နဲ့ contact add လုပ်ဖို့ ကြိုးစားရင် app crash မဖြစ်ဘဲ error message ပြပြီး၊ contact list ကို name အက္ခရာစဉ်အတိုင်း သင့်တင့်စွာ ပြနိုင်တဲ့ ပြီးပြည့်စုံတဲ့ Contact Book app ရရှိပါမယ်။

Project: Contact Book – Part 3 (Validation + Polish) | Thuta Learning