.NET代码设计简单规范
以下转载于:http://www.it28.cn/ASPNET/825095.html
下面这个规范是我为朋友写的几点建议,写的很范,作为BLOG,愿与大家一起分享。只给出部分设计规范样例,关于.NET编程的详细规范、设计请参考相关书籍。
1、命名规范
1.1 命名空间命名,一般命名为”公司简称+产品名称+程序包”的形式,如ARSC.EngineMap.Geometry、SharpMap.Framework、SharpMap.Controls、GoogleMap.Downloader、GoogleMap.App等,其长度一般要求不能过于太长。程序集的名称可以和命名空间保持一直。注意可以在不同的.DLL里面定义相同的命名空间。
1.2 变量命名,如果是局部变量、函数接口变量,主要以易于表达概念的英语进行命名。单词第一个字符必须小写,如果是组合单词,第二个单词应该大写,如firstName、computerName。
Public void ConcactName (string firstName,string lastName);
对于成员变量需要定义以”_”开头,如:
Public class Person
{
Private string _firstName;
Private string _lastName;
Private int _age;
}
1.3 类命名,类主要由名词性短语命名,类的第一个单词都是大写,做到见名知意,如Person、Computer、ExtensionManager、PrintManager、FormatTransform、HttpDownloader、TcpDownloader、CommandPool、XmlHelper、XmlUtility、ProductFinder、ProductRepository、CourseCatalog等。注意的是类命名不能加复数形式如Persons表示人的集合,正确命名应该为PersonCollection。
1.4 接口命名,接口命名可以参考类命名规则,但是其需要在命名前加”I”。如ICommandPool、IDownloader、IPrintManager、IProductFinder等。
1.5 方法命名,主要以动名词短语构成,函数主要表达一种计算功能或者任务,因此给函数取一个合适的名字非常重要,如CaculateArea、QueryProduct、CreateBar、ExportView、CanSeek、HasValue、HasChildern等。长名称函数一般用于私有函数中,如CopyProductsToRepositoryFromCache这个函数要比注释好的多。
1.6 代理命名,如提供回调的代理需要加上CallBack后缀:
Public delegate void ProgressNotificationCallBack(int curPos,int totalSize);提供事件原型的代理需要加上EventHandler后缀,如:
Public delegate void CurrentToolChangedEventHandler(object sender,MapToolEventArgs e);
1.7 事件命名,主要是要能够见名知意,如
Public event CurrentToolChangedEventHandler CurrentToolChanged;
Public event EventHandler CurrentLayerChanged;
1.8 属性命名,提供私有成员的访问控制如
Public string Name
{
Get{return _name;}
Set
{
If(value==null)
Throw new ArgumentNullException(“Name can’t be set null.”);
_name=value;
}
}
2、成员访问控制
成员访问控制主要由internal(在该DLL内可以访问)、protected(子类可以访问)、private(私有访问)、public(访问不受控制)和Protected internal(在其子类或者该DLL内部可以访问),我们将所有成员变量都设计成私有,如果需要公开该数据,需要提供属性。如:
Public class Person
{
Private string _name;
Public string Name
{
Get{return _name;}
Set {_name=value;}
}
}
3、XML代码注释
对于公开函数接口必须提供代码XML注释,便于形成开发文档。私有函数可适当加以注释。详细请参考MSDN。
/// <summary>
/// 命令池对象,主要用于命令按钮的注册和反注册。
/// </summary>
///<remarks>
///每一个命令池都和一个<seealso cref="ICommandBars"/>绑定在一起,
///如果想将按钮添加到<seealso cref="ICommandBars"/>上,首先必须在命令池中注册该按钮项目。
///</remarks>
public interface ICommandPool
{
/// <summary>
/// 获取命令池中工具条项目。
/// </summary>
/// <param name="uid">命令按钮全局唯一标识符。</param>
/// <returns>返回工具条项目。</returns>
ICommandItem GetCommandItem(GuidClass uid);
/// <summary>
/// 获取和设置应用程序钩子其为<seealso cref="Jackey.Framework.IApplication"/>。
/// </summary>
object Hook { get; set; }
/// <summary>
/// 获取和设置COM对象钩子。该钩子只需要在COM应用程序中进行设置。
/// </summary>
object COMHookObject { get;set;}
/// <summary>
/// 获取和设置命令按钮单击回调函数。
/// </summary>
ButtonClickCallBack ButtonClick { get;set;}
/// <summary>
/// 利用指定全局唯一标识符注册命令按钮。
/// </summary>
/// <param name="cmd">命令对象。</param>
/// <param name="guid">命令按钮全局唯一标识符。</param>
更多资料转载中:http://www.it28.cn/ASPNET/825095.html
.NET代码设计简单规范的更多相关文章
- 代码规范、API设计等规范
一份整理好了的规范文档,node后端开发用到 "规范是个好东西..." - 鲁迅 以下规范仅作为参考 1.代码规范 命名 尽量保证命名更加语义化 文件命名采用下划线命名法 // g ...
- 浅谈PHP代码设计结构
浅谈PHP代码设计结构 您的评价: 还行 收藏该经验 coding多年,各种代码日夜相伴,如何跟代码友好的相处,不光成为职业生涯的一种回应,也是编写者功力的直接显露. 如何看 ...
- Discuz代码研究-编码规范
Discuz中的编码规范很值得PHP开发人员借鉴.里面既介绍了编码时代码标记,注释,书写规则,命名原则等方面基础的内容,对代码的安全性,性能,兼容性,代码重用,数据库设计,数据库性能及优化作了阐述,这 ...
- Delphi代码创建形式规范 1.0
Delphi代码创建形式规范 1.0 本规范的目的:给自己的代码一个统一而标准的外观,增强 可读性,可理解性,可维护性 本规范的原则:名称反映含义,形式反映结构 1.单元风格 ...
- 拿什么拯救你,我的代码--c#编码规范实战篇
此文为译文,原文地址请点击. 本文通过重构一个垃圾代码,阐述了如何写出优秀的代码.开发人员及代码审核人员需按照此规范开发和审核代码.此规范以C#为例,JAVA的童鞋一并参考,C++的童鞋自行脑补吧. ...
- 拿什么拯救你,我的代码--c#编码规范实战篇 (转)
http://www.cnblogs.com/lazio10000/p/5413439.html 此文为译文,原文地址请点击. 本文通过重构一个垃圾代码,阐述了如何写出优秀的代码.开发人员及代码审核人 ...
- WPF换肤之四:界面设计和代码设计分离
原文:WPF换肤之四:界面设计和代码设计分离 说起WPF来,除了总所周知的图形处理核心的变化外,和Winform比起来,还有一个巨大的变革,那就是真正意义上做到了界面设计和代码设计的分离.这样可以让美 ...
- 设计简单算法体验Vivado HLS的使用
前言 本文主要讲解了使用Vivado HLS设计简单C语言的二选一选择器算法的硬件HLS开发的全流程,包括工程创建-算法验证和仿真-算法综合-RTL仿真-IP封装等步骤. 参考网站: http://b ...
- (2.15)Mysql之SQL基础——开发设计最佳规范
(2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...
随机推荐
- Android开发工程师文集-Android知识点讲解
前言 大家好,给大家带来Android开发工程师文集-Android知识点讲解的概述,希望你们喜欢 WebView讲解 一般通过Intent调用系统的浏览器: Uri uri = Uri.parse( ...
- kubernetes集群搭建(7):常见问题及处理
尤其在创建pod的时候,会遇见各类问题,请通过下列命令来查看错误详情 kubectl describe pod xxxxxx 1.问题现象:镜像始终获取不下来 解决办法:为docker设置镜像源 [r ...
- MySQL 组提交(group commit)
目录 前言 改进 原理 实现 参数 注意 前言 操作系统使用页面缓存来填补内存和磁盘访问的差距 对磁盘文件的写入会先写入道页面缓存中 由操作系统来决定何时将修改过的脏页刷新到磁盘 确保修改已经持久化到 ...
- python ---解决高并发超卖问题
使用redis 解决美多商城超卖的问题 import redis r = redis.Redis(host='localhost', port=6379) #定义过载 def limit_handle ...
- 30-socketserver类
SocketServer模块简化了编写网络服务程序的任务.同时SocketServer模块也是Python标准库中很多服务器框架的基础. socketserver模块可以简化网络服务器的编写,Pyth ...
- spring boot 集成 thymeleaf
例如meta标签,低版本标签必须要闭合,高版本不用这么严格. pom文件引入高版本jar包如下,propertis里添加:
- Python——破解极验滑动验证码
极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...
- 顺序栈,链栈,队列java实现
顺序栈 /** * 顺序栈 * */ public class SqStack { //栈的大小 private int maxSize; //栈顶指针 private int top; privat ...
- C# 获取媒体文件播放时长
引用: Interop.Shell32.dll 方法: /// <summary> /// 获取媒体文件播放时长 /// </summary> /// <param na ...
- Linux编程 7 (实时监测进程 top, 结束进程kill,killall)
一. 实时监测进程 top 在一篇里讲到ps命令在收集进程信息时非常有用,但它只能显示某个特定时间点的信息.想要观察那些频繁换进换出的内存进程趋势,用top命令是合适的.使用top命令如下图所示: 在 ...