项目代码优化、命名规范与代码自动生成

目录

前端接口代码规范(约定)

后端接口代码规范

自动代码生成工具

生成前后端的Controller基本代码

生成带注释和注解的出入参数类

生成前后端接口方法代码



观察asp.net  webapi2+angularjs1.8+bootstrap的项目代码,

因为赶进度的原因,项目中出现大量的重复代码和各不相同的命名规范,不复杂的业务js/C#的controller文件动辄上千行代码,难以维护。

这里试图提出前后端接口相关的代码规范

并根据代码规范编写自动生成代码工具(简单业务全部生成,复杂业务生成与业务无关的接口代码),对今后的模块或者下一个项目起到辅助开发的作用

同时简化前后端代码,让程序员能更加关注业务相关的代码。

以下规范不会影响原有代码(除非按照规范进行代码重构)!可以只在新功能中应用。

前端接口代码规范(约定)

  1. 所有枚举类提取出来,每个模块在前端Scripts文件夹下,根据模块检查建立Constant文件来存储:使用angularjs的Constant
    1. Scripts中的文件命名不要以a开头!注意!以下都一样!
    2. 命名方式:模块简称+Constant    文件使用Pascal命名,常量使用Camel命名

    3. 举例:DentalManagement模块的枚举类,使用DmConstant.js来管理,定义dmConstant该文件存在,请参考

  2. 将js业务代码和接口地址解耦,目前后端已经出现重复接口的情况,如果前端再出现,一个需求更改将需要更改太多代码
    1. 每个模块在Scripts文件夹下,建立接口管理的Service
    2. 命名方式:模块简称+ApiService  文件使用Pascal命名,服务使用Camel命名
    3. 举例:DentalManagement模块的接口,使用DmApiService.js来管理,定义dmApiService(该文件存在,请参考
    4. 注意:Post和Get接口稍微有些代码区别
  3. 列名控制组件目前已经提取了一部分出来,已减少js非业务代码量(还未完全提取)
    1. Component文件夹存放公共组件的html代码,Scripts下存放公共组件的js代码
    2. 命名方式:统一采用Camel命名 js文件以Component结尾
    3. 定义命名举例:tableColumn.html    tableColumnComponent.js(该文件存在,请参考
    4. 使用方式举例:<table-column table-list="tempTableList"></table-column>(请参考ComplaintManagement.js
  4. 以上Constant和Service的实现和引用,都可以参考ComplaintManagement.js+ComplaintManagement.cshtml
  5. Service文件都要以Service结尾
  6. 因为C#中的属性都是Pascal命名,所以js这边只好也Pascal方式给属性命名。。。
  7. 经重构一个Controller的JS文件测试,根据以上约定规则简化后,原代码700+行且无注释,新代码300+行且有注释

后端接口代码规范

  1. 所有接口格式为   /api/模块名称/操作+参数类名    (举例:/api/System/SaveUsers   /api/DentalManagement/PageEmployees)   
    1. 备注1:List和Page也放在类名前
    2. 备注2:类名和数据库表名一致(今后考虑数据库表名不再使用复数?),如果并非数据库类自行定义英文类名
    3. 备注3:模块和操作+类名都使用Pascal命名方式
  2. 所有输出参数,一定要继承CommonResponse类,这样约定使接口更加规范,方便今后将接口开放给其他平台or合作伙伴,同时方便代码生成。
  3. 能用注解进行参数验证的属性,都使用注解进行参数验证,尽量减少接口代码量,争取将单个接口方法的代码控制在3页以内。
    1. 有自定义注解需求请提出,由指定人员进行封装,因为注解可复用性很高,并且可以应用多个web项目
    2. 较为复杂的接口代码页数较多也没办法,但是还是尽量控制代码数量
  4. if判断+一行执行代码的,通通不用换行大括号,直接一行完成。嵌套的反复判断考虑使用if反判断+return,长判断条件反复用到考虑提取共有方法。很长的判断条件考虑提出公用!(请参考重构代码相关书籍)
  5. 一定要写注释!复杂业务请先写注释(例如:1、获取XXX信息;2、获取XXX信息;3、进行XXX对比;4、修改XXX数据)。接口上的简单注释自动生成代码工具会帮助生成。
  6. Get类型接口一律使用FromUri地址传参,Post类型接口一律使用FromBody对象传参
  7. 所有接口全部用Task async await 异步编程(接口中用的方法也是)
  8. 换行:
    1. 多个判断条件&&或者||之前换行   多个判断条件多换行方便代码阅读
    2. 方法换行,在 之前换行(即点号和方法一起换行)    长LINQ方法语句在每个方法前换行方便代码阅读
    3. 一行超过150个字符请换行,
  9. 不用拼音,用英文单词组合命名,除非名称实在太长,不然尽量不用简称(除非是先约定好的模块的简称)
  10. 命名空间、类名、属性、方法、枚举类、常量都是用Pascal命名,参数使用Camel命名
  11. 不在代码中直接对比or复制字符串,(反例 if (state == "上班") ),字符串要么使用枚举类要么使用常量类来管理!(小系统单独常量类,否则每个区分系统常量类和模块常量类)
  12. 加TODO 在后面标记 姓名,代表这是谁的TODO任务

自动代码生成工具

根据以上的前后端规范+约定,目前制作了简单的MVC项目来自动生成代码(面向对象编程,抽象了较多类,容易修改和扩展)

公司的小伙伴可以通过我的 IP+端口号 来访问我的生成工具

生成前后端的Controller基本代码

代码自带中文注释+日期,方便维护

生成后的代码都在textarea里面,方便直接copy到ide中,ctrl+k,d格式化一下即可(类名,注入的服务、常量名等请自行修改)

生成带注释和注解的出入参数类

这里参数都会带上后缀名称,保证出入参数和数据库EF类名不一样!

classType对应的每种参数生成的格式都不一样,需要约定,具体什么情况使用哪一种参数可以开会具体讨论

生成前后端接口方法代码

每种方法需要约定,只有满足约定的开发最适合使用本程序。

还是左边是后端代码,右边是前端代码

最后,该生成程序肯定有不足的地方,需要在实际运用中不断完善~   如果实际运用,需要各位同学们的支持,并开个小会做简单规范说明和使用讲解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值