01/11/2025
Spring Boot projectတစ်ခုမှာ Junior Developer နဲ့ Senior Developer ကို ဘာက အဓိက ခွဲခြားသလဲ။ အဲဒါကတော့ Code Patterns တွေပါ။ Senior Developer တွေဟာ ပိုပြီး စနစ်ကျ၊ လွယ်ကူထိန်းသိမ်းနိုင်တဲ့၊ လိုအပ်ရင် ပြောင်းလဲလို့ရတဲ့ Code တွေကို ဖန်တီးဖို့အတွက် သတ်မှတ်ထားတဲ့ ပုံစံ ၅ မျိုးကို ကျွမ်းကျင်ပိုင်နိုင်စွာ အသုံးပြုတတ်ကြပါတယ်။ Junior ဘဝကနေ Senior အဆင့်ကို ကူးပြောင်းဖို့အတွက် မဖြစ်မနေသိထားရမယ့် Spring Boot Patterns ၅ မျိုးကို တစ်ခုချင်းစီ လေ့လာကြည့်ရအောင်ဗျာ။
၁။ 🛡️ Strategy Pattern
ပထမဆုံး Pattern ကတော့ Strategy Pattern ပါ။ ဒါက ဘာအတွက်လဲဆိုရင်တော့ ကျွန်တော်တို့ Application မှာ အလုပ်တစ်ခုတည်းကို လုပ်ဆောင်ဖို့အတွက် နည်းလမ်းမျိုးစုံ၊ တွက်ချက်ပုံ (Algorithms) မျိုးစုံ ရှိနေတဲ့အခါမျိုးမှာ သုံးပါတယ်။ ဥပမာ- ငွေပေးချေမှု (Payment) ကို Credit Card နဲ့ ပေးမလား၊ Mobile Banking နဲ့ ပေးမလား စသဖြင့်ပေါ့နော်။ Senior ဘာကြောင့် သုံးတာလဲဆိုရင် Senior တွေဟာ if/else ဒါမှမဟုတ် switch အကြီးကြီးတွေကို ရှောင်ရှားချင်ကြပါတယ်။ ဒီ Pattern ကို သုံးလိုက်ရင် ပုံစံအသစ်တစ်ခု (ဥပမာ- Crypto Payment) ထပ်ထည့်ဖို့အတွက် လက်ရှိ Code တွေကို လုံးဝ ပြင်စရာမလိုဘဲ အသစ်တစ်ခု ရေးထည့်လိုက်ရုံပါပဲ။ ဒါကို Open for Extension, Closed for Modification လို့ခေါ်ပါတယ်။
၂။ 🏭 Factory Pattern
ဒုတိယတစ်ခုကတော့ Factory Pattern ပါ။ နာမည်အတိုင်းပါပဲ၊ ပစ္စည်းထုတ်တဲ့ စက်ရုံလိုပေါ့နော်။ ဒါက ဘာအတွက်လဲဆိုရင်တော့ Object တစ်ခုကို ဖန်တီးတဲ့ လုပ်ငန်းစဉ် (Instantiation Logic) ကို၊ အဲဒီ Object ကို အသုံးပြုမယ့် Class တွေဆီကနေ ဖယ်ထုတ်ပစ်ဖို့ သုံးပါတယ်။ Junior နဲ့ Senior ကွာခြားချက်ပြောရရင်တော့ Junior တွေဟာ Code ထဲမှာ new MyObject() လို့ အမြဲတမ်း ခေါ်နေတတ်ကြတယ်။ Senior တွေကတော့ ဒီလိုဖန်တီးတဲ့အပိုင်းကို သီးခြား Class (Factory) တစ်ခုထဲမှာ ပိတ်ပြီး ထားလိုက်ပါတယ်။ ဒီလိုလုပ်ခြင်းအားဖြင့် အပြင်က Class တွေဟာ ဘယ် Object ကို သုံးနေတယ်ဆိုတာကို သိစရာမလိုဘဲ အလုပ်အပ်လိုက်ရုံပါပဲ။ ဒါမှ Code တွေ ချိတ်ဆက်မှု (Coupling) လျော့နည်းပြီး လွယ်လွယ်ကူကူ ပြောင်းလဲနိုင်မှာပါ။
၃။ 🗣️ Observer Pattern
တတိယ Pattern ကတော့ သတင်းပို့စနစ် (Notification System) တွေမှာ အသုံးများတဲ့ Observer Pattern ပါ။ ဒါက ဘာအတွက်လဲဆိုရင်တော့ Event တစ်ခုဖြစ်လာတဲ့အခါ (ဥပမာ- User တစ်ယောက် အကောင့်ဖွင့်လိုက်တဲ့အခါ)၊ အဲဒီ Event နဲ့ သက်ဆိုင်တဲ့ လုပ်ငန်းဆောင်တာများစွာကို အလိုအလျောက် အကြောင်းကြားပြီး လုပ်ဆောင်စေဖို့အတွက် သုံးပါတယ်။ Spring Boot မှာ ဘယ်လိုသုံးလဲ။ Spring ရဲ့ ApplicationEventPublisher ကိုသုံးပြီး သီးခြား Class တွေဆီကို Message တွေ လွှင့်ပေးလို့ရပါတယ်။ ဥပမာ- User အကောင့်ဖွင့်တာနဲ့ Email ပို့တာ၊ Welcome Badge ပေးတာ၊ Log ထုတ်တာ စတဲ့ လုပ်ငန်း ၃ ခုကို တစ်ပြိုင်နက် လုပ်ဆောင်စေနိုင်ပါတယ်။ ဒါမှ Main Business Logic က ပိုပြီး သန့်ရှင်းသွားတာပေါ့နော်။
၄။ 🧩 Decorator Pattern
နောက် patternကတော့ Decorator Pattern ပါ။ ဒါက ဘာအတွက်လဲဆိုရင်တော့ လက်ရှိ Object ရဲ့ အဓိက လုပ်ဆောင်ချက် (Core Functionality) ကို မထိခိုက်စေဘဲ အပိုဆောင်း စွမ်းဆောင်ရည် (Additional Functionality) တွေကို လိုသလို ထပ်ထည့်ပေးဖို့အတွက် သုံးပါတယ်။ လက်တွေ့ ဥပမာ- UserService ဆိုတဲ့ Class တစ်ခုရှိတယ်။ အဲဒီ Service ရဲ့ အရှေ့မှာ Logging နဲ့ Caching ကို ထပ်ထည့်ချင်တယ်ဆိုရင်၊ လက်ရှိ Service Code ကို လုံးဝမပြင်ဘဲ Decorator Class တွေနဲ့ အပေါ်ကနေ ဝန်းရံပြီး ထပ်ပေါင်းထည့်လိုက်လို့ ရပါတယ်။ ဒီ Pattern က Code တွေ ထပ်ခါတလဲလဲ ဖြစ်တာကို လျော့နည်းစေပါတယ်ဗျာ။
၅။ 🔄 Chain of Responsibility
နောက်ဆုံး patternကတော့ Chain of Responsibility ပါ။ နာမည်ရှည်ပေမယ့် ရိုးရှင်းပါတယ်ဗျာ။ ဒါက ဘာအတွက်လဲဆိုရင် Request တစ်ခု (ဥပမာ- API Call တစ်ခု) ဝင်လာတဲ့အခါ၊ အဲဒီ Request ကို လက်ခံကိုင်တွယ်ဖို့အတွက် Class တွေရဲ့ ဆင့်ကဲကွင်းဆက် (Chain) ကို ဖွဲ့စည်းပေးတာပါ။ Spring Boot ရဲ့ Filter ဒါမှမဟုတ် Interceptor တွေဟာ ဒီ Pattern ကို အသုံးပြုထားတာပါ။ Request တစ်ခု ဝင်လာတာနဲ့ Authentication လုပ်မယ်၊ ပြီးရင် Authorization လုပ်မယ်၊ ပြီးမှ Controller ဆီ ပို့မယ်၊၊ ဒါတွေဟာ တာဝန်ယူမှု ကွင်းဆက်တစ်ခုပါပဲ။ Senior တွေဟာ ကိုယ့်ရဲ့ Custom Business Logic ကိုလည်း ဒီလို ကွင်းဆက်ထဲမှာ ထည့်သွင်း စီမံခန့်ခွဲတတ်ကြပါတယ်ဗျာ။
ဒီတော့၊ အခုပြောပြတာတွေက ရှင်းပါတယ်။ Junior တွေဟာ "အလုပ်ပြီးမြောက်ဖို့" ကိုပဲ အာရုံစိုက်ပေမယ့်၊ Senior တွေကတော့ "အလုပ်ကို စနစ်တကျနဲ့ အနာဂတ်အတွက် လွယ်လွယ်ကူကူ ပြင်ဆင်နိုင်အောင် ဘယ်လိုပြီးမြောက်စေမလဲ" ဆိုတာကို အမြဲစဉ်းစားပါတယ်။ ဒီ Pattern ၅ မျိုးကို နားလည်ပြီး ကိုယ့် Code ထဲမှာ စတင်အသုံးပြုကြည့်ပါလို့ အားပေးချင်ပါတယ်ခင်ဗျာ။
Telegram link- https://t.me/petersawmtech/54
𝐉𝐚𝐯𝐚 𝐏𝐫𝐨𝐠𝐫𝐚𝐦𝐦𝐢𝐧𝐠 ရဲ့ အဓိက သဘောတရားများက ဘာတွေလဲ
https://www.facebook.com/share/p/1CZEkKyYxm/
Object-Oriented Programming (OOP)ကို နားလည်ဖို့ လိုတယ်
https://www.facebook.com/share/p/1BZbLF5yt2/
React အကြောင်းတစ်စေ့တစ်စောင်း
https://www.facebook.com/share/p/12KTTkhtW7o/
Programming concepts တွေကို နားလည်ဖို့လိုတယ်
https://www.facebook.com/share/p/1MmeX162Ds/
𝐉𝐚𝐯𝐚 ဖြင့် 𝐃𝐒𝐀- ထိရောက်သော အဆင့်ဆင့် သင်ယူနည်းလမ်း
https://www.facebook.com/share/p/1C3y6drdGi/