命名规范
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了命名规范相关的知识,希望对你有一定的参考价值。
1.模型(vM + eM)
模型分为视图模型vM和实体模型eM。实体模型eM与数据库实体对应,两者名称完全一致;与数据比较迫切的视图模型vM名称基本与实体模型eM保持一致,与业务比较迫切的视图模型则自行定义名称。当vM和eM类名一致时,使用所属“子名称空间”来区分,例如ViewModels.Product和Models.Product。
2.视图
列表视图文件名为Index(单数),列表项详情视图文件名为Detail(单数)[新增和编辑共用Detail视图]。
3.控制器
控制器命名遵循“实体名+Controller”的形式,这里的实体名一般对应于数据库实体名。控制器中主要有三种public Action和若干private Method,分别是针对列表视图的Index(单数)(getAction),针对详情视图的Detail(单数)(getAction/postAction),针对数据接口的XxData(jsonAction),以及填充vM视图模型相关的私有方法。
4.数据库表
E、R表名均用单数表示,例如实体表User(用户)、Product(产品)、Order(订单),关系表OrderDetail(订单详情[注:Order和Detail均为单数])。
主键用ID命名,外键用表名+ID命名。
5.类、接口
类和接口均用单数表示,例如User、IUser,其中I是接口的特定前缀。
类和接口中不能出现动词或动名词,只能使用名词或名词的组合形式,例如Order、OrderDetail、IOrder、IOrderDetail。
每个名词和特定前缀首字母大写。
6.对象
对象用单数或复数表示,例如user、orderDetail、products。
对象名中不能出现动词或动名词,只能是名词或名词的组合形式。
第一个名词首字母小写。
对象名中不携带类型信息,比如下面的情况:
IList<Product> productList = new List<Prodoct>{} //不允许
String nameString = new String{} //不允许
IList<Product> products = new LIst<Product>{} //允许
String name = new String{} //允许
对象名中的类型信息其实是种冗余,我们关心的是现实世界中任何对象之间的交互过程,为什么还需要在对象进行交互时人为地贴上类型标签呢?不过事情也不是那么地绝对,我们有时会不得不面对使用诸如String str1,str2,str3、Array arr1,arr2,arr3来存储数据的情况,有时这么干反而显得更加快捷,那么恭喜你,你在一定程度上已经在进行“面向抽象”编程。
当在某一个方法中需要多个同一类型的相似对象,比如同一个String类型的name对象时,可以命名成name1、name2、name3...[注:数字从1开始]。不过最好还是根据这种类型的对象在实际需求中的具体用途来命名,例如当程序中不得不使用String类型的表示名称用途的多个name对象时,我们可以把name2改成MiddleName、name3改成LastName,回过头再把最开始的name改成FirstName。
7.方法
方法遵循动词或动词+名词的形式命名,例如Get()、GetUser()、GetProducts()。
方法名中携带参数信息是增加在冗余,因为参数签名中已经有很详细的说明,去掉这些冗余的说明,我们就可以看到漂亮而简洁的方法重载,比如下面的情况:
GetUserByID(Guid ID) //不允许
GetUserByIDAndStatus(Guid id, bool isDeleted) //不允许
GetUser(Guid id) //允许
GetUser(Guid id, bool isDeleted) //允许
方法名不要携带返回值类型信息,因为返回值签名中已经说明返回值类型,不必再重复冗余信息,比如下面的情况:
IList<Product> GetProductList() //不允许
IList<Product> GetProducts() //允许
操作当前集合元素的方法用动词命名,例如IList<T>.Add(T item);操作当前集合之外的元素的方法用动词+名词命名,例如IPerson.DriveVehicle(ICar car);当然,事情也不是那么地绝对,在现实世界中Car是Vehicle的子集,因此我们可以将IPerson.DriveVehicle(ICar car)改成更加抽象的形式IPerson.Drive(IVehicle vehicle)。
总之,对于方法的命名要尽可能地简洁,凡是修饰性地东西要么写在参数签名中、要么写在返回值签名中。
以上是关于命名规范的主要内容,如果未能解决你的问题,请参考以下文章