Part 1: C# and .NET Core
Tags: csharp, dotnetcore, dotnet
Published: 2023-03-03 02:49:22

**Foreword**

ဒီ Series ကိုမစခင် ဒီ Series မှာပါဝင်မဲ့ အကြောင်းအရာတွေနဲ့ ကျနော်တဲ့ စာရေးတဲ့ ပုံစံကို အရင်ပြောပါရစေ။ ဒီ Series ကတော့ Microsoft web development stack တခုဖြစ်တဲ့ ASP.NET Core ကို C# programming language အသုံးပြုပြီး မြန်မာလို ရှင်းလင်းရေးသားသွားမဲ့ Series တခုပဲဖြစ်ပါတယ်။ ကျနော် စာရေးတဲ့နေရာမှာ စာလုံးပေါင်းသတ်ပုံထက် ဖတ်လို့ရေးလို့အဆင်ပြေတဲ့ ပုံစံကို အဓိကထားပြီးရေးလေ့ရှိပါတယ်။ ဥပမာ တခါတလေ သတ်ပုံအမှန် "ကျွန်တော်" အစား "ကျနော်"၊ "ဘယ်လို" အစား "ဘလို" စသဖြင့် ရေးတတ်လို့ ဒီလိုမျိုးတွေ တွေ့တယ်ဆိုရင် နားလည်ပေးစေချင်ပါတယ်။ နောက်ပြီး Series တခုလုံးကို မြန်မာလိုရေးသားသွားမယ် ဆိုပေမဲ့ Technical term အားလုံးနီးပါးကိုတော့ မူရင်း English စာအတိုင်းပဲ အသုံးပြုသွားပါမယ်။ ဒီ Series မှာ .NET web development technology တွေဖြစ်တဲ့ **MVC**, **Razor Page**, **Web API**, **Singal R**, **EF Core**, **Minimal API** နဲ့အတူ လက်တွေ့အသုံးချ **Design Patterns**, **Useful Nuget Packages**, **Design Architectures**, **Development Best Practices**, **Security Best Practices** စတဲ့အကြောင်းအရာတွေကို အတတ်နိုင်ဆုံး နားလည်သဘောပေါက်တဲ့အထိ ရှင်းလင်းရေးသားသွားမှာဖြစ်ပါတယ်။ Knowlege level ထက်လက်တွေ့အသုံးချတဲ့ Pragmatic approach နဲ့ ရေးသွားမှာမလို့ သေချာစောင့်ဖတ်ပြီး လက်တွေ့လိုက်လုပ်ကြည့်ရင် အကျိုးရှိမဲ့ Series တခုဖြစ်တယ်ဆိုတာ ပြောပါရစေ။

**Who should read this series?**

ဒီ Series ဟာ Programming သင်ပေးမဲ့ Series မဟုတ်လို့ Programming basic knowledge ရှိပြီး C# Programming language နဲ့ ရင်းနှီးကျွမ်းဝင်တဲ့ သူတွေအတွက်ပဲ အဆင်ပြေပါလိမ့်မယ်။ C# ကိုမသိသေးဘူးဆိုရင်တော့ C# tutorial တွေကို အရင်လေ့လာဖို့ အကြံပေးလိုပါတယ်။

**C# (C Sharp) [စီ-ရှပ်ပ်]** 

C# ဟာ 1999 မှာ .NET framework နဲ့အတူထွက်ပေါ်လာတဲ့ Programming language တခုဖြစ်ပြီးတော့ Microsoft ကဖြန့်ချီပါတယ်။ မူရင်း ဖန်တီးသူကတော့ [Anders Hejlsberg](https://en.wikipedia.org/wiki/Anders_Hejlsberg) ဖြစ်ပါတယ်။ High level programming language ဖြစ်ပြီးတော့ အရင်က csc(C Sharp Compiler) ကိုအသုံးပြုခဲ့ပြီး အခုတော့ Rosyln လို့ခေါ်တဲ့ compiler နဲ့ compile လုပ်ပါတယ်။ Compile လုပ်ပြီးသား code တွေကို .NET Runtime လို့ခေါ်တဲ့ CLR(Common Language Runtime) ပေါ်မှာ Run ပါတယ်။ အရင်ဆုံးသိထားရမှာက Java တို့ C# တို့လို High level programming language တွေက လက်ရှိ run နေတဲ့ OS ရဲ့ resource တွေကို ယျေဘုယျအားဖြင့် တိုက်ရိုက် မစီမံနိုင်ပါဘူး။ အက်ဒီအစား သူတို့ရဲ့ VM(Virtual Machine) ကနေ တဆင့် manage လုပ်ပြီးမှ JIT(Just in Time Compiler) ကိုအသုံးပြုပြီး execute လုပ်ပါတယ်။ .NET မှာရှိတဲ့ CLR က သူ့ရဲ့ VM ပါပဲ။ ဒါကြောင့်မလို့ တိုက်ရိုက် run လို့ရတဲ့ Low level language ဖြစ်တဲ့ C တို့ C++ တို့လို Memory management ဘာညာတွေ ကိုယ်တိုင်လိုက်လုပ်နေဖို့မလိုပါဘူး။ Garbage Collector တွေကနေ လုပ်ဆောင်ပေးသွားမှာပါ။ C# program တခုကို CPU ပေါ် execute လုပ်ဖို့အတွက် .NET SDK/Framework ကအဆင့် ၃ ခု လုပ်ပါတယ်။ Lowering, Compiling နဲ့ JITing ပါ။ Lowering ဆိုတာကတော့ C# မှာ ရှိတဲ့ High level feature တွေကို Low level code အဖြစ်ပြောင်းတာပါ (ဥပမာ ကိုယ်က foreach Loop ရေးလိုက်ပေမဲ့ တကယ်တမ်း နောက်ကွယ်မှာ compiler က အက်တာကို for, while, do while စသဖြင့် သင့်တော်တဲ့ looping ပုံစံပြန်ရေးပေးတာမျိုး switch expression တွေကို လိုအပ်သလို if-else/ternary စသဖြင့် ပြောင်းပေးတာမျိုးကို ပြောတာပါ)။ Compiling ဆိုတာကတော့ Lowering လုပ်ထားတဲ့ C# code ကို IL Code(Intermediate Language Code) အဖြစ်ပြောင်းပြီး DLL သို့မဟုတ် EXE File အဖြစ် သိမ်းလိုက်တာပါ။ ဒါကို Managed Code လို့လဲခေါ်ပါတယ်။ Application run တဲ့အခါမှာတော့ IL Code ကို .NET Runtime က JIT Compiler နဲ့ Native code(Machine code) ပြောင်းပြီး CPU မှာ Execute လုပ်ပါတယ်(ဒီ Process က အမြဲမလုပ်ပါဘူး တခါ Native code ပြောင်းပြီးသား code တွေကို cache ဖမ်းထားပြီး နောက်တခါ Execute လုပ်ဖို့လိုလာရင် cache ထဲက Native code ကိုပဲ run လိုက်မှာပါ)။ IL Code ပြောင်းတဲ့ Process ကို ဒီနေရာမှာ Compiling လုပ်တယ်လို့ခေါ်ပြီး ဒီ process ကို Rosyln compiler က Analyzer တွေအသုံးပြုပြီး Compile time checking လုပ်ပေးတာမလို့ တော်ရုံ code အမှားတွေကို Compile time မှာတည်းက Detect လုပ်ပြီး fix လို့ရပါတယ်။ ဒါတွေက သပ်သပ် topic ဖြစ်သွားလို့ ဒီလောက်နဲ့ပဲ ရပ်လိုက်ပါမယ်။

**.NET Core**

Microsoft က .NET Framework ကိုစတင်ခဲ့ချိန်တုန်းက 100% closed source အဖြစ်စတင်ခဲ့တာပါ။ သူ့ OS ဖြစ်တဲ့ Windows development အတွက်ပဲရည်ရွယ်ခဲ့တာ ဖြစ်ပြီး အက်သည် Framework နဲ့ တွဲပြီးထုတ်ခဲ့တဲ့ Language တွေဟာ Framework integrated ဖြစ်တဲ့ Language တွေသာ ဖြစ်ခဲ့ပါတယ်။ ဆိုလိုတာကတော့ အခုအထိ VB, C#, F# စတဲ့ Language တွေဟာ .NET မရှိပဲ မ run နိုင်ပါဘူး။ PHP လိုကောင်တွေဆို Laravel မရှိလဲ Symfony လို Framework တွေနဲ့ Development လုပ်လို့ရပါတယ်။ နောက်ပိုင်း ကျယ်ပြန့်လာတဲ့ Web development ‌technology တွေနဲ့ အတူ Open source ခေတ်ရောက်လာတဲ့အချိန်မှာတော့ Microsoft ဟာ .NET ကို Open source ဘက်မှာ တာထွက်ဖို့ကြိုးစားလာပါတယ်။ အရင်က ASP.NET ကိုပဲ Open source ပေးထားတဲ့ သူရဲ့ Open source platform ဖြစ်တဲ့ Codeplex ကိုရပ်ခဲ့ပြီး Github ကိုဝယ်ခဲ့ပါတယ်။ နောက်ပြီး .NET framework ကိုလဲ version 4.8 မှာရပ်ခဲ့ပြီးတော့ အက်အစား .NET ဆိုတဲ့ Term ကိုပြောင်းလဲပြီး .NET 5 ကနေစပြီး .NET platform တခုလုံးကို opensource ပေးလိုက်ပါတယ်။ လက်ရှိဒီစာကိုရေးနေချိန်မှာတော့ .NET 8 အထိရောက်နေပြီဖြစ်ပါတယ်။ တကယ်တော့ Microsoft ဟာ အခုလို .NET platform တခုလုံးကို Open source ပေးဖို့တာစူခဲ့တဲ့ 2016 လောက်မှာ .NET Core ကို အရင်မိတ်ဆက်ခဲ့တာပါ။ ဒါပေမဲ့ version 1,2 လောက်အထိ မအောင်မြင်ခဲ့ဘူးလို့ပြောလို့ရပါတယ်။ အဓိက ပြသနာက Target framework version ပါပဲ။ အက်သည်အချိန်တုန်းက .NET Core နဲ့ရေးထားတဲ့ code တွေကို .NET framework မှာ ပြန်သုံးလို့ မရသလို .NET framework က code ကို .NET Core ပေါ်ခေါ်သုံးလို့မရဘူး။ ဒီတော့ Microsoft ဟာ Target Framework အစား .NET Standard ဆိုပြီး code Standard တခုထုတ်ပြီးတော့ .NET Eco System က code မှန်သမျှကို အက်သည် Standard ပေါ်ကနေပဲ Compile လုပ်တဲ့ Design နဲ့ ဆက်သွားပါတယ်။ version 3.1 အရောက်မှာ .NET Core ကလည်း အတိုင်းတာတခုအထိ အောင်မြင်ခဲ့ပါတယ်။ အခုတော့ ".NET Framework" ဆိုတာလဲ မရှိတော့သလို ".NET Core" ဆိုတာလဲမရှိတော့ဘဲ ".NET" အဖြစ်နဲ့သာရှေ့ဆက်နေပါတယ်။ ဒီနေရာမှာ သိထားဖို့က Microsoft ဟာ .NET framework ကိုရပ်လိုက်ပေမဲ့ Legacy support ပေးနေတုန်းဖြစ်ပြီး .NET framework ဟာလဲ အသစ်မထွက်တော့ပေမဲ့ ဆက်သွားနေတုန်းပါ။ Development stack ကို .NET လို့ပြောင်းလဲလိုက်ပေမဲ့ Developer အများစုကတော့ .NET Core ဆိုတဲ့ Term နဲ့အသားကျခဲ့တော့ အခုအထိ .NET Core လို့ခေါ်ဝေါ်နေတုန်းပါပဲ။ ဒီတော့ .NET Core နဲ့ ASP.NET Core ဘာကွာလဲမေးစရာရှိပါတယ်။ .NET ဆိုတာကတော့ .NET Platform ကိုခေါ်တာဖြစ်ပြီး အခြေခံအားဖြင့် .NET SDK မှာပါဝင်တဲ့ Feature အကုန်လုံးကို ခေါ်တဲ့နာမည်ပါ။ ASP.NET ဆိုတာကတော့ အက်သည့် Feature တွေထဲကမှ Web Developemnt framework ကိုခေါ်တာပါ။ ဘာတွေပါဝင်လဲဆိုတော့ အခု version 8 မှာဆိုရင် MVC, Razor Page, Blazor Server, Blazor Web Assembly, Web API, Signal R, Minimal API စတဲ့ feature တွေပါဝင်ပါတယ်။ .NET မှာ Web development နဲ့မဆိုင်တဲ့ WPF, MAUI, GRPC လို feature တွေ အများကြီးပါပါတယ်။ အသေးစိတ်ကိုတော့ [.NET Official Documentation](https://learn.microsoft.com/en-us/dotnet/) တွေမှာ သွားရောက်လေ့လာနိုင်ပါတယ်။ ဒါက .NET Eco system အကြောင်းရှင်းပြထားတာဖြစ်ပါတယ်။ ဒီလောက် နားလည်ထားရင် ရပါပြီ။

**Environment setup**

ဒီ Series မှာ ASP.NET Core ကိုလေ့လာဖို့အတွက် မိမိရဲ့စက်မှာ .NET Environment setup ရှိဖို့လိုပါတယ်။ ကျနော်ကတော့ Visual Studio 2022 ကို အဓိက အသုံးပြုပြီး code တွေရေးသွားမယ်ဆိုပေမဲ့ VS Code နဲ့ ဘယ်လိုရေးမယ်ဆိုတာတွေကိုလဲ ထည့်ပြီးရှင်းပြပေးသွားမှာပါ။ Visual Studio က IDE ဖြစ်လို့ RAM များများရှိဖို့လိုအပ်ပါတယ်။ အနည်းဆုံး 8GB ရှိရပါမယ်။ 16 GB ရှိရင်တော့ အကောင်းဆုံးပေါ့။ Visual Studio 2022 Community ကို [ဒီနေရာ](https://visualstudio.microsoft.com/) မှာအခမဲ့ သွား down လို့ရပါတယ်။ Visual Studio Installer မှာ **ASP.NET and Web Development** ဆိုတဲ့ checkbox တခုတည်းကိုပဲ check လုပ်ပြီး install လုပ်လိုက်တာနဲ့ သက်ဆိုင်ရာ requirement တွေကို အလိုလျောက်ထည့်သွင်းပေးထားတဲ့ Development-ready setup တခုရသွားမှာပါ။ VS Code နဲ့ရေးဖို့အတွက်ကတော့ အရင်ဆုံး .NET SDK ကို [ဒီနေရာ](https://dotnet.microsoft.com/en-us/download) မှာ down ပြီး install လုပ်ပေးပါ။ ပြီးရင်တော့ VS Code ကို [ဒီနေရာ](https://code.visualstudio.com/) မှာ down ပြီး install လုပ်ပါ။ VS Code install လုပ်ပြီးပြီဆို Extension ကနေပြီး [C# Dev Kit](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit) ဆိုတဲ့ Extension ကိုသွင်းလိုက်ပါ။ အက်သည် Extension က .NET Development အတွက် လိုအပ်တာမှန်သမျှ အကုန်သွင်းပေးသွားပါလိမ့်မယ်။ 

![C# Dev Kit](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obwipw1rzs9rqps8s7fw.png)

Environment setup ရပြီဆိုရင်တော့ ထုံးစံအတိုင်း Hello world ရေးကြည့်လိုက်ပါ။
အိုကေပြီဆိုရင်တော့ နောက်တပိုင်းမှာ C# နဲ့ API အသေးလေး တခု စပြီးရေးကြည့်ရအောင်ပါ။

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