一、代码规范

良好的代码风格来自于同一的代码规范。风格良好的代码不仅具备可读性和可维护性,同时也给人行云流水、赏心悦目之快感。

据Microsoft公司统计,基于微软平台的开发中,有70-80%的印度工程师在完成同类算法或者模块时,使用的代码基本一致;而相同的调查中只有20%的中国工程师们是基本一致的。这说明我们的代码生产过程亟待规范。

实义命名

类型、变量、常量、方法等标识符一律采用对应的英文实义;如果涉及到两个独立的实义单词,则中间用下划线间隔或者单词首字母大写(两种方式都可以);如果标识符的长度超过了30个字母,则基本上以英文单词发音的重读音节取选出三个字母,如Repeater用rpt,Management用mgt。

大小写规则

目前一般有两种大小写规则:

Pascal大小写形式,所有单词第一个字母大写,其他字母小写。

Camel大小写形式,除了第一个单词,所有单词第一个字母大写,其他字母小写。

n 类名使用Pascal大小写形式

public class HelloWorld(或者Hello_World,以下同,不再赘述)

{

...

}

n 方法使用Pascal大小写形式

public class HelloWorld()

{

void SayHello(string name)

{

...

}

}

n 变量和方法参数使用Camel 大小写形式

public class HelloWorld()

{

int totalCount = 0;

void SayHello(string name)

{

string fullMessage = "Hello " + name;

...

}

}

n 不要使用匈牙利方法来命名变量

以前,多数程序员喜欢把数据类型作为变量名的前缀而m_作为成员变量的前缀。例如: string m_sName;int nAge;

然而,这种方式在.NET编码规范中是不推荐的。所有变量都用Camel 大小写形式,而不是用数据类型和m_来作前缀。

用name,address,salary等代替nam,addr,sal。

别使用单个字母的变量象i,n,x 等。使用 index,temp等。用于循环迭代的变量例外:

如果变量只用于迭代计数,没有在循环的其他地方出现,允许用单个字母的变量命名,而不是另外取实义名。

文件名要和类名匹配,例如,对于类HelloWorld,相应的文件名应为helloworld.cs。

缩进和间隔

n 缩进用TAB,不用 SPACES。

n 注释需和代码对齐。

n 遵循VS2005的自动对齐规则,不要人为的调整。

n 用一个空行来分开代码的逻辑分组。

n 在一个类中,各个方法的实现体必须用空行间隔,大括弧“{}”需独立一行。

n 在每个运算符和括号的前后都空一格。如:

If ( showResult == true )

{

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

{

//

}

}

而不是:

if(showResult==true)

{

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

{

//

}

}

良好的编程习惯

n 避免使用大文件。如果一个文件里的代码超过300~400行,必须考虑将代码分开到不同类中。

n 避免写太长的方法。一个典型的方法代码在1~30行之间。如果一个方法发代码超过30行,应该考虑将其分解为不同的方法。

n 方法名需能看出它作什么。别使用会引起误解的名字。如果名字一目了然,就无需用文档来解释方法的功能了。

n 一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。

n 使用C# 的特有类型,而不是System命名空间中定义的别名类型。如:

int age;

string name;

object contactInfo;

而不是:

Int16 age;

String name;

Object contactInfo;

这么做是基于如下两点原因:(1)规范性和一致性;(2)便于跨语言平台的移植。

n 别在程序中使用固定数值,用常量代替。别用字符串常数,尽量用资源文件。

n 避免使用很多成员变量,声明局部变量,并传递给方法。

n 不要在方法间共享成员变量,如果在几个方法间共享一个成员变量,那就很难知道是哪个方法在什么时候修改了它的值。必要时使用enum,别用数字或字符串来指示离散值。

n 别把成员变量声明为 public或 protected。都声明为private 而使用 public/protected 的Properties。

n 不在代码中使用具体的路径和驱动器名,使用相对路径,并使路径可编程。永远别设想你的代码是在"C:"盘运行。你不会知道,一些用户在网络或"Z:"盘运行程序。

n 应用程序启动时作些“自检”并确保所需文件和附件在指定的位置。必要时检查数据库连接,出现任何问题给用户一个友好的提示。

n 如果需要的配置文件找不到,应用程序需能自己创建使用默认值。如果在配置文件中发现错误值,应用程序要抛出错误,给出提示消息告诉用户正确值。错误消息需能帮助用户解决问题。

注释

n 别每行代码,每个声明的变量都做注释。在需要的地方注释。

n 可读性强的代码需要很少的注释,如果所有的变量和方法的命名都很有意义,会使代码可读性很强并无需太多注释。行数不多的注释会使代码看起来优雅。

n 如果因为某种原因使用了复杂艰涩的原理,必须为程序配备良好的文档和详细的注释。

n 对注释做拼写检查,保证语法和标点符号的正确使用。

二、数据库设计规范

表格分类与命名

n 数据表的分类

u 系统表 支撑业务模型的数据表,如流程模型、系统管理相关表。

u 业务表 产品提供的针对业务的通用功能模块相关表,如通用业务查询等。

u 用户表 用户二次开发使用的与具体业务相关的数据表。

n 数据表的命名

u 所有表格命名一律以字母“T”开头(Table),并且用实义单词以下划线“_”间隔。

u 系统表 系统表前缀为:TSYS_

u 业务表前缀为:TBIZ_

u 用户表由用户自行定义,但是建议不要与系统表和业务表的命名规则重复。

n 字段的命名

字段的命名规则参照代码标识符的命名规则,但是注意避开数据库的保留字。比如不要采用这样的字段名:index,field,password,id,Oracle,SQL等等。

对于涉及到技术核心的系统表,为了防止剖析,建议采用类似“F1,F2,F3……Fn”的方式命名。但是不要采用“F0”,因为这个名称在某些数据库中不被允许,比如Interbase。

索引的建立

n 索引是一把双刃剑,索引将提高查询的效率,但是却降低了insert/delete/update 的效率。

n 通常情况下,对数据的编辑频度和时限要求远远低于对数据库的查询要求,因此对于记录很多且频繁查询的数据表,必须建立索引。

n 大多数数据库为主键字段自动创建索引,注意为外键创建索引。

n 不要索引大字段,这样作会让索引占用太多的存储空间。

n 尽量不要索引频繁编辑的小型表。

n identify字段不要作为表的主键与其它表关联,这将会影响到该表的数据迁移。如果考虑支持多数据库,建议主键采用程序生成的唯一值。

n 如果一个大型表需要频繁的做insert/delete/update操作,同时也需要做高并发量的查询,那么建议根据数据的访问频度对表作拆分,而后建立索引。

过程与函数

数据库厂商为了凸现自身的优势,都提供了丰富且个性化的过程与函数。

为了提升产品的伸缩性和数据无关性,请不要使用与特定数据库相关的过程与函数,也不推荐采用Store Procedure,建议使用应用服务器的中间层业务对象。

字段/域的定义

n 尽量避免使用Blob,如果一定要用,请不要索引blob,并且不要定义多个blob。

n 不要使用日期字段,改用字符串char(19)替代,如:2008-12-09 12:22:08。

n 对于确定长度的串,请固定字段类型的长度,如char(80),不要采用varchar。

n 对于值类型字段,请使用对应的数据库值类型,而不要用字符串。

三、Com和.Net互操作规范

.NET 技术已经成为微软平台的主流,但是在Win32时代开发了很多COM、DCOM组件,由于在开发COM组件时投入了大量的人力、财力,如何在.NET环境下重用这些COM组件就显得更有意义。

.NET支持运行时通过COM、COM+、本地WinAPI调用与未托管代码的双向互操作性,要实现互操作性,必须首先引入.NET Framework的 System.Runtime.InteropServices命名空间。

C#的语法为:

using System.Runtime.InteropServices;

1.NET访问API

.NET允许C#访问未托管的DLL的函数。如要调用Windows User32.dll的MessageBox函数:

int MessageBox(HWND hwnd,LPCTSTR lpText, LPCTSTR lpCaption,UINT uType)

可以声明一个具有DLLImport属性的static extern方法:

using System.Runtime.InteropServices;

[DllImport(“user32.dll”)]

static ertern int MessageBox(int hwnd,string text,string caption,int type);

然后在代码里面直接调用就可以了。这里要注意在调用返回字符串的API中使用StringBuilder对象。

2.NET访问COM组件

.NET调用COM组件比较容易,只要使用tlbimp.exe产生COM的装配形式的WarpClass,然后在.NET项目中调用即可。

注意COM的类型信息通过Type Library文件描述,.NET装配件是自描述的。Tlbimp的作用是从COM组件及其类型信息中产生自描述的装配件。

1.编写Com组件

编译生成一个ComAccount.dll。

2. 产生.NET可访问的包装类(assembly),使用TlbImp.exe产生.NET装配件。

TlbImp /out:NetAccount.dll ComAccount.dll

3.在.NET代码中访问

.NET代码只需引用NetAccount.dll,就可以像访问.NET的装配件一样访问COM组件。

四、异常处理

异常处理的原则

n

转载于:https://www.cnblogs.com/wghao/archive/2007/03/19/679447.html

.Net平台开发的技术规范与实践精华总结 (转)相关推荐

  1. 20189208 2018-2019-2 《移动平台开发实践》分析小组项目代码

    20189208 2018-2019-2 <移动平台开发实践>分析小组项目代码 一.代码的组成部分 app: manifests AndroidManifest.xml java com. ...

  2. 20189208杨晨曦《移动平台开发实践》第9周学习总结

    <移动平台开发实践>第9周学习总结 教材学习内容总结 课堂笔记-正则表达式 ab+:a+一个以上的b *:0次或多次 普通字符:字母数字下划线 \d:数字0-9 \w:字母数字下划线 \s ...

  3. 《微信公众平台开发最佳实践》——第3章 基 础 接 口 3.1 接收用户消息

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第3章,第3.1节,作者:方倍工作室,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第3章 基 础 ...

  4. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第3章,第3.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  5. 《微信公众平台开发最佳实践》——2.4 本章小结

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第2章,第2.4节,作者:方倍工作室,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.4 本章小 ...

  6. 《微信公众平台开发最佳实践》——2.1 新浪SAE应用

    本节书摘来自华章出版社<微信公众平台开发最佳实践>一 书中的第2章,第2.1节,作者李骏 边思,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.1 新浪SA ...

  7. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.2 微信公众账号注册...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第1章,第1.2节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  8. 微信公众平台开发最佳实践(第2版)

    <微信公众平台开发最佳实践 第2版> 微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信 ...

  9. 微信公众平台开发最佳实践

    <微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口 ...

最新文章

  1. 阿里巴巴发布AI养蜂系统
  2. C语言中的sizeof中的数组和指针
  3. 可变和不可变的数据类型
  4. NetBeans 时事通讯(刊号 # 74 - Sep 30, 2009)
  5. CentOS7学习笔记--PHP环境安装
  6. Ubuntu/Linux下7款轻量级编辑器推荐
  7. TOGAF ADM指导
  8. linux测试硬盘速度命令,如何测试Linux磁盘的读写速度
  9. 自组网 AODV路由协议 篇1
  10. jpg转bmp c语言 linux,C语言实现BMP转换JPG的方法
  11. 时间管理——34枚金币
  12. c语言解三色旗问题加注释,三色旗问题(Three
  13. xbox one驱动下载_如何从手机将游戏下载到Xbox One
  14. 基于Python + Django + mysql的协同推荐算法的电影推荐系统
  15. h5单页,微信浏览器唤醒APP
  16. 微信小程序实现列表及tab标签
  17. 【前端学习】Day-16 JS基础、循环、函数、数组、字符串、字典
  18. tortoise-orm连接多个数据库
  19. 您不知道Android的ES File Explorer可以做的19件事
  20. 程序员从复杂代码中找BUG的5种方法,你用过几个?

热门文章

  1. linux 读写时间变长,linux时钟变慢的原因分析【转】
  2. nginx 和php连接数,nginx限制ip连接数和带宽
  3. Live Source Address 2019最新的电视广播包_Arturia MiniLab MkII迷你MIDI键盘2019年换新装:反色纯黑版...
  4. Linux下串口编程基础
  5. 每天一道LeetCode-----有效回文串
  6. Objecttive-C 创建多线程
  7. fatal error C1070: mismatched wabtags.h
  8. windows下 VScode+CMake+Linux远程调试
  9. kafka 出现Java heap space的解决方法
  10. 算法总结之编码(C++)