c#coding standards

55

Upload: aung-phyo-koko

Post on 30-Nov-2015

78 views

Category:

Documents


4 download

DESCRIPTION

Asp.net

TRANSCRIPT

Page 1: C#Coding Standards
Page 2: C#Coding Standards

အားလးဘ မဂၤလာပါခငဗာ…။

ကၽြနေတာတ႔ဒတစေခါကေလလာၾကမာကေတာ C# , ASP.Net Coding Standard အေၾကာငးဘျဖစပါတယ

ဘာေၾကာင ဒစာအပကေရးသားရလဆေတာ Coding ေတြေရးမ Programmer

အသစေတြအတြက စနစတကျဖစေစခငလ႔ပါ။

Professional ေတြကေတာ ဒစာအပက ဖတစရာမလပါဘး။

ဘာျဖစလ႔လဆေတာ သတ႔က ကၽြနေတာထက အေတြ႕အၾကအမားႀကးရတအတြက မလဘးလ႔ထငပါတယ။

C# Language ကေလလာမသတစေယာကဆရငေတာ ဒစာအပကဖတသငတယလ႔ကၽြနေတာထငပါတယ။

ဒါေၾကာငလညး Programming မာ C# Language အတြက Coding Standard

ေတြကေရးထားတာျဖစပါတယ။

တစခေတာရပါတယ။လး၀ Beginner ဆရငေတာ ဒစာအပထမာပါတ Syntax ေတြ..Logic ေတြန႔ စကားလး

ေတြကေတာ နားလညမာမဟတပါဘး။

ဒစာအပအထမာပါတအေၾကာငးအရာေတြကေတာ C# Language ေရးသားတအခါမာ လကနာသငတအ

ခကေလးေတြက စစညးေဖာျပေပးထားပါတယ။

English လဖတရမာအခကအခရသေတြ အတြကေတာ အဆငေျပမယလ႔ေမၽာလငပါတယ။ဒါေၾကာင ဘာသာ

ျပနသငတာျပန….တစခ႕အရာေတြက ကယေတြ႕အေတြ႕အၾကေလးေတြကလညးထညေပးထားပါတယ။

စာအေရးအသား အမားမားပါ၀ငခရငလညး စတမရပါန႔လ႔ေတာငးဆခငပါတယ။

ကၽြနေတာသညလညး ေလလာေနဆလသားတစေယာကျဖစတာေၾကာင အမားန႔မကငးပါဘးခငဗာ…။

တစခ စာသားမားသညလညး မညသ ကမ ရညရြယၿခငးမဟတေသာေၾကာင တကဆငခပါက

မရညရြယပါေၾကာငး အသေပးပါတယခငဗာ..။

ဒါဆရင ကၽြနေတာတ႔ ဘာေၾကာင Coding Standard ကလကနာရသလဆတာက

ေလလာၾကညလကရေအာင။

Page 3: C#Coding Standards

CC## CCooddiinngg SSttaannddaarrdd

လတငး Coding ေရးနငတယ။ Coding ေရးတအေတြ႕အၾကနနရတာန႔ Coding ေရးနငၾကပါတယ။

ဒါေပမအခ ႕လေတြက ေရးေကာငးတငးေရးေနၾကတယ။Coding ေတြအမားႀကးေရးေန႐န႔လညး ကၽြမးကင

တ Programmer မျဖစေသးပါဘး။ဘယေလာကဘ Logic ေကာငးေကာငး ဘယေလာကဘတထြငနငစြမးရ

ရ ဘယေလာကဘ Software ေတြအမားႀကးေရးခပါေစ…နညးလမးမမနတ Coding ေရးနညးန႔သာဆရငသ

ေရးထားတ App က အဆငအတနးမတ App တစချဖစမာမဟတပါဘး။

တစခ႕ဆရင Program ေတြကေတာေရးနငပါတယ။ဒါေပမသတ႔ေရးထားတ Programming Code ေတြက

သြားၾကညလကရငေတာ အရငေခတ Visual Basic န႔မျခား Button က Double Click ေခါကၿပးေတာ အဒ

အထမာဘ ကယလပခငတအလပေတြက သမးကးၿပးလပေဆာငေနၾကတာကလညးေတြ႕ရပါတယ။

Tier ေတြအေၾကာငးလစနစတကမသ…OOP Rules ေတြကလညးမသ...Layer ေတြခြေရးရမနးလညး

မသ…ကယကေစတနာန႔သြားေျပာျပနလညး မေကာငးထငခရျပနေရာ…။

ဒါေၾကာင နငငတကာက အနညးန႔အမား ေတာရငေဘာငတနးနငေအာင ကၽြနေတာတ႔ျမနမာလမးေတြလညး

စနစတကေလလာသငတယလ႔ျမငပါတယ။

ဒါဆရင အဆငအတနးမတ App ျဖစခငတယဆရငေတာ မနကနတ Coding ေရးနညးကကငသးရမာျဖစပါ

တယ။

ဒါဆရငေမးစရာရလာပါၿပ။ကၽြနေတာက…”မငးကေကာ လကနာလ႔လား” ဆၿပးေတာေမးစရာရလာပါၿပ။

ဟတပါတယ။ကၽြနေတာလညး အရငတနးက Coding Standard အေၾကာငးမသေသးတအတြကေၾကာင

မလကနာဘန႔ေရးခတာေတြအမားႀကးပါ။ဒါေပမ အမားဆတအရာက ျပငရမယဆတ အသန႔ Coding

Standard အေၾကာငးကေလလာၿပးတအခါမာေတာ Coding Standard ကလကနာၿပးေတာ

ေရးသားေနပါတယ။

Page 4: C#Coding Standards

ဒါေၾကာင စေလလာ ကတညးက စနစတက ေလလာခရင အေကာငးဆးလ႔ယဆတအတြကေၾကာင ဒစာအပ

ေလးကေရးသားျပစထားတာျဖစပါတယ။

ဒါဆရငမနကနတ Coding ေရးနညးဆတာဘာလ။မနကနတ Coding ေရးနညးဆတာကေတာ Coding

ေရးေနတလတငးကလကေမးရငေတာ အေျဖကတစမးန႔တစမးမတေအာင ထြကလာမာျဖစပါတယ။

မနကနတ Coding ေရးနညးဆတာကေတာ Coding ေရးတအခါမ စနစတကန႔ ခမတထားတ Rules ေတြက

လကနာၿပးေတာေရးသားျခငးကဆလပါတယ။

နငငတကာ Programmer ေတြ…Programming Language ေတြကတထြငသေတြက သတ႔ Language က

သးၿပးေတာေရးမယဆရင ဒအခကေလးေတြကလကနာသငတယဆၿပးေတာ Coding Standard အခ႕ကျပ

ဠာနးထားတာျဖစပါတယ။

မနမနကနကနန႔စနစတကေရးခငတယဆရင Tutorials ေလးေတြေသခာေလလာလကရင

အဆငေျပပါတယ။

ကၽြနေတာ ဒစာအပန႔မလေလာကေသးဘးထငရငလညး ဆကေလလာလ႔ရပါတယ။

ကၽြနေတာကေတာ အတတနငဆးေတာ အျပညအစျဖစေအာငေရးထားပါတယ။

ဒါဆရငဘယလေရးမလ။

ဘယလေရးမလဆတာက မေလလာခင Good Code (Coding Standard) ေတြရသေဘာသဘာ၀က

ေအာကေဖာျပပါအတငးခြထတၾကညလကရေအာင။

၁.ယၾကညစတခရျခငး

၂.ျပျပငထနးသမးဖ႔လြယကျခငး

၃.ကၽြမးကငျခငး

ဆသကသ႔ ေယဘယသးမးခြလကပါတယ။

Page 5: C#Coding Standards

Programmer ေတာေတာမားမားကေတာသတ႔ရ App ေတြက Performance ေကာငးဖ႔ေလာကသာအေလးေ

ပးေရးသားေနၾကပါတယ။

အဓက ကသတ႔ေရးေနတ App ကလာအပထားတသရ ေျပာတပစအတငးသာလပေဆာငေနၾကပါတယ။

Standard Coding ေရးနညးကေမထားၿပးေတာ ေရးေနၾကပါတယ။

ေျပာလကရငလညး ….ဘာျဖစလကြာ…အဓက App အလပလပရငၿပးတာဘမဟတလားဆၿပးေတာျပနျပန

ေျဖေနၾကတာကေတြ႕ရပါတယ။

ဒါေၾကာင သတ႔ေရးတအခါမာ

၁.Performance ေကာငးေစရနအတြက

၂.အလပအပတသရ သေဘာတညခကအတြက

၃.ယၾကညစတခဖ႔အတြက

၄.ျပျပငထနးသမးဖ႔အတြက

ဆၿပးေတာ အဆငေလးဆငအတငးေရးေနၾကပါတယ။

ROI (Return On Investment) အရ ကေတာ နပါတက ၃,၄,၁,၂ ျဖစပါတယ။

၁.ယၾကညစတခဖ႔အတြက

၂.ျပျပငထနးသမးဖ႔အတြက

၃.Performance ေကာငးေစရနအတြက

၄.အလပအပတသရ သေဘာတညခကအတြက

Page 6: C#Coding Standards

ဆၿပးေတာျဖစသငပါတယ။တကယလ႔ Programmer ေတြရ Coding ေရးထားတပစက

အဒလမဟတဘးဆရငေတာ ေနာငအခနမာ ျပနလညျပျပငတာတ႔…Maintain လပတာတ႔…

စတာေတြျဖစလာတအခါမာ အခနမားစြာကကနေစၿပးေတာ အကးမရျဖစမာေသခာပါတယ။

တစေနရာရာက ျပျပငခငလ႔ဘျဖစေစ…Update လပခငလ႔ဘျဖစေစ…Coding Standard မဟတတအတြက

ေၾကာင ကယျပငခငတေနရာက လကရာေနရတအတြကေၾကာင အခနမားစြာကကနေစသလ အမားမားက

လညးေတြ႕ၾကေစမာျဖစပါတယ။

ဒါေၾကာင Standard မျဖစဘန႔ Coding ေရးျခငးကသငရ ဘ၀အတြကမေကာငးတအခကျဖစတအတြက

ေၾကာင ကယေရးတ Code ေတြက Standard မျဖစဘးဆရငေတာ ျပျပငေျပာငးလသငပါတယလ႔ကၽြနေတာ

အႀကျပပါတယ။

ဒါဆရငကၽြနေတာတ႔ ေရးတ Coding ေတြအတြက ဘယလ Standard ျဖစေအာငလပၾကမလဆတာက စၿပး

ေတာေလလာၾကညလကရေအာင။

CCooddiinngg SSttaannddaarrdd && BBeesstt PPrraaccttiicceess ?? ?? ?? ???? ?? ?? ???? ?? ?? ??

စနစကၿပးယၾကညအားထားရတ Application ေတြက Develop လပခငတယဆရငေတာ Coding

Standards န႔ Best Practices ေတြကလကနာရမာျဖစပါတယ။

ဒစာအပထမာေဖာျပထားတ Coding Standard န႔ Best Practices ေတြကေတာ ကၽြနေတာရ အေတြ႕အၾက

တစခထန႔ေရးထားတာမဟတဘန႔…. Microsoft ကခမတထားတ Guideline ေတြ …တျခား Developer

ေတြကသတ႔ရအေတြ႕အၾကေတြ...စတာေတြကေပါငးစပေရးသားထားျခငးျဖစပါတယ။

Programming ေလာကမာ ခမတထားတ စညးကမးေတြကေတာ အမားႀကးပါဘ…သတ႔ခမတထားတစညး

ကမးေတြကလကနာခငလညးရပါတယ…

မလကနာခငလညးရပါတယ..ဒါကေတာကယသေဘာပါဘခငဗာ…တကယလ႔လကနာခငတယဆရငေတာ

ကယကယတငစာေတြဖတ..ၿပးရငေတာ အမားဆးလကနာထားတ စညးကမးေတြကလကနာမယဆရငေတာ

အေကာငးဆးျဖစပါတယ…။

Page 7: C#Coding Standards

စညးကမး A ကလဆယေယာကလကနာတယ။

စညးကမး B ကလ ၅ ေယာကလကနာတယဆရငေတာ ကၽြနေတာအႀကေပးခငတာကေတာ လအမားစ

လကနာတ A ကလကနာရငအေကာငးဆးျဖစမယလ႔အႀကေပးခငပါတယ။

ဒါဆရင ကၽြနေတာတ႔ လကနာရမ အခကေလးေတြက ေလလာၾကညလကရေအာငဗာ။

NNaammiinngg CCoonnvveennttiioonnss && SSttaannddaarrddss

ကၽြနေတာတ႔အခေလလာမအပငးက ႏစပငးခြၿပးေတာေလလာလ႔ရပါတယ။

အဒါေတြကေတာ

1.Pascal Casing

2.Camel Casing

ဆၿပးေတာေလလာရမာျဖစပါတယ။ဒါဆရငအဒအပငးႏစပငးေတြကဘာေတြလ။

ဘာေတြလဆေတာ

Pascal Casing ကလကနာၿပးေတာေရးမယဆရင

စာလးေတြရ ပထမဦးဆး စာလးက Upper Case န႔ေရးၿပးေတာ ကနတာအားလးက Lower Case န႔ေရးရမာ

ျဖစပါတယ။

Page 8: C#Coding Standards

Camel Casing ကလကနာၿပးေတာေရးမယဆရင

စာလးေတြရပထမဦးဆး စာလးက Lower Case န႔ေရးၿပးေတာ ကနတစာလးေတြရပထမစာလးက Upper

Case န႔ေရးရမာျဖစပါတယ။

ပၿပးေတာနားလညေအာငေျပာရမယဆရင ဥပမာေလးန႔ေလလာၾကညလကရေအာင။

PPaassccaall CCaassiinngg

Eg. BackColor , ForeColor , GridView , TextBox , SqlDataSource

စသျဖငေရးရမာျဖစပါတယ။

CCaammeell CCaassiinngg

Eg. backColor , foreColor , gridView , textBox , sqlDataSource

စသျဖငေရးရမာျဖစပါတယ။

ဒါဆရင အဒႏစခက ဘယေနရာမာဘယဟာကသးမလ…။

Page 9: C#Coding Standards

ဘယေနရာမာဘယဟာကသးမလဆရင Class Name ေတြ Method Name ေတြကေရးတအခါမာဆရင

Pascal Casing ကသးသငပါတယ။

Variable , Method Parameter ေတြကေရးတအခါမာေတာ Camel Casing ကသးၿပးေတာေရးသငပါတယ။

ပၿပးေတာရငးသြားေအာင ဥပမာေလးန႔ၾကညလကရေအာင။

Public class PascalClass

{

//

{

အဒါကေတာ Pascal Casing ကသးၿပးေတာေရးထားတ Class Name ဘျဖစပါတယ။

ေနာကတစခကေတာ Pascal Casing ကသးၿပးေတာ ေရးထားတ Method Name ဘျဖစပါတယ။

Private void PascalMethod()

{

//

}

ေနာကတစခကေတာ Camel Casing ကသးၿပးေတာ Variable ေၾကညာတာေလးကတစခကေလာကေလ

လာၾကညလကရေအာင။

Page 10: C#Coding Standards

Private void PascalMethod(string name)

{

string name;

int salary;

string address; // ဒါကတော Camel Casing ကသးပြးတောကြေညာထားတာပါ။

}

ဆၿပးေတာေၾကညာသငပါတယ။အဒလေၾကညာမအမနျဖစပါတယ။ေအာကကအတငးဆရငေတာ Coding

Standard မျဖစပါဘး။

Private void PascalMethod()

{

String nam;

String add;

Int sal;

}

Page 11: C#Coding Standards

တစခ႕ကေတာ အချပထားတအတငးေၾကညာၾကပါတယ။အဒလေၾကညာရငမားပါတယ။တစခ႕ကေတာ

အမားႀကးေရးရမာပငးလ႔တယ။မပငးပါန႔လ႔အႀကေပးခငပါတယ။ဒါမသာ မမေရးသားတ Code ေတြက စမ

ေနမာျဖစပါတယ။

ဒါေၾကာင Variables ေတြကေၾကညာမယဆရငေတာ အဓပၸာယျပည၀တ စာလးမားကသးၿပးေတာေၾကညာရ

မာျဖစပါတယ…။

အတေကာကစာလးသးျခငးကေရာငၾကဥသငပါတယ။

.Net Interface အတြကကလညး Camel Casing ကသးၿပးေတာ ေၾကညာပါ..။(eg. IEntity)

အရငအေစာပငးကာလ ေတြတနးက Programmer ေတြကသတ႔ရ Member Variables ေတြအတြက အေရ႕

ဆးစာလးမာဒလေလးေၾကညာခၾကပါတယ။

string m_sName;

int nAge;

အဒလေၾကညာျခငးက တျခား Programming Languages ေတြမာေတာ မနခငမနပါလမမယ…။

.Net Programming Language ေတြအတြကေတာ မမနဘးလ႔ေျပာလ႔ရပါတယ။

Member Variables ေတြကကယစားျပလ႔ m_ ကသးတာသည .Net Coding Standard န႔မညတအတြက

ေၾကာင ထသ႔ေၾကညာျခငးကေရာငသငပါတယ။

ဒါေၾကာင C#.Net မာ Variables ေတြကေၾကညာေတာမယဆရငေတာ Camel Casing ကလကနာၿပးေတာ

ေၾကညာျခငးကသာလၽင Coding Standard ကလကနာျခငးျဖစပါတယ။

Local variables ေတြကေၾကညာရငလညး Underscore ထညၿပးေတာမေၾကညာသငပါဘး။

ေနာကတစခကေတာ Variable ေၾကညာတအခါမာ စာလး ၁ လးထမေၾကညာသငပါဘး။ဘယလလဆေတာ

Page 12: C#Coding Standards

int i;

int y;

int z;

စသျဖင…မေၾကညာသငပါဘး…။ဒါေပမ ႁခြငးခကတစခေတာရပါတယ။

အဒါကေတာ .Net ရ for looping ပါဘ…။

For looping ေရးတအခါမာ ကၽြနေတာတ႔ေတြ int i ဆၿပးေတာေၾကညာေလရပါတယ။ဒလေလးပါ။

For (int i , i <= 10 ; I ++)

ဆၿပးေတာေၾကညာေလရပါတယ။အဒါမနပါတယ။

စာလးတစလးထေၾကညာတာက Camel Casing အရ for looping ထမာဘေၾကညာရပါမယ။

Variables ေၾကညာတအခါမးမာလညး ဆငတေလးေတြမေၾကညာသငပါဘး။

ေနာကတစခကကဘာလဆေတာ Local Variable က .Net မာပါတ Keyword ေတြန႔ဆငတ

မေၾကညာသငပါဘး။

Boolean variables , Properties , method ေတြကေၾကညာမယဆရင is keyword ေလးခၿပးေတာ

ေအာကကအတငးေၾကညာသငပါတယ။

Private boolean _IsFinished

Page 13: C#Coding Standards

ေနာကတစခကေတာ File Name ေပးတအခါမာဘယလေပးမလဆတာက ေလလာၾကမာျဖစပါတယ။

GGiivvee FFiillee NNaammee wwiitthh SSttaannddaarrdd

Coding Standard အရဖငနာမညေပးတအခါမာလညး မမေရးသားမ Class Name န႔တညေအာငေပးရမာျဖစ

ပါတယ။

ဥပမာအေနန႔ေျပာရမယဆရငေတာ Class Name က HelloWorld ဆရင File Name က HelloWorld ဆၿပး

ေတာေပးရမာျဖစပါတယ။

သ႔ကနာမညေပးေတာမယဆရငေတာ Pascal Casing ကသးၿပးေတာေပးရမာျဖစပါတယ။

TTaabb aanndd SSppaacciinngg wwiitthh SSttaannddaarrdd

အရငတနးကဆရင Text Indent ေတြျခားခငတယဆရငေတာ တစခါတေလ Space ေတြပတၿပးေတာျခားခ

ၾကပါတယ။

အဒလလပတာက Coding Standard မဟတပါဘး။

Text Indent လပခငတယဆရငေတာ တစခေသာနညးလမးက Tab လပျခငးသာျဖစပါတယ။

Space ကလး၀မသးသငပါဘး…။Visual Studio က Tab တစခကက Space 4 န႔ သတမတထားပါတယ။

ဒါကလညးသပေတာ စတပစရာမလပါဘး…ဘာျဖစလ႔လဆေတာ ကၽြနေတာတ႔သးေနတ Visual Studio IDE

ကအလအေလာက ျပငေပးတအတြကေၾကာင အဆငေျပပါတယ။

ကြနေတာေၿပာခငတသေဘာက ေဘးမဥးကေန ၿခားမယဆရင Tab န ဘၿခားသငတယ

လ ဆလတာၿဖစပါတယ။Space 4 ခကပတၿပး ၿခားၿခငးက ေရာငရမာၿဖစပါတယ။

Page 14: C#Coding Standards

CCoommmmeenntt wwiitthh SSttaannddaarrdd

အခေလလာမ အေၾကာငးကေတာ Comment လပတအခါမာလကနာရမစညးကမးေတြျဖစပါတယ။

အရငတနးကလညး Comment ေတြပတခငတယဆရင လညးၾကရငၾကသလပတခၾကပါတယ။

အခေတာ စနစတကပတတာကေလလာၾကမာျဖစပါတယ။ဒါဆရငဘယလပတမလ။

အရငတနးက ဒလပတခဘးႏငပါတယ။

//Declared Variables string name; int age; int phone;

အဒမာတစခသတထားမသလားေတာမသဘး…။ဘာလဆေတာ Declared Variables ဆတ Comment ပတ

ထားတစာသားေလးက ေအာကကေၾကညာထားတ Variables ေတြရ အေရ႕ကေရာကေနတာပါ။

အဒလေၾကညာထားရငေတာ Coding Standard ကမလကနာထားဘးလ႔ဆရမာျဖစပါတယ။

ဒါဆရငဘယလေရးမလ။ဘယလေရးမလဆေတာ

ကယပတမ Comment က ကယေရးထားတ Code န႔ Same Level ျဖစရမာျဖစပါတယ။ဘယလလဆေတာ

အေပၚကအတငး ဥပမာေပးမယဆရင

//Declared Variables string name; int age; int phone;

Page 15: C#Coding Standards

အဒလျဖစရမာျဖစပါတယ။အဒလေရးမမနမာျဖစပါတယ။ဒါဆရငပၿပးေတာရငးသြားေအာင Code မားမားန႔ေလလာၾကညလကရေအာင…။ //Comment Testing String name = "Hello"; DateTime currentTime = DateTime.Now; string fullMessage = "Hello " + name + " This Time is "+ currentTime.ToString(); Console.WriteLine(fullMessage); အဒလေရးရငေတာ သတမတထားတ စကလကနာတာျဖစပါတယ။ဒါေၾကာင အကဥးခပေျပာရမယဆရငေတာ Comment ပတခငတယဆရငေတာ Code န႔ Same Level ျဖစရငရပါတယ။ ေနာကတစခေလလာၾကမာကေတာ တြန႔ကြငးေလးေတြက Coding Standard န႔ကကညေအာင ဘယလေရးမလဆတာကေလလာၾကမာျဖစပါတယ။

CCuurrllyy bbrraacceess wwiitthh SSttaannddaarrdd

ကၽြနေတာတ႔အခေလလာၾကမာကေတာ Curly braces လ႔ေခၚတ တြန႔ကြငးေလးေတြက စမေအာငဘယလေရးသားအသးျပၾကမလဆတာဘျဖစပါတယ။ ဒအေၾကာငးကေတာ သပအမားႀကးေျပာစရာမလဘးထငပါတယ။ ေတာေတာမားမား ေရးသားတပစက စမတပစျဖစေနလ႔ပါ။ ဘယလလဆေတာ ကၽြနေတာတ႔ Class ေတြ Method ေတြေရးသားခတအခါမာဒလေလးေရးသားခပါတယ။

Page 16: C#Coding Standards

Private void PascalMethod(string name) { // Code } အဒလေရးသားရငမနပါတယ။ကၽြနေတာတ႔အသးျပေနတ Visual Studio IDE ကလညး Auto ခနညႇေပးပါတယ။ အဒလေရးသားရငေတာမနပါတယ။ေအာကကပစအတငးေရးသားရငေတာ မားပါတယ။

Private void PascalMethod(string name){

// Code

}

အဒလေရးသားရငေတာမားပါတယ။ေနာကတစခေျပာခငတာကေတာ တြန႔ကြငးေလးေတြက Line ေတြန႔ တစ

ေၾကာငးထမေရးရပါဘး။ဘယလလညးဆေတာ

if(….){ // Code }

အဒလေရးရငမားပါတယ။ဒါေၾကာင တြန႔ကြငးေလးေတြကေရးမယဆရင စာေၾကာငးေနာကတစေၾကာငးဆငး

ၿပးေတာေရးရငအေကာငးဆးျဖစပါတယ။ဒလေလးေရးပါ။

Page 17: C#Coding Standards

if(…)

{

// Code

}

အဒလေလးေရးရငမနပါတယ။ if န႔ for အတြကကလညး Curly braces ကတစေၾကာငးထမထားသငဘန႔

တစေၾကာငးဆငးၿပးေတာမထားသငပါတယ။

SSppaacciinngg uussiinngg SSttaannddaarrdd

ေနာကတစခကေတာ Operator ေလးေတြကေၾကညာၿပးသြားရင Space ျခားတာေလးပါ။

Operator ေတြက မေရးခငန႔….ေရးၿပးအခနေတြမာ Space တစခက ျခားရမာျဖစပါတယ။

ဒါကလညး IDE က Support ေပးထားတအတြကေၾကာငအဆငေျပပါတယ။

ဘယလလညးဆေတာ ဥပမာအေနန႔ေျပာရရင ကၽြနေတာတ႔ if condition စစတအခါမာဒလေလးေရးၾကပါ

တယ။

if(Result==0)

{

for(int i=1;i<=10;i++)

{

// Code

Page 18: C#Coding Standards

}

}

ဆၿပးေတာေရးၾကပါတယ။အဒလေရးသားထားရငေတာမားပါတယ။ဘာျဖစလ႔လဆေတာ Operator ေတြေရး

ၿပးရင Single Space ျခားမသာလင Coding Standard ျဖစမာျဖစပါတယ။

if ( Result == 0 )

{

for ( int i = 1 ; i <= 10 ; I++ )

{

//Code

}

}

အဒလေရးသားရငေတာမနပါတယ။ေနာကထပေလလာမာကေတာ Group ဖြ႕ထားတ Code ေတြက ရငးလငး

သြားေစရန Blank Line ျပလပခကကေလလာၾကမာျဖစပါတယ။

Page 19: C#Coding Standards

BBllaannkk LLiinnee SSeeppaarraattee uussiinngg SSttaannddaarrdd

ျမနမာလေျပာရရငေတာ Code ေလးေတြက Group ေလးေတြဖြ႕ၿပးေတာ သတသတစျဖစေအာင တစလငး

ဆငးတအေၾကာငးအရာျဖစပါတယ။ဥပမာေလးန႔ၾကညလကရေအာင။

String name = "Hello"; DateTime currentTime = DateTime.Now; string fullMessage = "Hello " + name + " This time is "+ currentTime.ToString(); Console.WriteLine(fullMessage); Console.ReadLine(); ပထမ Group ကေတာ Variables ေၾကညာတ Group ျဖစတအတြကေၾကာင သပသပတစခထားပါတယ။ ၿပးေတာ တစလငးဆငးၿပးေတာမ fullMessage ကတစေၾကာငးထားတအတြကေၾကာင Group တစခလ႔မတယရမာျဖစပါတယ။ တစလငးထပဆငးတအတြကေၾကာင Console Class Group ျဖစပါတယ။ Console ေတြဘေရးထားတအတြကေၾကာင Console Group ကေခၚနငပါတယ။ အဒလမး Coding ေတြက သတသတမတမတ Group ခြထားတအတြကေၾကာင အမားျဖစတအခါမာလညး ျပငဆငရင ျမနျမနဆနဆန အမားရာေတြ႕မာျဖစပါတယ။ ဒါဆရင အမားဆရငေကာဘယလလ။အမားေရးထားတ Code Group ကေတာ

Page 20: C#Coding Standards

String name = "Hello"; DateTime currentTime = DateTime.Now; string fullMessage = "Hello " + name + " This Time is "+ currentTime.ToString(); Console.WriteLine(fullMessage); Console.ReadLine(); အဒလမးဘျဖစပါတယ။အားလးက တစေၾကာငးစဘျခားရမာျဖစပါတယ။

”ငါက ပရငးေအာငလ႔ ႏစေၾကာငး ျခားတယကြ…. “ ဆတာမးဆရငေတာ Coding Standard ကလကနာ

ျခငးမဟတတအတြကေၾကာငေရာငၾကဥသငပါတယ။Single Blank Line သာျခားရမာျဖစပါတယ။

ဒါဆရငကၽြနေတာတ႔ေနာကတစခေလလာၾကမာကေတာ Code ေတြက တစစတစစညး ထန႔ Group ဖြ႕တ

အခါမာသးတ Code ေလးေတြအေၾကာငးဘျဖစပါတယ။

##rreeggiioonn && ##eennddrreeggiioonn uussiinngg SSttaannddaarrdd

Code ေတြကအဆကအစပရတ Group ဖြ႕ထားခငရငေတာ #region န႔ #endregion ကသးၿပးေတာမ

ဖြ႕

သငပါတယ။အဒလဖြ႕ျခငးက မမစတႀကကနာမညေပးလ႔ရသလ စမတ ေရးသားျခငးလညးျဖစပါတယ။ဒလ

ေလးဖြ႕လ႔ရပါတယ။

namespace Console1 { #region RegionTest class Region { public static void Main() {

Page 21: C#Coding Standards

Console.WriteLine("Hello Buddy "); } } #endregion } အဒလေရးသားျခငးေၾကာင မမ၏ Code ေတြကတစစတစညးထန႔ ရငးရငးလငးလငးျဖစေနၿပး စမတေရးသား ခကျဖစမာျဖစပါတယ။အေပၚက Code ေလးက လညး .Net ရ Collapsed လပတအခါမာလညး RegionTest ဆၿပးေတာ မမေပးထားတနာမညအတငးျမငရမာျဖစပါတယ။ ေအာကကပေလးကၾကညလကရငရငးသြားမာပါ။

ေနာကတစခကေတာ Field ေတြ Method ေတြ Property ေတြကေၾကညာတအခါမာဘယလ Standard ျဖစ ေအာငေၾကညာရမလဆတာကေလလာၾကမာျဖစပါတယ။

Page 22: C#Coding Standards

DDeeccllaarreedd AAcccceessss MMooddiiffiieerrss wwiitthh SSttaannddaarrdd

ဘယလေၾကညာရမလဆတာက ေအာကကအဆငအတငးလပေဆာငေၾကညာသငပါတယ။

1.Private Member Variables

2.Private Properties

3.Private Methods

4.Constructors

5.Public Properties

6.Public Methods

အထကပါေဖာျပထားတအတငးသာ အစအစဥတကေၾကညာသငပါတယ။

သကဘာန႔သြားတသလဆေတာ OOP ရ Rules ေတြန႔သြားတပါတယ။

OOP ရ Rules အရ Private AM ကအသားေပးထားပါတယ။ၿပးမသာ Public AM ကေရးပါတယ။

ထ႔အတဘ Coding Standard မာလညးအတတပငျဖစပါတယ။ဒါဆရငကၽြနေတာတ႔ေနာကထပေလလာမ

အပငးကေတာ UI (User Interface) ေတြကနာမည ေပးတအခါမာ Standard ျဖစေအာငဘယလေပးၾက

မလဆတာဘျဖစပါတယ။အရငတနးက ၾကရငၾကသလေပးခအမားမးေတြရခရင အချပငဆငရမအခန

ေရာကလာၿပျဖစတအတြကေၾကာငကၽြနေတာတ႔ေလလာၾကညလကရေအာင။

Page 23: C#Coding Standards

GGiivvee UUII NNaammee wwiitthh SSttaannddaarrdd

UI Name ေတြကဘယလေပးမလ…။ဘယလေပးမလဆေတာ ကယေပးခငတ UI Element ေတြန႔

သငေလာတ နာမညေလးေတြကေပးရမာျဖစပါတယ။ထကသ႔ေပးျခငးအားျဖင ဘာေကာငးက းေတြရသလဆ

ေတာ ကယေၾကညာထားတ(သ႔) နာမညေပးထားတ Variables အားလးကလြယလြယကက Identify လပနင

မာျဖစပါတယ။

နာမညေပးလ႔ရတ နညးလမးႏစခရပါတယ။

၁. UI Element ေတြအတြက ပထမစာလးက (ui_ ) န႔စသငပါတယ။အဒလျပလပျခငးကဘာေကာငးသလ

ဆေတာ UI Elements ေတြကစနစတက Group ဖြ႕ထားနငပါတယ။ၿပးေတာ အဒ Group ဖြ႕ထားတ UI က

Access လပျခငးလြယကသြားေစပါတယ။

၂. UI Element ေတြအတြကကယသးမ UI Element ေတြရႀကတငသတမတထားတ Prefix ေတြကသးၿပး

ေတာလညးနာမညေပးနငပါတယ။ေအာကမာေဖာျပထားတ Table ေလးထမာသကဆငရာ Prefix ေလးေတြ

ကေဖာျပေပးထားပါတယ။

CCoonnttrrooll PPrreeffiixx

LLaabbeell llbbll

TTeexxttBBooxx ttxxtt

Page 24: C#Coding Standards

အေပၚမာျပထားတအတငး ID တ႔ Name တ႔ေပးရငေတာ Coding Standard ကလကနာထားတအတြက

ေၾကာင စမတ Naming တစချဖစလာမာျဖစပါတယ။

DDaattaaGGrriidd ddttgg

BBuuttttoonn bbttnn

IImmaaggeeBBuuttttoonn iimmbb

HHyyppeerrlliinnkk hhllkk

DDrrooppDDoowwnnLLiisstt ddddll

LLiissttBBooxx llsstt

DDaattaaLLiisstt ddttll

RReeppeeaatteerr rreepp

CChheecckkbbooxx cchhkk

CChheecckkBBooxxLLiisstt ccbbll

RRaaddiiooBBuuttttoonn rrddoo

RRaaddiiooBBuuttttoonnLLiisstt rrbbll

IImmaaggee iimmgg

PPaanneell ppnnll

PPllaacceeHHoollddeerr pphhdd

TTaabbllee ttbbll

VVaalliiddaattoorrss vvaall

Page 25: C#Coding Standards

ဒါဆရငကၽြနေတာတ႔ေနာကထပေလလာမယအပငးကေတာ Program မားကေရးသားရာမာ ကငသးသငတ

အခကအလကမားကဆကလကေလလာရမာျဖစပါတယ။

GGoooodd PPrrooggrraammmmiinngg PPrraaccttiicceess

Good Programming Practices ဆတာကေတာ Program တစပဒေရးသားတအခါမာဘယလေရးသင

တယ…ဘယလေနရာထားသငတယ…စသညျဖငအမ းမး

ေလလာၾကမအပငးျဖစပါတယ။

1. Method ထမာ Code ေတြအမားႀကးေရးသားျခငးကေရာငၾကဥပါ။

Method တစခထမာ Coding Line အေရအတြကက 1~25 အထဘရသငပါတယ။လငးအေရအတြကက

ဆလတာပါ။စာလးအေရအတြကမဟတပါဘး။

အကယ၍ မျဖစမေန Method ထမာလငးအေရအတြက 25 ထကပေတာမယဆရငေတာ ပေတာမယ လငးက

ေနာကထပ Method တစခခြေရးလကပါ။ဥပမာအေနန႔ေျပာရရငေတာ

Private static void Main()

{

//Output အပါအ၀င 25 ေၾကာငးေရးၿပး…သ႔ေပမ တစေၾကာငးေရးရနကနေန

Output(name);

}

Page 26: C#Coding Standards

Private static void Output(string name)

{

Console.WriteLine(name);

}

ထကသ႔ေရးရမာျဖစပါတယ။အေပၚက Method မာ ၂၅ ေၾကာငးျပညသြားတအတြကေၾကာင Output ထတ

ခငတအတြကေၾကာင ထပမေရးေတာဘ ေနာကထပ Method တစခကေရးလကၿပး Output ထတလကျခငး

ျဖစပါတယ။အလပရပတယလ႔ေတာမျမငေစခငပါဘး။

2.Method Name ေပးေတာမယဆရင ကယေပးမ Method ကဘာလပသလဆတာက

အရငၾကညၿပးမေပးပါ။

ဥပမာအေနန႔ေျပာရရင ကယရ Method ထမာေရးထားတ အေၾကာငးအရာက Phone Number က Save တ

အေၾကာငးကေရးထားတယဆရင ကယေပးမ Method Name က သန႔ကကညတ Name ဘျဖစသငပါတယ။

SavePhoneNumber ဆၿပးေတာဘျဖစသငပါတယ။ပရငးသြားေအာင ဥပမာေလးန႔ၾကညလကရေအာင။

Private void SavePhoneNumber(int number)

{

// SavePhoneNumber Code

}

Page 27: C#Coding Standards

အဒလေရးရငမနပါတယ။Method ထမာရတ Code ေတြက Phone No က Save လပတ Code ေတြဆေတာ

သ႔ရ Method Name က SavePhoneNumber လ႔ေပးလကတအတြကေၾကာင Method Name ကၾကည႐န႔

သ႔အထက အေၾကာငးအရာေတြက ထငထငရားရား သနငပါတယ။

ဒါေၾကာင Method Name က အဆငေျပသလမေပးဘ…စနစတကေပးတတဖ႔လပါတယ။

3. Method တစခထမာ Coding Standard အရ အလပတစခဘလပသငပါတယ။ဘယလလဆေတာ ကယ

ေရးထားတ Method က Phone No Save တအလပကလပတယဆရင Phone No Save တအလပတစခထ

က ဘေရးထားသငပါတယ။

အဒအထမာ Email Send လပတ Code ေတြကမေရးထားသငပါဘး။

Email Send လပတအလပ ေတာငမဟတပါဘး…။

အလပေသးေသးေလးဆရငေတာင မလပသငပါဘး…။

ပရငးသြားေအာင ဥပမာေလးန႔ၾကညလကရေအာင။

string phonenumber;

string email;

SavePhoneNo(phonenumber);

SendEmail(email);

Private void SavePhoneNo(string no)

Page 28: C#Coding Standards

{

// Code that save PhoneNumber

}

Private void SendEmail(string mail)

{

// Code that send Email

}

အဒလေရးထားရင စ ကလကနာထားပါတယ။

ဘာျဖစလလဆေတာ Method တစခက အလပတစခဘလပတအတြကေၾကာင ျဖစပါတယ။

ဒါဆရင အမားေလးကဆကၾကညလကရေအာင။

String phonenumber;

String email;

SaveNo(phonenumber,email);

Private void SaveNo(string no,string mail)

{

// Code that save PhoneNumber and Send Email

Page 29: C#Coding Standards

two functions in one method (that’s wrong)

}

အလပႏစခက Method တစခထမာေပါငးလပထားတအတြကေၾကာင ထသ႔ျပလပျခငးက Coding Standard

ကမလကနာတအတြကေၾကာင စမတေရးသားနညးလ႔မဆနငပါဘး။

ဒါဆရင ကြနေတာတ ဆကေလလာၾကမာကေတာ Data Type ေတြကေၾကညာရင

ဘယလစနစတကေၾကညာသငသလဆတာက ဆကေလလာၾကမာၿဖစပါတယ။

ကြနေတာတ ေလလာၾကညလကရေအာင…။

DDeeccllaarreedd DDaattaaTTyyppee uussiinngg SSttaannddaarrdd

4.ဒါကလညးအေထြအထးေျပာစရာေတာမလဘးလ႔ထငပါတယ။ဘာျဖစလ႔လဆေတာ Programmer အမား

စေၾကညာေနၾကတ ပစက မားေသာအားျဖငမနလ႔ပါ။ကၽြနေတာတ႔ Data Type ေတြကေၾကညာတအခါမာ ဒ

လေလးေၾကညာၾကပါတယ။

int count;

int age;

string name;

object mytype;

Page 30: C#Coding Standards

ဆၿပးေတာေၾကညာခၾကပါတယ။အဒလေၾကညာခရငေတာ Coding Standard ကလကနာပါတယ။

Int32 , String , Object စသျဖငမေၾကညာသငပါဘး။

5.ေနာကတစခကေတာ မထငမတထားတ တနဖးေတြက အျမသတထားသငပါတယ။ဥပမာအေနန႔ေျပာရ

မယဆရငေတာ တနဖးႏစခလကခတ Parameter ႏစခ ကသးေနပါတယ။

အဒလသးေနတအခါမာ ကယေရးထားတ Code ေတြထက ၀ငလာတ တနဖးႏစခမာ ကယထငထားသလ

တနဖးဘ၀ငေနမယလ႔ေမၽာလငေနပါတယ။ ဘယလလဆေတာ ကယက ပထမ Parameter အတြက ၁ န႔

ဒတယ Parameter အတြက ၂ ဆၿပးေတာ ေမၽာလငထားပါတယ။ေျပာရရင ကယေရးထားတ Code ေတြထ

က မညသည ကနးဂဏနးမဆ၀ငလာလ႔ရပါတယ။

ကယကအဒလထငပါတယ။အဒလထငေနတအခနမာ အသးျပသ User ကမသဘန႔ ကနးမထညဘ စာသား

(Character) ထညလကတအခါမာ ကယေရးထားတာက ကနးအတြကဆေတာ Error ထတကပါတယ။ Error

တကတာက အေၾကာငးေတာမဟတပါဘး။Error တကၿပးေတာ Program ပတသြားတာမးျဖစနငပါတယ။

ဒါဆရင Program ထမာကယလပထားတ အရာေတြက ေပာကသြားနငတအတြက အသးျပသ User က

အဆငမေျပျဖစနငပါတယ။

အထကပါေဖာျပခကေတြေၾကာင သတထားသငပါတယ။Coding Standard အရ အထကေဖာျပခကအတငး

မျဖစေစရနအတြက လကနာရမ အခကေလးေတြကေဖာျပေပးထားပါတယ။

ပၿပးရငးသြားေအာင ကၽြနေတာတ႔ ဥပမာေလးန႔ေလလာၾကညလကရေအာငဗာ…။

Page 31: C#Coding Standards

ေအာကက ဥပမာေလးကေတာ Coding Standard အရလပေဆာငသငတအခကဘျဖစပါတယ။

If ( MemberType == eMemberTypes.Registered )

{

// Code that do something for Registered Users

}

Else if ( MemberType == eMemberTypes.Guest )

{

// Code that do something for Guest Users

}

Else

{

// Error Throw and handling that Error

ဤသ႔ျပလပျခငးေၾကာင ဘာေၾကာင Error တကသလဆတာကအလြယတကသနငသလ

ေနာငတစခနမာ User အသစေတြက ျပလပခအခါမာတကနငတ Error ေတြကလညးအလြယတက

ရာေဖြေတြ႕ရနငပါတယ။

}

Page 32: C#Coding Standards

အဒလေရးရငလညးရပါတယ။ဒါမမဟတ Error Handling လပတ try Block တ႔ catch Block န႔လပရင

Coding Standard ကလကနာတာျဖစပါတယ။

ဒါဆရင ဘယလေရးရငမလကနာဘးလညးဆတာကပါေလလာၾကညလကရေအာင။

If ( MemberType == eMemberTypes.Registered )

{

// Code that do something for Registered Users

}

Else

{

// Code that do something for Guest users and Unkown users

ဤသ႔ျပလပခငးေၾကာင Error တကခအခါမာ Handle ျပလပရမလြယသလ ေနာငတစခနမာ User

အသစေတြက ျပလပခအခါမာတကနငတ Error ေတြကလညးအလြယတက ရာေဖြေတြ႕ရနငမာမဟတပါဘး။

}

အထကပါအတငးေရးထားျခငးေၾကာင Error တကတအခါမးမာ အမားရာရင လြယလြယကကရာေတြ႕နငမာ

မဟတပါဘး။

Page 33: C#Coding Standards

DDoonn’’tt uussee HHaarrddccooddee

6.Hardcode ေတြကတတနငရငဘယေတာမမသးပါန႔။သ႔ကသးမအစား Constants ကသးပါ။

Constants က File ရအေပၚမာေၾကညာၿပးေတာမ ကယသးမ Code ထမာယသးပါ။

ဒါေပမ Constants က File အေပၚမာေၾကညာၿပးေတာသးျခငးကလညး Coding Standard အရ စမတ

ေရးနညးေတာမဟတပါဘး။

Pure Coding Standard ကသးခငတယဆရငေတာ ကယေရးမ Constants က File အထမာမေၾကညာဘန႔

Configuration File ထမာျဖစျဖစ Database ထမာျဖစျဖစေၾကညာထားၿပးမမမေရးမ Code ထမ ယသးျခငး

ကေတာ အမနတကယ Coding Standard ကလကနာထားေသာ ေရးနညးသာျဖစပါတယ။

အဒလျပလပျခငးကဘာေကာငးက းရသလဆေတာ ေနာငတစခနမာျပနျပငခငတအခနမးေရာကရင

ဖငေတြအားလးက လကျပငေနစရာမလေတာဘ ဖငတစခထက Code ကျပငလကတာန႔သ႔ကသးထားတ

ဖငေတြအားလးကျပငၿပးသားျဖစသြားပါတယ။

7.ေနာကတစခကေတာ HardCode String ေတြကမသးဘန႔ Resource Files ေတြကသးပါ။

Configuration file , XML , Database တ႔စသျဖငကသးပါ။

8. string ေတြက တစခန႔တစခ မႏငးယဥမ Lower Case (or) Upper Case ကေျပာငးၿပးမ တစခန႔တစခ

Compare လပပါ။ဒါမသာ string ေတြက မတညတ Case ေတြန႔ Compare လပတအခါမာ ပၿပးေတာ အဆင

Page 34: C#Coding Standards

ေျပမာျဖစပါတယ။

If ( name.ToLower() == “hello” )

{

// Code

}

9. တစခါတစေလ ကၽြနေတာတ႔ TextBox ထမာ ရတစာသား (Character) ေတြကရငးထတခငတယဆရင

ကၽြနေတာတ႔ txt.Text=” ”; ဆၿပးေတာ ဘာမမရတ string ကထညၿပးေတာ ရငးခဖးပါတယ။

Coding Standard ကလကနာမယဆရငေတာ အဒလမေရးသငပါဘး။

အဒလေရးမအစား .Net မာအသငပါတ string.Empty ကသးပါ။ပရငးသြားေအာင ဥပမာေလးန႔ၾကညလက

ရေအာင။

If ( name == string.Empty )

{

// Code that do something

}

အဒလေရးရင စ ကလကနာထားပါတယ။

Page 35: C#Coding Standards

If ( name == “ “ )

{

// Code that do something

}

အဒလေရးရငေတာ မလကဘးလ႔ဆနငပါတယ။

10. Member Variables ေတြသးျခငးက ေရာငပါ။ထ႔ေၾကာင မမလအပတ ေနရာေရာကမဘ Local

Variables ေတြကေၾကညာၿပးေတာ လသလသးပါ။ Member Variables ကေၾကညာထားၿပး Method ေတြ

အမားႀကးက ယသးေနရင မလလားအပတ Error ေတြတကနငပါတယ။အကယ၍ Member Variables

ကေၾကညာထားၿပး Method ေတြက Share လပၿပးယသးတအခါမာ ဘယ Method က ဘယအခနမာ ဘယ

ေနရာက ေျပာငးလသြားသလဆတာက Track လကၾကညတအခါမာ ခကခသြားမာျဖစပါတယ။

11. enum က အလဥးသငသလသးပါ။ သသာထငရားၿပး မတညတ တနဖးေတြက ေဖာျပခငတယဆရင

string (or) number ေတြကမသးပါန႔။ဥပမာန႔ေျပာရရင Gender ဆရင Male န႔ Female ဘရတအတြက

သ႔ကေၾကညာရင string န႔မေၾကညာဘန႔ .Net မာပါတ enum ကသးၿပးေတာေၾကညာသငပါတယ။

ပၿပးေတာ ရငးသြားေအာင ဥပမာေလးန႔ၾကညလကရေအာင…။ဥပမာ မာေတာ HTML ေလးန႔ဘျပထားပါ

တယ။

Page 36: C#Coding Standards

enum Email { Html, PlainText, Attachment } void SendMail (string message, Email email) { switch ( email ) { case Email.Html: // Code that Do something break; case Email.PlainText: // Code that Do something break; case Email.Attachment: // Code that Do something break; default: // Code that Do something break; } } အဒလေရးထားရငေတာ Coding Standard ကလကနာထားတအတြကေၾကာင စမတ ေရးနညးဘျဖစပါတယ။ ဒါဆရင စ ကမလကနာတ ပစကေတာ

Page 37: C#Coding Standards

void SendMail (string message, string email) { switch ( email ) { case "Html": // Do something break; case "PlainText": // Do something break; case "Attachment": // Do something break; default: // Do something break; } }

12. Member Variables ေတြက public န႔ protected န႔မေၾကညာသငပါဘး။ေၾကညာမယဆရင

ေတာ OOP Rules ရ စအရ Private န႔ဘေၾကညာသငပါတယ…။ၿပးေတာမ public Property က သးၿပးေတာေျပာငးလသငပါတယ။

Page 38: C#Coding Standards

13. Event Handler method ထမာ Required Action ကေဆာငရြကတ Code ေတြမပါသငပါ

ဘး။ ေနာကၿပးေတာ ကယေရးထားတ Event Handler Method ကေနေနာကထပ method တစခကေခၚ တာမ းေတြကျပလပသငပါတယ။ Method တစခထမာဘ အားလးမေရးဘန႔သးျခား Method ေတြ က တစခခငးေခၚသးတာမးေတြ ျပလပျခငးကဆလတာျဖစပါတယ။

14. မမေရးသားေနတ Code ထမာပါတ Path လမးေၾကာငးေတြကေပးတအခါမာလညး

Hardcode ေတြကသးၿပးေတာမေပးပါန႔။ ေနာကၿပးေတာ Drive Name ေတြကလညး HardCode မေပးပါန႔။ Application Path ေတြက Relative Path န႔ Programmatically ဘေပးပါ။

15. ကယေရးထားတ Code ေတြက Hardcode ျဖစေနရင အခကအခၾကနငပါတယ။ဘယလမး

လဆေတာ ကယက Drive D: ထမာ Data ေတြသြားသမးေအာင Hardcode န႔ေရးထားပါတယ။ ထ႔ကသ႔ျပလပျခငးမးကေရာငပါ။ဘာျဖစလ႔လဆေတာ ကယစကမာကေတာ D: ထမာသြားသမးလ႔ ရေပမ တျခားသမားစကမာ D: မရဘန႔ A: , B: , Z: တ႔စသညျဖငရလာတအခါမာ Error တကလာ နငတအတြကေၾကာင ေရာငၾကဥရပါမယ။

16. ကယေရးထားတ Application ကစမ Run ခငမာ ကယေရးထားတ Application က Run

နင မ Drive Location မာ ကယေရးထားတ Application အလပလပေစနငဖ႔အတြက

Page 39: C#Coding Standards

ဖငေတြရမရက ဦးစြာ စစတ Code ေတြကေရးသားထားဖ႔လပါတယ။ ဥပမာအေနန႔ေျပာရရင Database န႔ခတဆက တ Code ေတြပါခရင အရငဆးဦး ကၽြနေတာတ႔သးမ Database Connetion ရမရ…အလပ လပ… မလပ စသျဖငစစတ Code ေတြကထညထားဖ႔လပါလမမယ။ အကယ၍ Problem (Error) တကခတယဆရငလညး အသးျပသ User က Message Box လမး ရကမျပဘန႔…ခငမငရငးႏးတ စကားလးေတြန႔ Error တကေနေၾကာငးကျပသသငပါတယ။ ဘာျဖစလ႔ Message Box ကမေကာငးရသလဆေတာ ေလလာေတြ႕ရခကမားအရ Message Box ျဖငၿပ ျခငးက User ကအထတတလန႔ျဖစေစတယလ႔ဆထားပါတယ။ဥပမာ.. သးေနတနး (ဒန) ဆ ၿပးေတာ တကလာရင User ကအထတတလန႔ျဖစေစတအျပင စတပကသြားနငတအတြကေၾကာင Label ေလးက အေရာငေလးန႔ျဖစေစ… ေဘးမာ အေရာငေလးန႔ျဖစေစ ယဥေကးစြာေရးသား အသ ေပးသငပါတယ။

17. အကယ၍ ကယေရးထားတ Code ေတြထမာ Configuration File ပါတအခါမာ

Configuration File လအပတအခါမ းမာ မရခဘးဆရင Default Value န႔ Configuration ဖင အသစတစခေဆာကေပးထားဖ႔လပါတယ။

18. အကယ၍ Configuration File ထမာ မားေနတ တနဖးက ေတြ႕ရလ႔ဘျဖစေစ…ထည

လကတ တနဖး မားယြငးေနလ႔ဘျဖစေစ…Label သ႔ Error Throw လပၿပးေတာဘျဖစေစ… အသးျပသကေဖာျပေပးဖ႔လပါတယ။ထပၿပးေတာ အသးျပသ User က ထညရမတနဖး က Sample

Page 40: C#Coding Standards

အေနန႔လညးေဖာျပေပးဖ႔လပါလမမယ။

19. Error Message ကအသးျပသက Error ေျဖရငးနငေစရန မားစြာအကအညေပးပါတယ။

ထ႔ေၾကာင User က ေဖာျပတအခါမ းမာ “ Error in Application “ , “ There is an Error ” ဆၿပးေတာဘယေတာမေဖာျပဖ႔လပါတယ။ထသ႔ေဖာျပလကတာန႔ User ကဘယေနရာမာ ဘယလသြားျပငရ မလဆတာ မသေတာတအေျခအေနမးၾကေတြ႕နငပါတယ။ ဥပမာအေနန႔ေျပာရရင Database က Update သြားလပတ Code ေတြမာဆရင Error တကတအခါ မာ ျပသငတာကေတာ “ Fail to Update Database ” ဆၿပးေတာျပသငပါတယ။

20.Login ၀ငတအေျခအေနမ းေတြမာဆရငလညး မားေနရင “ Please make sure your

username and Password” တ႔…. “ username and password are do not match “ စသျဖငျပသငပါတယ။ ဤသ႔ျပျခငးေၾကာင User ကလညး ေအာ…ငါမားေနတာဒါပါလားဆတာက သၿပးေတာ မ အမနကျပငနငမာျဖစပါတယ။

21. ေနာကတစခကေတာ Error ျပတအခါမာ Programming ဆငရာ Code ေတြ… Logic ေတြန႔

မျပ ဖ႔ေတာလပါလမမယ။ဘာေၾကာငလညးဆေတာ Programming ဆငရာ Code ေတြက Programmer ေတြန႔ရငးႏးကၽြမး၀ငထားတ သေတြမဘသမာျဖစပါတယ။

Page 41: C#Coding Standards

လအထငႀကးေအာင ငါ Program က Programming Code န႔ဘ Error ျပလ႔ အဆငျမငတယလ႔ မထငပါန႔။ေရာငၾကဥသငပါတယ။ Error အေၾကာငးက အားလးျခၿပးေတာေျပာရရင အလြယဆးန႔ အဆငေျပဆးျဖစေအာင Message ကျပတတဖ႔ေတာလပါလမမယ။ အဒလျပျခငးက ဘာန႔တသလဆေတာ စာေရးသန႔တပါတယ။စာအပေတြ…စာတမးေတြ…စာသင တာေတြ…စတအလပကလပတသေတြဆရငေတာပသနငပါတယ။ စာရငးတယဆတာ ကယနားလညသလ ရငးလ႔မရပါဘး။ ကယကယတငက တကယတတေပမ ကယနားလညသလ သြားရငးရငေတာ နားေထာငတသေတြက ဘာမနားလညမာမဟတပါဘး။ ဒါေၾကာင စာေရးသားျခငး…စာရငးျခငးဆတာေတြကေတာ မမတတသမၽ သသမၽ ေတြက အလြယ ကဆး အရးရငးဆး ျဖစေအာင..ေရး…ရငးျပ…စသညျဖငလပသငပါတယ။ ရငးရငးေျပာရရင ကယက အရမးေတာတ ဆရာႀကးဘျဖစေနအးေတာ..စာရငးရငေတာ လ အထငႀကးေအာင စကားလးႀကးႀကးေတြန႔မရငးဘ…. လပနး နားလညေအာင စကားလးေပါေပါပါးပါး န႔ ရငးျပသငပါတယ။စာေရးေနတသေတြက ဆရာလပတာမဟတပါဘး။ ကြနေတာကယတငကလညး စာေရးဆရာ မဟတတအတြကေၾကာင တတႏငသေလာကေတာ အားလးနားလည ေစရန လြယလြယကက ရငးၿပထားပါတယ။ ထ႔အတဘ Error Message ျပတအခါမာလညး အလြယကဆးန႔ အရးရငးဆး ထထမမ ျပတတဖ႔ ေတာလပါတယ။ဒါမသာလင Coding Standard ကလကနာထားတအတြကေၾကာင စ မတေရးသား

Page 42: C#Coding Standards

နညးျဖစပါတယ။

22. Single File တစခထမာ တတနငရင Class က တစခထပပၿပးေတာမထားပါန႔။အဒလထား

ျခငး က Coding Standard န႔မကကညတအတြကေၾကာငျဖစပါတယ။

23. File တစခထမာ Coding ေတြအမားႀကးေရးျခငးကေရာငၾကဥသငပါတယ။ဖငတစဖငထမာ

လငးေရ 1000 Lines ထကမေကာသငပါဘး..။ေကာေတာမယဆရငလညး ေနာကထပ Class ေတြ ထပခြၿပးေတာ ေရးသငပါတယ။

24. public Method ေရးသားျခငးကေရာငၾကဥသငပါတယ။ဘာေၾကာငလဆေတာ public ရ

သေဘာအရ ႀကကတ Class ကအလြယတကယသးလ႔ရပါတယ။Same Assembly ထမာဆရင ေတာ internal ကသးၿပးေတာေၾကညာရငလညး အဆငေျပပါတယ။private ကသးရင လညးအဆငေၿပပါတယ။

25. Method တစခထက Parameter ေတြအမားႀကး Pass လပျခငးကလညးေရာငၾကဥရပါ

မယ။အကယ၍ Parameter ေလးခ..ငါးခ ရေတာမယဆရငေတာ Class တစခ (သ႔) Structure တစခက Define လပဖ႔အတြကပၿပးေတာသငေတာပါတယ။

Page 43: C#Coding Standards

26. အကယ၍ ကယေရးထားတ Method အထမာ Collection Return ျပနတအေၾကာငးပါေန

တယဆရင တစခါတစေလ ျပနစရာတနဖးမရတအခါမးန႔ၾကရနငပါတယ။ အဒါဆရငကၽြနေတာတ႔အမား ဆးျပလပၾကတာကေတာ null တနဖးက Return ျပနတာျဖစပါတယ။ အမနတကယ Coding Standard ကလကနာမယဆရငေတာ အဒလ null return ျပနတယဆတာမားပါတယ။ ထ႔ေၾကာင Coding Standard အရ ဘာမ Return ျပနစရာမရဘးဆရင null Return ျပနမအစား Empty Collection ႀကးကသာ ဒအတငး Return ျပနေပးလကပါ…။ ဥပမာအေနန႔ေျပာရမယဆရင ArrayList Return ျပနတ Method တစခေရးထားတယ…။ ဒါေပမ Return ျပနစရာကဘာမမရဘးျဖစေနတယ။ဒါဆရင ကၽြနေတာအေပၚမာေျပာထားသလဘ null Return မျပနပါန႔။ သည (0) ကသာ Return ျပနေပးလကပါ။ အဒလ ျပလပျခငးေၾကာင ဘာေတြေကာငးကးရသလဆေတာ Application Calling ျပလပတအခါ မာ Count က Check ျပလပခငတယဆရင null Return ျပနထားတာထကစာရင ပၿပးေတာ လြယ လြယကက Check ျပလပလ႔ရမာျဖစပါတယ။

27. Copyright , Company Name , Description , Version Number စသညတ႔ရ

Information ေတြကစစညးသမးထားခငတယဆရင Assembly Info File က သးပါ။

Page 44: C#Coding Standards

28. ကယေရးသားဖနတးထားတ File ေတြကစနစတက Folders ေလးေတြခြၿပးေတာသမးထား

ပါ။ထသ႔သမးမယဆရငေတာ Hierarchies Level ႏစခန႔သမးနငပါတယ။ ASP.Net မာဆရင ပသသာပါတယ။ဖငေတြမားေလ Folder ေလးေတြေဆာကၿပးေတာခြရေလပါဘ။ Coding Standard အရ အမားဆးအေရအတြကကေတာ Root Folder အထမာစစေပါငး 10 Folders အထဘရသငပါတယ။အဒ Folders တစခခငးစမာလညး Sub Folders ေပါငး 5 ခအထရ လ႔ရပါတယ။အဒထကမားသြားတယဆရငေတာ Coding Standard အရ Hierarchies Level ႏစခ ထကထညသြငးလ႔မရေတာပါဘး။ဒါေၾကာင Multiple Assembly ေတြကထပခြဖ႔လလာတအတြက ေၾကာင မလအပဘန႔ ရပေထြးေစနငပါတယ။

29. အကယ၍ ကယေရးသားေနတ Code ေတြက Database Connection န႔ပကသကတာ…ဒါ

မဟတ Sockets , FileStream ……. စတာေတြန႔ပကသကၿပးေတာ အလပလပေတာမယဆရင ကယေရးမ Data Access Code ေတြက try{} finally{} န႔ ေရးသားထားဖ႔ေတာလပါလမမယ။ ဘာေၾကာငလဆေတာ Database ကခတဆကရာမာ Connection ကဖြငရပတရတအတြကေၾကာင ဖြငၿပးေတာမ Error တကခရင မပတမရငေနာကလေတြသးရင အဆငမေျပျဖစတတတအတြက ေၾကာင ဘာျဖစျဖစ ေနာကဆး Connection ကျပနပတဆၿပးေတာ finally Block ထမာ ေရးသား ထားဖ႔လပါလမမယ။

Page 45: C#Coding Standards

ပၿပးေတာရငးသြားေအာင ဥပမာေလးန႔ၾကညလကရေအာင။ Private void GetData()

{

SqlConnection sqlcon=new SqlConnection();

…..

…..

…..

try

{

sqlcon.Open();

……

}

Finally

{

sqlcon.Close();

}

Page 46: C#Coding Standards

}

ဆၿပးေတာေရးသားထားဖ႔လပါလမမယ။ဒါမသာ Error တကရငလညး Connection ကပတသြားမာျဖစပါ

တယ။

30. Variables ေတြကေၾကညာေတာမယဆရင ကယအရငဦးဆးသးမ Variables န႔တတနငသမၽ

အနးကပဆးထားၿပးေတာ ေၾကညာသငပါတယ။ေနာကတစခက Variables ေတြကေၾကညာရင တစေၾကာငးက တစခသာေၾကညာသငပါတယ။

string name; int age; int phone; အဒလမးေၾကညာသငပါတယ။ string name; int age; int phone; အဒလမေၾကညာသငပါဘး။

31. loop အထမာရတ string objects ေတြက Manipulate လပဖ႔လတယဆရငေတာ string

အစား StringBuilder Class ကအသးျပပါ။ ဘာေၾကာငလဆေတာ string objects က .Net မာအလပလပပကထးဆနးပါတယ။ ဘယလမးလဆေတာ တစႀကမေၾကညာဖးတ string ထက တနဖးေနာကတစႀကမထညမယဆရင ရၿပးသား string object ကလႊငပစလကၿပးေတာ ေနာကထပ string object အသစတစခကထပ ေဆာကပါတယ။မလအပဘန႔ အမကေတြမားလာနငတအတြကေၾကာငျဖစပါတယ။

Page 47: C#Coding Standards

ပၿပးရငးသြားေအာင Sample ေလးန႔ၾကညလကရေအာင။

public string ComposeMessage (string[] lines) { string message = String.Empty; for (int i = 0; i < lines.Length; i++) { message += lines [i]; } return message; } အေပၚကဥပမာေလးန႔ၾကညမယဆရင string object message ထက lines arrays ေတြက loop ပတၿပးေတာထညထားတပစပါဘ။ ဒါေပမအမနတကယျဖစေနတာကေတာ looping တစႀကမပတလကတငး ေဆာကထားတ string object ေတြကပကပကသြားၿပးေတာ ေနာကထပ အသစတစခအေနန႔ျပနၿပးေတာ recreation လပပါတယ။အသစျပနရမ ေနာကထပတစႀကမျပနၿပးေတာ loop ပတၿပးေတာထပထညပါတယ။ အဒလျဖစေနတအတြကေၾကာငအရငရၿပးသားအေဟာငးေတြကဖကပစလကၿပးေတာ အသစေတြ ေဆာကေဆာကတတတာကေတာ string object ရသေဘာပျဖစပါတယ။ ဒါေၾကာင အဒလမျဖစေစရနအတြက loop အထမာအလပလပခငတယဆရငေတာ string object အစား StringBuilder class ကအသးျပပါလ႔ဆထားတာျဖစပါတယ။ ဒါေၾကာင Looping မားမားပတၿပးေတာ တနဖးေတြထညခငတယဆရငေတာ string object အစား StringBuilder class ကအသးျပရငေတာ Coding Standard ကလကနာထားတအတြကေၾကာင အသးျပသငပါတယ။

Page 48: C#Coding Standards

ဒါဆရင ကၽြနေတာတ႔ပရငးသြားေအာင StringBuilder class ေလးန႔ၾကညလကရေအာင။

public string ComposeMessage (string[] lines) { StringBuilder message = new StringBuilder(); for (int i = 0; i < lines.Length; i++) { message.Append( lines[i] ); } return message.ToString(); } StringBuilder ကသးထားတအတြကေၾကာင string object လမ း မျဖစေတာတအတြကေၾကာင Coding Standard အရသ႔ကသးသငပါတယ။ Looping အတြကကသာ StringBuilder ကအသးၿပသငပါတယ။ တၿခားေနရာေတြမာဆရငေတာ StringBuilder အစား string ကသာအသးၿပရင အေကာငးဆးၿဖစပါတယ။ ဒါဆရင ကၽြနေတာတ႔အခေလလာေနတ Good Programming Practices ေတြကေတာဒေလာကပါဘ…။ ဒါဆရင ကၽြနေတာတ႔ေနာကထပေလလာမာကေတာ Coding ေတြေရးတအခါမာ Layer ေတြခြေရးသငတအခကေလးေတြ... Architecture အေၾကာငးေလးေတြက Coding Standard န႔အတေလလာၾကမာျဖစပါတယ။ အဒါကေတာ Programmer ေတြန႔သပမစမးေလာကပါဘး။ ဒါဆရင ကၽြနေတာတ႔ ဘယလလကနာၾကမလဆတာက ေလလာၾကညလကရေအာင။

Page 49: C#Coding Standards

AArrcchhiitteeccttuurree Architecture မာလကနာသငတ အခကေလးခကရပါတယ။ဘာေတြလဆေတာ 1. Layer ခြေရးတ ပစကအျမအသးျပသငပါတယ။ Multi Layer (n-Tier) Architecture ကအသးျပသငပါတယ။ 2. UI (User Interface) ကေနဘယေတာမ Database က Access ျပလပတ Code ေတြကမေရးသငပါဘး။ ASP.Net က SqlDataSource ကေတာ ၿခြငးခကအေနန သတမတလ ရပါတယ။ အျမတမး Data Access Layer ကေရးထားၿပးေတာ Database န႔ပကသကတ အလပေတြကသ႔အထမာ ေရးပါ။ အဒလျပလပျခငးေၾကာင ေနာငတစခနမာ Database န႔သကဆငတအေၾကာငးအရာေတြကျပငခငလ႔ဘ ျဖစျဖစ Update လပခငလ႔ဘျဖစျဖစ…ေရြ႕ေျပာငးခငလ႔ဘျဖစျဖစ အဆငေျပလြယကစြာျပလပနငမာ ျဖစပါတယ။ 3. Database န႔သကဆငတ Code ေတြကေရးေတာမယဆရင Database Exception ေတြကဖမးဖ႔ အတြက try catch finally Block ေတြေရးဖ႔မေမပါန႔။အဒလ Exception Handler ေရးသားျခငးက Database မာတကတ Exception ေတြရ Record ကျပေပးမာျဖစပါတယ။ Record ေတြကျပေပးတအခါမာ အေသးစတျပေပးသငပါတယ။ Command မားေနတာလား… Stored Procedure ေၾကာငလား… ConnectionString ေၾကာငလား… စသျဖငအေသးစတျပေပးသငပါ တယ။ အဒလ Record လပၿပးတအခါမာ Exception rethrown လပေပးဖ႔လပါလမမယ။

Page 50: C#Coding Standards

ဒါမသာ သန႔ဆကစပေနတ Application ထမာရတ တျခား Layer ေတြက Exception catch လပၿပးေတာ သငေလာတ Action ေတြကဆကလကလပေဆာငနငမာျဖစပါတယ။ 4. ေနာကဆးတစခကကေတာ Independent Utility Classes ေတြက Class Library ေတြအျဖစသးသန႔ခြထားပါ။ Database န႔သကဆငတ ဖငေတြအားလးက ေနာကထပ Class Library တစခအေနန႔ထားျခငးျဖင Coding Standard ကလကနာၿပးေတာ ေရးသားသငပါတယ။ ဒါဆရင ကၽြနေတာတ႔ေနာကထပေလလာၾကမာကေတာ ASP.Net ေရးရင Coding Standard ကလကနာ ၿပးေတာ ဘယလေရးရသလဆတာက ေလလာၾကညလကရေအာင။

SSoommee ooff AASSPP..NNeett CCooddiinngg SSttaannddaarrddss

1. Session Variables ေတြက Code ေတြၾကားထမာမသးပါန႔။ Session Variables က Class ေတြထမာဘအသးျပသငပါတယ။ ေနာကတစခကေတာ Session Variables ထမာ Stored လပထားတ တနဖးေတြက Access လပတ Method ေတြအထမာဘအသးျပသငပါတယ။ Session Class က Access လပခငရငေတာ

Page 51: C#Coding Standards

Using System.Web.HttpContext.Current.Session; ကေၾကညာၿပးေတာ Access လပလ႔ရပါတယ။ 2. Session ထမာ Object အႀကးႀကးန႔ အမားႀကးသမးျခငးက မျပလပသငပါဘး… ဘာေၾကာငလဆေတာ Session က Server Memory ေပၚမာသမးတအတြကေၾကာင User မားလာတအမၽ Server ႀကးေလးေလးလာမာျဖစပါတယ။ ဒါေၾကာင Session ထ မာ Object အႀကးႀကးေတြ သမးျခငးကေရာငၾကဥသငပါတယ။ 3. Page ေတြရ Look and Feel အတြကကေတာ Style Sheet (CSS) ကဘအသးျပသငပါတယ။ Font-Names တ႔ Font-Size တ႔က ဘယေတာမ UI Page(.aspx) မာမေၾကညာပါန႔။ အားလးကတစခထထားခငတယဆရငေတာ Skin File ထမာသြားေၾကညာၿပးမ Page ကေနယသးၿခငးကလညး ၿပလပသငပါတယ…။ ထသ႔ျပလပျခငးေၾကာင ေနာငတစခနမာ မမ Website က ေျပာငးလတအခါမာ အဆငေျပလြယကမာျဖစပါတယ။ ဘာေၾကာငလဆေတာ Website ကမလလ ဘၿဖစေစ….မၾကကေတာလ ဘၿဖစေစ…ၿပငမယဆရင အားလးက လကၿပငေနစရာမလေတာဘ…CSS န Skin File ကသြားၿပငလကရင သ တ ကယသးထားတ Page ေတြအားလးက အလအေလာကေၿပာငးေပးသြားမာၿဖစတအတြကေၾကာင မားစြာအဆငေၿပပါတယ..။ ေနာကတစခကက HTML Server Controls ေတြကသးမယလ ယဆၿပးေတာ စေရးတာန …ကယေရးေနတ Project တစခလးက HTML Server Controls ေတြန ဘေရးသငပါတယ။ HTML Server Controls ကလညးသးတယ…ASP.Net Web Server Controls ေတြကလညးသးတယ…ႏစမးစလးကသးၿပးေတာ Project တစခထမာမေရးသငပါဘး…။ တစမ းထကသာသးၿပးေတာေရးသားသငပါတယ…။

Page 52: C#Coding Standards

CCoommmmeennttss

Comment ပတတအခါမာလညး လကနာရမအခကေတြက အမားႀကးရပါတယ။ဒါေပမ အသးမားမ…အသးတညမ အခကေလးေတြကဘေရြးခယေဖာျပလကပါတယ။ ေတာၾကာ..” ဟ Comment ပတတာေတာင ကယစတၾကကမပတရဘးလား “ ဆၿပးၿဖစလာမာစးလ ပါ။ ၁. Coding တစေၾကာငးေရး Comment တစေၾကာငးပတျခငးကေရာငၾကဥပါ။ Variables ေၾကညာၿပးတငးလညး Comment ပတျခငးကေရာငၾကဥပါ။ ၂. Comment ပတေတာမယဆရင HTML မာ Comment ပတသလမး မပတပါန႔။ /* …. */ ဆၿပးေတာမပတပါန႔။သ႔အစား // (or) /// ကသးၿပးေတာပတပါ။ ASP.Net မာဆရငလညး <%-- --%> ကသးပါ။ ၃. ေနာကဆးတစခကေတာ တကယ အသးလတ အခါမသာ Comment ပတပါလ႔အႀကေပးခငပါတယ။ ေနာကဆးေလလာၾကမာကေတာ Exception က ဖမးတအခါမာ ဘယလမးကကငသးလကနာရမလဆတာက ေလလာၾကမာျဖစပါတယ။

EExxcceeppttiioonn

1. Exception ဖမးတအခါမာ catch ကေရးၿပးေတာ catch ထမာ ဘာအလပမမလပျခငးကေရာငပါ။ အကယ၍ Exception မဖမးထားဘးဆရင ကယေရးထားတ Code ေတြက Exception တကမတက ကမသနငေတာတအတြကေၾကာင ဘာေရးေရး Exception ဖမးတအကငကျပလပပါ။

Page 53: C#Coding Standards

Developer အမားစကေတာ အေရးမႀကးတ Error ေတြအတြက လစလၽရဖ႔အတြက ဤနညးက အသးျပၾကပါတယ။ Programmatically Error ေတြက Checking လပျခငးကေရာငၾကဥသငပါတယ။ တစခ႕ကေတာလညး Exception ေတာဖမးထားပါရ….ဒါေပမ ဘာမမလပဘး…ကနကနေျပာရရင Message တစေၾကာငးေတာငရကမျပတ လမားကလညးေတြ႕ဖးပါတယ။ အဒလျပလပျခငးက ေရာငရားသငပါတယ။ ဒါေၾကာင Exception ဖမးမယဆရငေတာ အနညးဆး စာသားတစေၾကာငးေလာကေတာရကျပသငပါတယ။ 2. ေနာကတစခကကေတာ အေပၚမာေလလာခသလဘ ရငးႏးကၽြမး၀ငတ Message ေတြကဘရကျပၿပးေတာ User ကျပသငပါတယ။ 3. Exception ဖမးရာမာ Specific Exception ေတြကသာဖမးပါ…။တစခ႕ကေတာ catch ကဒလေရးတတပါတယ။

catch(Exception) { Console.WriteLine("ERROR"); }

အဒလမျပလပသငပါဘး။တကတ ပစန႔ဖမးရမာျဖစပါတယ။ဒလပါ။

catch(FileIOException) { Console.WriteLine(“IO Error”);

}

အဒလစစသငပါတယ။

Page 54: C#Coding Standards

ဒါေပမ….အေၿခအေနတစရပေတာရပါတယ။ဘာလဆေတာ အခမစေလလာတ သၿဖစတယဆရငေတာ Specific Exception ကမသေသးတအတြကေၾကာင Exception ဆၿပးေတာ ဖမးရငလညးၿဖစပါတယ။ ဒါေၾကာင ကယက ဘယ Exception ကဖမးမလဆတာက သရငေတာ Specific Exception ကဖမးပါ။ မသေသးဘးဆရငေတာ Exception လ သာဖမးပါ…အဒအတြကေတာ ၿခြငးခကေလး ေပးထားပါတယ။ ဒေလာကသသြားၿပဆရငေတာ ကၽြနေတာတ႔ေလလာေနတ Coding Standard အေၾကာငးကေတာ ဒမၽပါဘ။ ကၽြနေတာေမေနတာတ႔..အေရးႀကးတအခကေလးေတြကနခတာတ႔…အယအဆမားေနတာတ႔….စသျဖင အမားေတြရေနခတယဆရင လညး ခြငလႊတေပးပါလ႔ေတာငးပနပါတယ။ ဘာျဖစလ႔ကၽြနေတာတ႔ေတြ အခနကနခၿပးေတာ Coding Standard ေတြကေလလာေနၾကသလ။ ဘာၿဖစလ ကြနေတာက ေကာ စာဖတသတ အတြက အခနကနခၿပးေတာ ဒစာေတြေရးေပးေနသလ…။ ဘာေၾကာငလဆေတာ ကြနေတာသေဘာကေတာ စာဖတသတ ကစနစတက ၿဖစေစခငတအတြကေၾကာငသာၿဖစပါတယ။ ကယေရးေနၾကအတငး ေရးရငေကာ မရဘးလား။ အဒလ လကၿပးေတာ အားလးကလကနာေနမယဆရင ဘယမာလာၿပးေတာ Program ကၿပးေတာမာလ…Deadline မ၀ငရင Project Manager ကဆလမမယ။ အကနလးကလကနာေနရငေတာ အခနကနၿပးေတာ ခရးေရာကမာမဟတဘး……..စသျဖငေျပာလ႔ရပါတယ။ ဟတပါတယ။အားလးကလကနာရမယလ႔မဆလပါဘး။ဒါဆရင ဘာေၾကာင ေလလာေနရသလ… ကၽြနေတာ ဆရာတစေယာကေျပာဖးတာကေတာ သအလပလပဖ႔ အငတာဗးသြားေျဖတနးက သ႔ကေမး တယ…မငးတစေန႔က Coding Line ေရဘယေလာကေရးနငလဆၿပးေတာေမးပါတယ။ အဒတနးကသလညးမသဘးလ႔ျပနေျဖခပါတယ။အဒအခကေတြကလညးအေရးႀကးပါတယ။ ဘာျဖစလ႔လဆေတာ သတ႔ဆမာက Project တစခကေရးရင တစရကကလငးေရဘယေလာကေရးနငသလဆတာကၾကညပါတယ…။

Page 55: C#Coding Standards

ၿပးရင သတ႔ေရးနငတလအေရအတြကကေခၚပါတယ။ ဥပမာ တစေယာကက တစရကက ၂၀၀ ေလာကေရးနငရင လငးေရ ၁၀၀၀ ရတ Program ကေရးမယဆရင တစရကထန႔ၿပးခငရင ၅ ေယာကေလာကန႔ေရးခငးၿပးေတာ ကနတ Programmer ေတြက တျခားအလပေတြလပခငးမာျဖစပါတယ။ ဒါဆရင အငတာဗးတစခအတြကန႔ဘ ဒါေတြကအခနကနခၿပးေတာ ေလလာေနရတာလား…ဆေတာမဟတပါဘး။ အလပထမာေတာင ကယန အရညအခငး ခငးတတ လ န ယဥၾကညရင သလညး ဒ Program ကေရးႏငတယ…ကယလညးေရးႏငတယ…ဒါေပမ….Boss ေနရာကၾကညရင Coding Standard ကလကနာၿပးေတာ စနစတက ေရးထားတသဆရင ပၿပးေတာ အၾကကေတြ ပါတယ…။ ဒါေၾကာင အဒလက ရာထးတကဖ … လစာတးဖ အတြကပၿပးေတာ အခြငအေရးေကာငးမာၿဖစပါတယ။ ေနာကထပ အေၾကာငးၿပစရာေတာ အမားၾကးရပါေသးတယ…ဒါေပမ ဒေလာကဘၿပေတာမယ။ ေနာကဆးအေနန႔ေျပာရရင ကၽြနေတာ အခေရးထားတ အေၾကာငးအရာေတြကဖတၿပးေတာ လကနာနငတယ…မလကနာနငဘးဆတာကေတာ မမ ဘာသာ ဆးျဖတပါ။ ဒါကေတာ စာဖတသတ ရ ေရြးခယမႈပါဘ…ကြနေတာက အတငးအၾကပ လကက လကနာရမယလ မေၿပာပါဘးခငဗာ…။ ကၽြနေတာကေတာ အဆငေျပေစရနအတြက လကနာခငတသေတြအတြက ေလလာရာမာ အဆငေျပေခာေမြ႕ေစရနအတြက သာရညရြယၿပးေရးထားျခငးျဖစတအတြကေၾကာင ကၽြနေတာရ C# Coding Standard မားအေၾကာငးက ဒေနရာမာဘရပနားခြငျပပါခငဗာ…။ အားလးကနးမာခမးသာၾကပါေစ လ႔ဆမြနေကာငးေတာငးလကပါတယ။

အစဥေလးစားစြာျဖင Zawminsoel (Initial) (MCTS , MCPD [Web]) (MCTS [MSSQL 2008])