命名规范

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)。

总之,对于方法的命名要尽可能地简洁,凡是修饰性地东西要么写在参数签名中、要么写在返回值签名中。

 

以上是关于命名规范的主要内容,如果未能解决你的问题,请参考以下文章

JAVABEAN命名规范

谁有C#的命名规范

Java建包命名规范是啥?

公司用的 MySQL 团队开发规范,非常详细,建议收藏!

公司用的 MySQL 团队开发规范,非常详细,建议收藏!

求Java项目名的命名规范!