分享,讨论Programming的习惯

 1//写这篇文章的目的主要是和大家分享编程的习惯,如果有不对的欢迎大家支出,如果有更好的习惯方法也请提出来。
 2//当然文章还有许多的疏漏支出欢迎大家补全,真正做到完备!
 3
 4
 5//大小写规范:
 6//命名空间,类,结构体,方法名,属性名,static常量,每个单词首字母大写,接口以I开头,并且首字母大写如IDispose;const常量全部字母大写
 7//字段名每个单词首字母小写
 8
 9//起名规范以及理解:
10//命名空间:公司+项目+包
11//类,属性,字段,结构体:名词或者名词性词组(因为描述的是一类实体或者实体属性或者数据),类代表对事物的抽象,他自身有自己的属性和行为,
12//例如人有自己的名字年龄等信息,同时能够说话,走路。结构体主要是对数据的一种组织。
13//方法,接口:动词或者动词词组(描述的是行为,即CAN-DO)
14
15//字段,方法,属性,类等的名字要充分表达出他们自己的功能,能够让代码阅读者不需要看注释就能够知道她的意思,
16//尽量不要缩写,毕竟无论名字多长编译器会帮助你做转化工作,当然也不要太长。呵呵,过尤不及么!
17//例如:数据库连接sqlConnectionString与mysqlConnectionString表达出他们是连接字符串,sqlConnection与mysqlConnection表达出他们是连接对象
18namespace CodeRule
19{
20    public class TestShow
21    {
22        //错误的习惯,不应该把内部字段暴露给其它对象,一是不符合规范,二是暴露实现细节
23        public string name;
24
25        //正确的习惯
26        private object aobject;
27        /// <summary>
28        /// 正确的方法,字段内部使用,其他对象只能通过属性来访问,不知道具体实现细节。当然如果属性是只有子类可见就应该把Public改为protected
29        /// 如果是只读的就应该把Set去掉,我们不应该把暴露扩大化。
30        /// </summary>

31        private string name;            //    private int justToCompare   该处也返回Name,同样的功能,不同的内部实现,相同的访问方法
32        public string Name              //    public string Name
33        {                               //   {   
34            get return name; }        //       get{return justToCompare.ToString();}
35            set { name = value; }       //       set{justToCompare=Convert.ToInt32(value);}
36        }
                               //    }
37
38        //错误的习惯,既然通过属性可以进行Name的读写了,就不应该再提供方法对其的读写操作;二者可以选择其一,不过C#中主要通过属性,Java用方法的居多。
39        public string GetName()
40        {
41            return name;
42        }

43        public void SetName(string name)
44        {
45            return name = name;
46        }

47
48        //有的参数不能为空哪么就应该检查之,我们假设下面的aobject不能为空,哪么下面的习惯就是错误的,
49        //我们应该先检查aobject在它为空的时候做一些处理,然后再执行其它操作,对于属性也是如此
50        public void SetObject(object aobject)
51        {
52            this.aobject=aobject;
53        }

54    }

55}

56//其它:对于自定义集合类要实现IEnumerable接口,自定义事件以Handler结尾,自定义异常以Exception结尾,
57//要实现IDisposable接口,及时释放资源
希望大家可以共同分享编程的经验习惯,提高水平。谢谢!
posted @ 2008-04-24 11:42 镜涛 阅读(2357) 评论(32)  编辑 收藏 所属分类: .NET

  回复  引用  查看    
#1楼 2008-04-24 11:49 | Inrie(洪晓军)      
类的成员变量和局部变量的命名规范一样,似乎不是很好的做法: )
  回复  引用  查看    
#2楼 [楼主]2008-04-24 12:06 | 镜涛      
@Inrie(洪晓军)
也有人说成员变量要用:_+pascal风格的方法来命名,不过我觉得不太习惯,呵呵,我把它当作局部变量风格。不知有没有什么好方法?
  回复  引用  查看    
#3楼 2008-04-24 12:18 | neoragex2002      
编码风格其实就跟word文档式样一样,无所谓美丑,关键是前后统一、组内统一。即可。成员变量加m_前缀区分亦可,老家伙们都看得懂。
  回复  引用  查看    
#4楼 2008-04-24 12:20 | Tony Zhou      
_name
  回复  引用  查看    
#5楼 [楼主]2008-04-24 12:31 | 镜涛      
@neoragex2002
嗯,关键是统一。规范就是为了统一编码,规范是人订的,可以改,不过用得多了,用得久了就成为标准了。这就跟W3C出标准大家按标准来一样的道理。对比手机硬件和电脑硬件就知道标准的好处了!
  回复  引用  查看    
#6楼 2008-04-24 12:32 | guys [未注册用户]
多写点..让像我一样的新人可以参考一下
  回复  引用  查看    
#7楼 2008-04-24 13:08 | new 维生素C.net()      
这是习惯吗?不同的公司有不同的规范.我觉得这没必要习惯.
像这样的:
public string name;
不叫习惯!

  回复  引用  查看    
#8楼 [楼主]2008-04-24 13:29 | 镜涛      
@new 维生素C.net()
呵呵,是一种命名的规范,或者说风格。public string name;是pascal命名风格,虽然不同的公司有不同的标准,可是公司毕竟是小圈子,对于互联网的广大用户就没公司的约束了。
  回复  引用  查看    
#9楼 2008-04-24 13:34 | 王孟军!      
good
  回复  引用  查看    
#10楼 2008-04-24 13:38 | 李战      
完了,完了。这么看来,俺好多习惯都是错误的哦。

俺比较大大咧咧,人家问我叫啥名字,俺就直接说了:

    public string name;

以后俺得含蓄点,得把名字当个人隐私,然后扭扭捏捏地说:

    public string Name
    {
        get{return name;}
        set{name = value;}
    }

这样的话,俺还真不习惯。

唉,坏习惯怕是改不了了,就这样吧。又不是问美女的芳龄,无须遮遮掩掩。



  回复  引用  查看    
#11楼 2008-04-24 13:38 | 江大鱼      
开始我也喜欢这种格式, 但是后来发现这种命名方式中的字段名容易和方法的参数名同名,所以现在都用m_的格式了
  回复  引用  查看    
#12楼 2008-04-24 13:41 | 生鱼片      
不错
  回复  引用  查看    
#13楼 2008-04-24 14:45 | Yannic Yang      
现在都这么写 public string Name{get; set;}
呵呵
  回复  引用  查看    
#14楼 2008-04-24 16:07 | 任力      
命名规范现在还没有一个统一的标准.
具体到公司里面可能也不同吧?公司内部人员为了更好的合作一般都有一个统一的标准,这个是很需要的
但公司与公司之间可能是不同的。
我们是定义的时候,成员变量就是_+pascal风格的,其它的倒差不多。
  回复  引用  查看    
#15楼 [楼主]2008-04-24 16:25 | 镜涛      
@江大鱼
确实有的地方会有重复,这些还是自定义吧。赫赫,只要自己保持一致就行!
  回复  引用  查看    
#16楼 [楼主]2008-04-24 16:28 | 镜涛      
@Yannic Yang
嗯,3.0的特性用起来还是很方便的,我觉得在这里用3.0不利于说明例子。呵呵
  回复  引用  查看    
#17楼 2008-04-24 16:37 | 初始小花      
路过~~
  回复  引用  查看    
#18楼 2008-04-24 17:27 | Anders Cui      
--引用--------------------------------------------------
镜涛: @new 维生素C.net()
呵呵,是一种命名的规范,或者说风格。public string name;是pascal命名风格,虽然不同的公司有不同的标准,可是公司毕竟是小圈子,对于互联网的广大用户就没公司的约束了。
--------------------------------------------------------

这个应该属于camel命名风格 :)
  回复  引用  查看    
#19楼 2008-04-24 19:14 | 紫色阴影      
项目组内统一就好了,没必要约束成某种,大家都觉得舒服就行

  回复  引用  查看    
#20楼 2008-04-24 21:56 | Angel Lucifer      
貌似Microsoft有个C#编码规范的文档吧。

我比较反感m_variable这样的camel命名方式。.NET的BCL里到处都可以见到这样的命名。我猜这些人大概都是从C++,尤其是VC系转过来的。o(∩_∩)o...

不知道怎么回事,就是心里不舒服,哈哈。
  回复  引用  查看    
#21楼 2008-04-24 22:43 | 土豆网电视剧 [未注册用户]
我还是的多卡看。这些代码提高下自己得了
  回复  引用  查看    
#22楼 2008-04-24 22:45 | 紫色阴影      
我们的项目,测试都是这样命名should_throw_argument_exception_when_xxxx()。很多人也看不惯,但项目组内的人觉得可读直观,就行了
  回复  引用  查看    
#23楼 [楼主]2008-04-24 23:07 | 镜涛      
@Angel Lucifer
恩,有个.NET设计规范。呵呵
  回复  引用  查看    
#24楼 [楼主]2008-04-24 23:09 | 镜涛      
@紫色阴影
呵呵,还是那样。一致就好。
  回复  引用  查看    
#25楼 2008-04-24 23:44 | HappyQQ      
谢谢分享

感觉在哪本C++的编程规范上看到过

非常赞同楼主的观点
相比
public string strHistory来说,

我个人认为
get set 的好处 是,看以下伪码:

private string strhistory
public string StrHistory
{
get{
请输入你查看我个人档案的密码;
if (密码正确)
return strhistory;
else
return "黑客行劲,你的一切记录都已被记录";
}
set{
if (value 包含 “曾经杀人” 或者 一切坏的记录)
{
老兄,我没有那么坏吧,别把我的个人档案写得这么差喽
}
else strhistory= value;
}
}





  回复  引用  查看    
#26楼 [楼主]2008-04-24 23:46 | 镜涛      
@HappyQQ
恩,赞同!我们既然决定要将自己的信息透漏给别人,就需要保证我们给出的信息是有意义的。
  回复  引用  查看    
#27楼 2008-04-25 00:50 | 没有昵称      
字段与属性的区别竟然是大小写。。。
比较危险。

所以我比较习惯在camel格式的字段前面加下划线,虽然输入时不方便了点,不过安全。
  回复  引用  查看    
#28楼 2008-04-25 08:45 | 悍马      
厉害呀。。
  回复  引用  查看    
#29楼 2008-04-25 09:11 | Anthan      
组织性的约定才是有效的
当然首先自己特定时期的风格一定要统一,不然自己都看不懂怎么好意思让别人看呢?
如果是企业内部,可以建议提供个工具来检查
  回复  引用  查看    
#30楼 2008-04-25 11:44 | 留恋星空      
大家继续说下去
  回复  引用  查看    
#31楼 2008-04-25 17:06 | Ylin Rain      
一直坚持pascal+_camel结合的写法
  回复  引用  查看    
#32楼 2008-04-26 11:26 | change [未注册用户]
@李战
封装字段的作用是为了便于对属性的访问权限进行控制,比如有些属性只让read不能wirte的,可以只提供get方法,set就可以不用提供,这样才是目的