.net程序员写业务代码需要注意的地方
代码规范要求
1、命名空间规范:dao层的impl实现和接口采用一样的命名空间,到对应文件夹层;
IxxDaoContext与其实现类采用顶级命名空间。
2、TableEntity文件夹:所有的实体放到各自model的TableEntity文件夹中,类名以Entity结尾。
3、InputModel文件夹:api接口所有的输入类,类名以InputModel结尾。
4、OutputModel文件夹:api接口所有的输出类,类名以ResultModel结尾。
5、控制层输入类的命名规范:搜索的输入类:尽量命名为searchModel,单个参数的命名按照文档,其他类参数尽量为input或者inputModel。
6、控制层方法参数标识:单个参数的前面必须加上【[FromBody]】标识。
7、参数命名大小写规范:方法参数和变量都采用首字母小写,驼峰的命名方式,例如searchModel。
8、Api无需数据库查询的参数校验:放在控制器层(WebAPI)去检验.
9、参数类封装:一般方法参数超过5个以上,就用类来装载参数.
10、方法参数顺序:一般按照 int \ string \decimal \ class \ List \ 其他如 dictionary 来排序.
11、方法返回多个参数:尽量不要用 ref out 这些按值引用按地址引用,要么用类来接收参数返回,要么用Tuple 来接收多个参数.
12、代码共用:controller里面凡是相同输入参数的都要做到代码共用.service等其他业务层也需要考虑代码共用问题.
13、类文件中代码排序:字段、属性、构造方法、public方法、private or static 方法.
14、空行显示:所有的实体或模型类,属性与属性之间都是要空一行
15、变量格式统一:方法内部变量定义要么都是var,要么都是具体类型.
16、变量头部显示:方法内部,一般要求变量定义放在方法内部开头.
17、代码格式:代码开头tab键空格.
18、复杂的方法步骤清晰加注释:复杂的方法,采用步骤1、2、3这样标明每步的逻辑作用.
19、Nuget包的引用路径注意:
19.1、原所在的解决方案更新引用:datamodel类|定时任务类|CacheExtension类|HttpClientExtension等公共类在各自原本所在的解决方中更新引用。
19.2、当前解决方案更新引用:api\service\dao层的直接在当前解决方案下更新引用即可。
20、方法与方法之间需要空一行,接口中成员定义之间需要空一行,方法内部,每个小块逻辑需要空一行
21、凡是if一定要用大括号括起来,简单的if可以在一行代码里面完成
22、方法顶部字段定义,按照一行代码长度,短的在上面,长的下面,不需要加访问修饰符
23、方法注释里面的参数名称以及个数要与方法形参名称个数一样
24、类定义,严禁类名小写字母开头,小写字母开头的限形参,变量名,字段
25、所有List<T>一旦实例化或ToList之后,在后续判断中,不要用null来判断,只用count属性来判断即可
26、在程序逻辑中,调用下一个方法需要依赖当前逻辑传递的参数,则在当前逻辑调用方法处做参数判断
27、数据库连接资源相当宝贵,不要在不需要打开数据库链接的位置开启链接
28、后端在接收前端参数做类型转换时,不能直接用convert.toxxx,而需要用"数据类型.TryParse()"方法
29、service层涉及到数据库写操作的,需要启用事务
写代码之前需要注意的事项
1、是否已经吃透需求,吃透需求,能否用图画出流程
2、是否熟知任务对应那几张表,每个表里面的字段各代表什么意思
3、是否能将任务对应的查询,先在mysql编辑器里面用sql语句写出来,知道数据流向是怎样的
4、接上18,能都将每个大概的步骤概要写出来
写代码中需要注意事项
1、慎用select * ,按需查询,orm翻译出的语句怎么查看可以参考https://www.cnblogs.com/wucj/p/7152020.html
2、关联查询之前尽可能缩小关联表的查询数据范围
3、关联查询on的条件尽量落在主键上面,where 条件尽量落在主键或索引上面,where条件慎用contains方法
4、linq代码写查询语句尽量不要用any方法
5、判断是否存在,不要先where再count,直接用count扩展方法
6、linq代码写查询,需要注意,一旦tolist,那么就执行了数据库查询;按常理,一个大的查询中一般只会有一个tolist
7、分页查询,不要使用where条件进行过滤;一定是先过滤,最后进行分页
8、关联查询一般超过5个表关联,那么就要考虑逻辑是否需要进行拆分
9、linq代码中,除特殊情况,不需要进行lambda 表达式重新构造与编译,这种情况一般用在动态构建查询条件处
10、firstordefault方法,一定要做空判断;所有的where或count要做 count>0判断
11、代码中涉及到先where后firstordefault的地方,直接用firstordefault扩展方法即可
.net程序员写业务代码需要注意的地方的更多相关文章
- 朱晔的互联网架构实践心得S2E2:写业务代码最容易掉的10种坑
我承认,本文的标题有一点标题党,特别是写业务代码,大家因为没有足够重视一些细节最容易调的坑(侧重Java,当然,本文说的这些点很多是不限制于语言的). 1.客户端的使用 我们在使用Redis.Elas ...
- 程序员写 2000 行 if else?领导:这个锅我不背
前言 知乎上有小伙伴提了这么一个问题,如何看待陕西省普通话水平测试成绩查询系统?查询系统前端代码就直接给出了身份账号,姓名,证书编号,如果信息是真的,就泄露了这么多考生的信息,白给那种.为什么会发生这 ...
- CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》
[程序人生]天天写业务代码的那些年,我们是怎样成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboo ...
- golang写业务代码,用全局函数还是成员函数
在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...
- 出错的方法有可能是JDK,也可能是程序员写的程序,无论谁写的,抛出一定用throw
应对未检查异常就是养成良好的检查习惯. 已检查异常是不可避免的,对于已检查异常必须实现定义好应对的方法. 已检查异常肯定跨越出了虚拟机的范围.(比如“未找到文件”) 如何处理已检查异常(对于所有的已检 ...
- 我为什么鼓励程序员写blog
工程师该怎样才能突破自己的能力瓶颈?写 blog! 工程师该怎样精进自己在职涯上所需要的能力?写 blog! 工程师该怎样才能保持学习与成长的动能?写 blog! 工程师该怎样才能证明自己的潜力与特质 ...
- 程序员写的东西出了bug,造成了损失谁来承担?
这是个持续多年的话题了,很多大公司,尤其是牛逼的独立分包公司(开发公司)都会有代码审核和严格QA程序,一般的公司就很难说咯,在法律上目前还没有完全支持处罚程序员bug经济损失的判例(国内如此),国外也 ...
- java程序员--小心你代码中的内存泄漏
当你从c&c++转到一门具有垃圾回收功能的语言时,程序员的工作就会变得更加容易,因为你用完对象,他们会被自动回收,但是,java程序员真的不需要考虑内存泄露吗? 其实不然 1.举个例子-看你能 ...
- 想要薪资20-30K,Python程序员认真敲代码就够了!
在这个年代,互联网的飞速壮大大家有目共睹,除了表露出的公共受益,其中计算机编程者也是做出了巨大的贡献,即使外国编程语言仍旧属于领导者,但是在互联网的壮大下,我们这是"地球村",国内 ...
随机推荐
- Hadoop生态圈-使用phoenix的API进行JDBC编程
Hadoop生态圈-使用phoenix的API进行JDBC编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- UIScrollView原理
我是Mike Ash的Let’s Build…系列文章的忠实粉丝,在这一系列文章中他从头设计Cocoa的控件来解释他们的工作原理.在这里我要做一点类似的事情,用几行代码来实现我自己的滚动试图.不过首先 ...
- MYSQL 在当前时间加上或减去一个时间段
update user set time1=now(),time2=date_add(NOW(), interval 1 MONTH) where id=1; date_add() 增加date_su ...
- Java并发编程原理与实战十八:读写锁
ReadWriteLock也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个资源可以被多个线程同时读,或者被一个线程写,但是不能同时存在读和写线程. 基本规则: 读读不互斥 ...
- async-lock模块理解
在Appium1.7.1里集成了一个同步模块async-lock用来支持多会话功能. 只能说就算是以单线程高并发闻名的I/O密集型Nodejs也不得不扩展额外的同步块方法,或者说,在现有的计算机体系结 ...
- 关于安装在win10上的oracle10g 兼容性问题
首先在安装过程中会出现一次报错,在安装的时候 安装好了以后,准备敲击命令如果出现闪退,即是兼容性问题,下面继续设置兼容性问题 然后右键----属性----兼容性,勾上以兼容性运行即可
- Postgresql获取所有schema
Postgresql 连接方式_连接五要素_psql: https://blog.csdn.net/u011402596/article/details/38510547 postgresql的sho ...
- 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序
[题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...
- Anaconda+django写出第一个web app(一)
在安装好Anaconda和django之后,我们就可以开始创建自己的第一个Web app,那么首先创建一个空文件夹,之后创建的文件都在这个文件夹内. 启动命令行进入此文件夹内,可以先通过如下命令查看一 ...
- 27、增强for循环
增强for循环 使用增强for循环可以简化数组和Collection集合的遍历,格式: for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素 } 例: ...