Part 3: MVC
Tags: csharp, dotnet, dotnetcore
Published: 2023-05-23 17:04:14

.NET Core ပေါ်မှာ ပထမဆုံး API တခုဆောက်ကြည့်ပြီးပြီဆိုတော့ ဒီတခါတော့ .NET Core ရဲ့ နာမည်အကြီးဆုံး feature တခုဖြစ်တဲ့ MVC အကြောင်းဆက်ရေးပါမယ်။ Project setup လုပ်ခဲ့တုန်းက Minimal API feature ကိုသုံးပြီး Hello World ရေးကြည့်ခဲ့တယ်။ အခုတော့ Web Application တခုကို MVC feature သုံးပြီး ဘယ်လိုတည်ဆောက်ရမလဲဆိုတာ ပြောပြပေးသွားမှာပါ။ ဒီတော့ Code တွေ Implementation တွေခဏထားပြီး Architecture Pattern အကြောင်း အရင်ဆုံး လေ့လာကြည့်ရအောင်ပါ။

**M-V-C**

M-V-C က Model-View-Controller ဆိုတဲ့ Design architecture pattern ရဲ့ အတိုကောက်စာလုံးပါ။ M ကတော့ Model ကိုကိုယ်စားပြုပါတယ်။ Application Data နဲ့ သူ့ရဲ့ Business Logic လို့ သဘောပေါက်ထားရပါမယ်။ C ဆိုတာက Control Logic(Controller) ပါ။ Data ကို UI နဲ့အတူ User ဆီရောက်အောင်ပို့ပေးပြီး User ဆီက Data ကို Model ဆီပို့ပေးတဲ့ Logic ပါ။ V ကတော့ Presentation User Interface(View) ပါ။ Data model ကို User မြင်ရအောင် ပြပေးတဲ့ အပိုင်းပေါ့။ ဒါတွေဟာ Separation of Concerns ဆိုတဲ့ Software principle ကိုအခြေခံပါတယ်။ User input data တွေကို စီမံခန့်ခွဲတဲ့ အပိုင်းကို Controller ကလုပ်ဆောင်ပြီး Business Logic နဲ့ Database Handling ကို Model က လုပ်ဆောင်ပါတယ်။ UI အတွက် View ကဆောင်ရွက်ပါတယ်။ ဒါဟာ သူ့အပိုင်းနဲ့သူ Application concern တွေကို ခွဲခြားထားတဲ့သဘောပါ။ MVC ဟာ Web Development ဘက်မှာတော့ တော်တော်လေးကို ကျယ်ကျယ်ပြန့်ပြန့် အသုံးပြုနေတဲ့ Architecture pattern တခုပဲဖြစ်ပါတယ်။ အထင်ရှားဆုံး Web application framework တွေအနေနဲ့ Rails, Laravel, Django, Spring MVC, .NET MVC စသဖြင့်တွေ့ရမှာပါ။ Programming Language တွေကွဲပြားသွားပေမဲ့ Architecture ကတော့ ဒီပုံစံပါပဲ။ 

**Player Roles**

ဒီတော့ MVC pattern အကြောင်း သဘောပေါက်ပြီဆို Model, View, Controller တွေရဲ့ Do and Don't တွေအကြောင်းဆက်ပါမယ်။ ဒါဘာလို့ပြောရတာလဲဆိုတော့ ဘယ်အပိုင်းမှာ ဘာလုပ်ရမယ်လို့ ရှင်းရှင်းလင်းလင်း မသိတဲ့ အခါကျရင် မှားပြီး လုပ်မိတတ်တာတွေရှိလို့ပါ။ ဒါက ကျနော်ကိုယ်တိုင် လုပ်မိတာတွေရော တခြားမှာ တွေ့ရတတ်တာတွေကိုရောပါ အခြေခံပြီးပြောတာပါ။(မယုံမရှိနဲ့ View ထဲမှာ C# code inject လုပ်ပြီး CRUD လုပ်ထားတာတောင် တွေ့ဘူးတယ် :3) Model မှာဘာလုပ်လဲ? Model ဆိုတဲ့ အပိုင်းက Application Data နဲ့ Business Logic လို့ပြောခဲ့ပါတယ်။ App Data ဆိုတော့ Model ဟာ App တခုလုံးရဲ့ Data Structure ကိုကိုယ်စားပြုတာပါ။ App တခုရေးမယ်ဆို Database လိုပါတယ်။ Model ဟာ Database နဲ့အနီးကပ်ဆုံး Logic ပါပဲ။ ဒီတော့ Data နဲ့ပတ်သတ်တဲ့ Business logic တွေရှိပါတယ်။ ဘယ် Data က ဘယ်ကောင်နဲ့ ချိတ်နေတာ။ ဘယ် Data ကို ဆွဲထုတ်ရင် ဘယ်‌ data တွေပါပါလာရမယ်။ ဘယ် data ကို ဖျက်ရင်တော့ ဘယ် data တွေပါ လိုက်ဖျက်ရမယ်။ ဘယ် Data မရှိရင်တော့ ဘယ် data ကိုလက်မခံဘူး စတဲ့ Business Logic တွေ Validation တွေဟာ Model ထဲမှာ ရှိရမှာပါ။ ဒီတော့ Controller ကဘာလုပ်သလဲပေါ့။ Controller ကို View နဲ့ Model ကြားက Media လို့မြင်ကြည့်ပါ။ View က လာတဲ့ data တွေကို Model တွေဆီပို့ပေးပြီး Model က data တွေကို View မှာ bind ဖို့ပြန်ပို့ပေးတဲ့ အလုပ်ကိုလုပ်တာပါ။ Web Application တခုမှာဆိုရင် Controller က Request/Response handling ပဲလုပ်ရမှာပါ။ ဝင်လာတဲ့ Input Data တွေမှန်ကန်ရဲ့လား။ ဒီ Input က ဘယ် Model အတွက်လဲ။ Request လုပ်တဲ့ data ကရောတကယ် အသုံးပြုခွင့်ရှိတဲ့ Data မျိုးလား။ ဒီ Request အတွက်တော့ ဘယ် View သုံးပြီး ဘယ် data ကို Response လုပ်ရမလဲ စတဲ့ Task တွေပဲလုပ်ရမှာပါ။ Controller ကနေ Data နဲ့ပတ်သတ်တဲ့ ကိစ္စတွေ လုပ်နေတာမျိုး UI Logic တွေကို ကိုင်တွယ်နေတာမျိုးဆို ဒါလွဲနေပြီလို့ သိရပါမယ်။ နောက်ပြီးတော့ View ပါ သူက ရိုးရှင်းပါတယ်။ User interface နဲ့ သက်ဆိုင်တဲ့ အလုပ်တွေပဲ လုပ်ရမှာပါ။ ဘာအရောင် ဘာ Layout နဲ့ ဘယ် Data ဆို ဘယ်လိုပြမယ် ဘယ် input data အတွက် ဘယ် control နဲ့လက်ခံမယ်ဆိုတဲ့ Logic တွေ ပဲရှိရမှာပါ။ ဒါဆိုရင် MVC Architecture ရဲ့ အမြုတေ ဖြစ်တဲ့ Separation of Concerns ဆိုတဲ့ Principle ကို ကောင်းကောင်း Follow up လုပ်ပြီး ရှင်းလင်းတဲ့ Application တည်ဆောက်ပုံတခုရလာမှာ ဖြစ်ပါတယ်။ ဒီတော့ ဒီ Concern သုံးခုဟာ Http Request တခုအတွက် ဘယ်လိုဟန်ချက်ညီညီ အလုပ်လုပ်လဲ အောက်က ပုံထဲမှာ ကြည့်ကြည့်လိုက်ပါ။ 

![MVC diagram](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s4c5vf61s1nt8eoev7nf.png)

ပုံထဲမှာ ကြည့်လိုက်ရင် Controller က Model နဲ့ View ကို အပြန်အလှန် ချိတ်ဆက်နေပြီးတော့ View နဲ့ Model ဟာ ကြားထဲက Controller ကနေတဆင့် ချိတ်ဆက်နေပါတယ်။ Request တွေ Response တွေကိုတော့ Controller ကနေပြီးတော့ပဲ Handle လုပ်နေတာပါ။ ဒီလောက်ဆိုရင်တော့ MVC Architecture ကို မျက်လုံးထဲ မြင်လောက်ပြီထင်ပါတယ်။ Architecture ကိုပိုင်ပိုင်နိုင်နိုင် နားလည်နေဖို့လိုပါတယ်။ နောက်မို့ဆိုရင် မြန်မာစကားပုံလို မြင်းစီးပြီး အထီးမှန်း အမမှန်းမသိ ဖြစ်နေပါလိမ့်မယ်။ ဒါကိုသေချာနားလည်အောင် ပြန်ဖတ်ကြည့်လိုက်ပါ။ နောက်တပိုင်းမှာတော့ .NET Core နဲ့ MVC App တခုစ ရေးပါမယ်။

_Focus on your code, you will be happy(iLied) xD_