Thinking About Clean Architecture For Enterprise Application (Story-1)
ကျွန်တော်တို့ software ရေးတဲ့အခါနေ့ဒဓူ၀ပြသနာတွေရင်ဆိုင်ရပါတယ်။ ကျွန်တော်ဆိုလဲ နေ့တိုင်းခေါင်းတွေခဲ ဒါကြီးကိုဘယ်လိုပြန်ပြင်ရင်ကောင်းမလဲဆိုတဲ့ စိတ်နဲ့ပဲတိုင်ပတ်နေတတ်တယ်။အဲ့တော့ clean architecture အကြောင်းကိုကျွန်တော်တို့ တွေးကြည့်ရအောင်ဒီနေရာမှာ ကျွန်တော်က သိလို့ပြန်ရှင်းပြနေတာမဟုတ်ပါဘူး။ ကျွန်တော်တို့ အမြင်ခြင်းဖလှယ်တယ်လို့သဘောထားကြည့်ရအောင်ပါ ။ပထမဆုံး Clean Architecture ဆိုတာဘာကိုပြောချင်တာလဲ
What is Clean Architecture?
Clean Architecture ဆိုတာ ကြက်သွန်နီလေးတစ်ခုနဲ့တူတယ်လို့ကြားဖူးခဲ့တယ်။
layer တစ်ခုချင်းစီရဲ့ code ဒါမှမဟုတ် dependency rule တွေက တစ်ခုခုနဲ့တစ်ခု တိုက်ရိုက်သတ်ဆိုင်မှုမရှိကြပါဘူး။
အဲ့တော့ code တွေက depenedent မဖြစ်တဲ့အတွက်ဘာတွေပိုကောင်းလာမလဲဆိုတော့
၁. Frameworks တွေအပေါ်မှာလိုက်မှီခိုမနေတော့ဘူး (ဥပမာ ဒီ app ထွက်ဖို့ဒီ language နဲ့ပဲရေးရမယ်ဆိုတာမျိုးပေါ့ )
၂. Testable ကောင်းလာမယ် ။ Test code တွေစမ်းတဲ့အခါပိုလွယ်လာမယ်။
၃. UI ပြောင်းမယ်ဆို တခြား logic ရေးထားတဲ့ အပိုင်းတွေပါပြန်ပြင်ရတာ နည်းလာမယ်။
၄. Third party or External agency တွေတစ်ခုခု ပြောင်းတိုင်းမှာ ကို့ code တွေကိုအမြဲပြင်နေစရာမလိုတော့ဘူး
၅. Easy to follow up template ဖြစ်တယ် ( same template ကိုပြန်သုံးလို့ရပါတယ် new features တွေအတွက်)
၆. Teamwork ပိုကောင်းလာတယ် ပိုပီးလဲတာ၀န်ခွဲလို့ကောင်းလာတယ် new feature တွေကို တစ်ယောက်ချင်းစီ လုပ်ခိုင်းလို့ရလာတယ်
ဆိုတဲ့ စတဲ့အကျိုးကျေးဇူးလေးတွေရလာတယ်ဗျ အဲ့တာ ကျွန်တော်ကိုယ်တိုင် clean ရေးနေတဲ့အတွက် အဲ့လိုဖြစ်တဲ့အကျိုးကျေးဇူးလေးတွေ ကောင်းကောင်းသိမိတယ်။
Android တွေအတွက်တော့ (Android developer များအတွက်)
. UI or view layer ( View နဲ့ View နဲ့ သက်ဆိုင်တာတွေအတွက် ရေးတဲ့ ViewModel )
. Database layer ( Sqldelight, Room, SqlLight, Realm, etc…)
. Business Logic layer ( ကျွန်တော့စီနီယာတွေသင်ပေးသလို ကျွန်တော်လဲ နှစ်ပိုင်းပဲခွဲပါတယ် Data နဲ့ Domain ၊ ပီးမှ ကျွန်တော်သပ်သပ် ထပ်ပီးတော့ အဲ့အကြောင်းထပ်ပီးအသေးစိတ်ရှင်းပြပါမယ်)
. Third-Party or External Agency layer ( Android က code ကိုရေးတာထက် လုပ်ပီးသား library တွေကို extend လုပ်တာပိုလွယ်တဲ့အတွက် သပ်သပ်တစ်ခုခွဲထုတ်ထားတာပါ
. Network Layer ( Network Api တစ်ခုခုကို fetching or uploading လုပ်ဖို့အတွက်ပါ)
Clean Architecture ရဲ့ အားနည်းချက်?
- Number of files/compilation time — ပိုကြာတယ်။ဟုတ်ပါတယ် file တစ်ခု ကို purpose တစ်ခုစီရေးရတဲ့အတွက် ပိုလဲများလာပါတယ် ပိုလဲခေါင်းရှုပ်ပါတယ်။ complex features purpose တွေအတွက်ဆိုတူသယောင်ယောင်နဲ့ကွဲတဲ့ file တွေပိုများတဲ့အတွက် ပိုရေးရပါတယ်။ file ပိုများတော့ compilation time ပိုကြာပါတယ်
- Development time — file ပိုရေးရတော့ ပိုပီး development time ပိုကြာတာတော့သိပီးကြမှာပေါ့ xD
- Redundancy in code or when coding — file ပိုများတော့ ပိုပီး code တွေရေးရပါတယ် အဲ့တာတွေကို ပြန် ပီး စီစဥ်ရပါတယ်။ Refactoring code time ကို သပ်သပ်အချိန်ပေးပီးပြန်လုပ်ပေးရပါတယ် code ကို update လုပ်မလား ဒီထက်ပိုကောင်းတဲ့ architecture တွေရှိရင် ဘယ်လိုပြန်ပီး apply လုပ်မလဲစတဲ့အရာတွေကို software company တွေကအချိန်ပေးရပါတယ် တစ်နှစ်တစ်ခါလောက်ပေါ့။ နည်းပညာဆိုတာရပ်မနေပါဘူး၊ ပိုကောင်းတဲ့အရာရှိရင် လက်သင့်ခံပီး ထပ်လုပ်ပေးရမှာပါ။ အဲ့ကျမှ ပိုကောင်းတဲ့ product တွေထွက်လာမှာပါ။
Clean Architecture ရဲ့ Goal
သူ့ရဲ့ goal ကတော့ နည်းနည်းအားစိုက်ထုတ်ရပီး များများ prodcut ထွက်အောင်ပါ။ အစကတည်းက software design နဲ့ architecture ကို သေချာဆွဲထားနိုင်ခဲ့မယ်ဆို ရင် ပိုပီးကောင်းလာတဲ့ software ကောင်းတစ်ခုရလာမှာပါ။ Clean Architecture ကတော့ ကြီးမားတဲ့ application တစ်ခုကိုအကောင်းဆုံးတည်ဆောက်ပေးနိုင်ပါတယ်။ တော်တော်များများ devloper တွေကလဲ recommend ပေးထားကြပါတယ်။ ဒါကတော့ ကျွန်တော်ကကြီးမားတဲ့ software တွေမှာ clean architecture သုံးစေချင်တဲ့ အမြင်ပါ။
နောက်တစ်ပိုင်းမှာကျွန်တော် solid principle အကြောင်းမြင်တဲ့အမြင်ကိုပြောပြပါမယ်။ အကုန်လုံးရဲ့ အမြင်ကိုလဲလာဆွေးနွေးလို့ရပါတယ်ခင်ဗျ
See you Next Story 😉😉
ဒါကတော့ Story 2 လေးပါ
Reference Link
Clean Architecture by Robert C. Martin pdf
Software Design and Architecture Illuminated pdf
https://www.devteam.space/blog/clean-architecture-for-android-apps
https://crosp.net/blog/software-architecture/clean-architecture-part-2-the-clean-architecture/