做完几个项目后,想对以前在编码规范上的一些理解做成文档,以指导以后的开发。于是在网上找了些资料并结合自己的理解做了个文档出来。在这也起个抛砖引玉的作用,欢迎大家来完善。
一、命名规范
说明 | 常用的命名风格如下。 (1)Pascal风格:包含一到多个单词,每一个单词第一个字母大写,其他字母小写,其余字母均小写。例如:CollegeStudent、HelloWorld等。 (2)Camel风格:包含一到多个单词,第一个单词首字母小写,其余单词首字母大写,其他字母均小写。例如:name、gender、somePara等。 |
注意事项:使用英文命名规则,尽量不使用缩写,禁止使用下划线。
1. DotNet专属对象命名规范:
此命名规范规定了DotNet中专属的各类语言元素的命名规范:
l Pascal:命名空间、类、方法、委托、属性、结构、接口、常量变量均使用Pascal命名规范。
l Camel:私有成员、局部变量、参数、页面控件变量均使用Camel风格。
l 文件名和类名要匹配。
l 当类只用于作为其他类的基类,根据情况,以Base结尾。 Class CarBase
l 接口需在添加第一个字母I表示其是个接口。
l 成员变量与其对应的属性的差别只在于第一个字母的大小写。
l 命名空间使用以下格式:CompanyName.SolutionName.ProjectName[.ModuleName]
2. Javascript、CSS、Html命名规则
此命名规范规定了javascript、css中专属的各类语言元素的命名规范:
l Pascal:js类名使用Pascal风格。
l Camel:js变量、js参数、js函数、css类名、html标签ID、Html标签均使用Camel风格。
l js私有变量需加下划线前缀进行标注。
3. SqlServer数据库命名规则
此命名规范规定了SqlServer中专属的各类元素的命名规范:
l Pascal:就名字本身而言,数据库、表、视图、存储过程、自定义函数、自定义数据类型、触发器均使用Pascal风格。但部分命名需加前缀的下面已给出。
l 视图名使用小写字母v为前缀。
l 存储过程名使用小写字母usp为前缀。
l 自定义函数名使用小写字母ufn为前缀。
4. 组织结构命名规范
l Pascal:DotNet解决方案、DotNet项目、DotNet专属文件、文件夹均使用Pascal风格。
l Camel:文件扩展名、js文件名、css文件名、图片文件名均使用Camel风格。
5. C#控件命名规范
Data Control
类 型 | 前 缀 | 示 例 |
AccessDataSource | ads | adsPubs |
DataList | dlst | dlstTitles |
DetailView | dvw | dvwTitles |
FormView | fvw | fvwFonts |
GridView | gvw | gvwCity |
ObjectDataSource | ods | odsMenus |
Repeater | rpt | rptQueryResults |
ReportViewer | rvw | rvwRecord |
SiteMapDataSource | smds | smdsSite |
SqlDataSource | sds | sdsBooks |
XmlDataSource | xds | xdsTitles |
Validation Control
类 型 | 前 缀 | 示 例 |
CompareValidator | valc | valcValidAge |
CustomValidator | valx | valxDBCheck |
RangeValidator | valg | valgAge |
RegularExpressionValidator | vale | valeEmail |
RequiredFieldValidator | valr | valrFirstName |
ValidationSummary | vals | valsFormErrors |
Navigation Control
类 型 | 前 缀 | 示 例 |
Menu | mnu | mnuUser1 |
SiteMapPath | smp | smpSite1 |
TreeView | trvw | trvwMenu |
Login Control
类 型 | 前 缀 | 示 例 |
ChangePassword | cpwd | cpwdUser1 |
CreateUserWizard | cuw | cuwLogin |
Login | log | logCenter |
LoginName | logn | lognUser |
LoginStatus | logs | logsUser |
LoginView | logv | logvUser |
PasswordRecovery | pwdr | pwdrUser |
WebParts Control
类 型 | 前 缀 | 示 例 |
AppearanceEditorPart | paed | paedPart1 |
BehaviorEditorPart | pbed | pbedPart2 |
CatalogZone | zca | zcatCity |
ConnectionsZone | zcon | zconDataBase |
DeclarativeCatalogPart | pdca | pdcaPart1 |
EditorZone | zed | zedNews |
ImportCatalogPart | pica | picaPart |
LayoutEditorPart | pled | pledNews |
PageCatalogPart | ppca | ppcaMail |
PropertyGridEditorPart | ppge | ppgeServer |
ProxyWebPartManager | mpwp | mpwpWeb |
WebPartManager | mwp | mwpSite1 |
WebPartZone | zwp | zwpSite2 |
ADO.NET 命名规范
数据类型 | 数据类型简写 | 标准命名举例 |
Connection | con | conNorthwind |
Command | cmd | cmdReturnProducts |
Parameter | parm | parmProductID |
DataAdapter | dad | dadProducts |
DataReader | dtr | dtrProducts |
DataSet | dst | dstNorthWind |
DataTable | dtbl | dtblProduct |
DataRow | drow | drowRow98 |
DataColumn | dcol | dcolProductID |
DataRelation | drel | drelMasterDetail |
DataView | dvw | dvwFilteredProducts |
WinForm Control 命名规范
数据类型 | 数据类型简写 | 标准命名举例 |
Label | lbl | lblMessage |
LinkLabel | llbl | llblToday |
Button | btn | btnSave |
TextBox | txt | txtName |
MainMenu | mmnu | mmnuFile |
CheckBox | chk | chkStock |
RadioButton | rbtn | rbtnSelected |
GroupBox | gbx | gbxMain |
PictureBox | pic | picImage |
Panel | pnl | pnlBody |
DataGrid | dgrd | dgrdView |
ListBox | lst | lstProducts |
CheckedListBox | clst | clstChecked |
ComboBox | cbo | cboMenu |
ListView | lvw | lvwBrowser |
TreeView | tvw | tvwType |
TabControl | tctl | tctlSelected |
DateTimePicker | dtp | dtpStartDate |
HscrollBar | hsb | hsbImage |
VscrollBar | vsb | vsbImage |
Timer | tmr | tmrCount |
ImageList | ilst | ilstImage |
ToolBar | tlb | tlbManage |
StatusBar | stb | stbFootPrint |
OpenFileDialog | odlg | odlgFile |
SaveFileDialog | sdlg | sdlgSave |
FoldBrowserDialog | fbdlg | fgdlgBrowser |
FontDialog | fdlg | fdlgFoot |
ColorDialog | cdlg | cdlgColor |
PrintDialog | pdlg | pdlgPrint |
WebControl 命名规范
类 型 | 前 缀 | 示 例 |
Adrotator | adrt | adrtTopAd |
BulletedList | blst | blstCity |
Button | btn | btnSubmit |
Calendar | cal | calMettingDates |
CheckBox | chk | chkBlue |
CheckBoxList | chkl | chklFavColors |
CompareValidator | valc | valcValidAge |
CustomValidator | valx | valxDBCheck |
DropDownList | drop | dropCountries |
DataGrid | dgrd | dgrdTitles |
DataList | dlst | dlstTitles |
RangeValidator | valg | valgAge |
FileUpLoad | fup | fupImage |
HiddenField | hfld | hfldName |
HyperLink | hlk | hlkDetails |
Image | img | imgAuntBetty |
ImageButton | ibtn | ibtnSubmit |
ImageMap | imap | imapSite |
Label | lbl | lblResults |
LinkButton | lbtn | lbtnSubmit |
ListBox | lst | lstCountries |
Literal | ltl | ltlTitle |
Localize | loc | locChina |
MultiView | mvw | mvwForm1 |
Panel | pnl | pnlForm2 |
PlaceHolder | plh | plhFormContents |
RadioButton | rad | radFemale |
RadioButtonList | radl | radlGender |
RegularExpression | vale | valeEmail_Validator |
Repeater | rpt | rptQueryResults |
RequiredFieldValidator | valr | valrFirstName |
SubStitution | subs | subsTime |
TextBox | txt | txtFirstName |
Table | tbl | tblCountryCodes |
TableCell | tblc | tblcGermany |
TableRow | tblr | tblrCountry |
ValidationSummary | vals | valsFormErrors |
View | vw | vwCity |
Wizard | wiz | wizRegister |
二、注释规范
1. 文件头注释
/******************************************************************
* 版权:
* 功能描述:
* 创建时间:
* 作者:
* 版本:
* 修订描述:
* 最后修订日期:
******************************************************************/
三、编码准则
1. 避免过长的方法,方法体应该少于60行。
2. 避免使用诸如0,1,2之类的字面状态量,应该使用更有表达意义的const变量或枚举来取代。
3. 拒绝代码冗余,冗余是代码腐化的根源。
4. 坚持单一职责原则,一个类只因有一个变化的原因。
5. 缩进用 TAB,不用 SPACES。
6. 在每个运算符前后都空一格。
7. 花括弧 ( {} ) 需和括号外的代码对齐。每个花括弧需独立一行。
8. 用一个空行来分开代码的逻辑分组。
9. 在一个类中,各个方法需用一空行,也只能是一行分开。
10. 注释需和代码对齐。只在必需的地方注释。行数不多的注释会使代码看起来优雅。(前提是你的代码命名有意义和逻辑结构清晰)。
11. 如果应为某种原因使用了复杂艰涩的原理,为程序配备良好的文档和重分的注释。
12. 避免在同一个文件中放置多个类。
13. 避免使用大文件。如果一个文件里的代码超过500行,必须考虑将代码分开到不同类中。
14. 总是使用接口。避免只有一个成员的接口,努力保证一个接口有3~5个成员。当使用抽象类的时候,提供一个接口。
15. 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。
16. 避免写超过5个参数的方法。如果要传递多个参数,使用结构。
17. 除了要在switch语句块中实现代码跳转,不要使用goto关键字。
18. 避免使用很多成员变量。声明局部变量,并传递给方法。不要在方法间共享成员变量。否则很难知道是哪个方法在什么时候修改了它的值。
19. 在最靠近一个局部变量被使用的地方声明该局部变量。
20. 避免 string name=””; 正确 string name=String.Empty;
21. 异常处理
l 错误消息而应给出具体错误消息和相应的用户需要做的操作。
l 千万不要捕捉了异常却什么也不做。异常信息要精确记录错误的所有可能细节,包括发生的时间,和相关方法,类名等。
l 别写太大的 try-catch 模块。如果需要,为每个执行的任务编写单独的 try-catch 模块。 这将帮你找出哪一段代码产生异常,并给用户发出特定的错误消息如果应用程序需要,可以编写自己的异常类。对自定义的异常类加上后缀Exception。
l 不必每个方法都用try-catch。当特定的异常可能发生时才使用。不必在所有方法中捕捉一般异常。不管它,让程序崩溃。这将帮助你在开发周期发现大多数的错误。
l 数据库操作和文件操作时,finally很必要。