- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章遵守这些原则让你开发效率提高一倍(收藏)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1、概述 。
在园子里面有很多关于各种技术细节的研究文章,都是比较牛逼的框架研究;但是一直没有看到关于怎么样提高开发效率的文章,大多提高开发效率的文章都是关于自动化等方面的辅助工具类型的,而不是开发中的一些小技巧;今天从编码规范、编码技巧、开发思想、设计模式等各方面的经验来分享如何提高开发效率.
2、实际场景 。
在这个前后端分离盛行的开发年代,分工比较明确,开发者分前端开发者和后端开发者,然而感到欣慰的是.net 开发者大多是担任着全栈开发的职责,有经验的开发者都是从前端走过来的,说白了前端业务代码对后端开发者来说那都不是事。 前后端分离前:几年前前后端还未分离的时候,各种前端框架还未流行的时候,开发者的效率算是比较低下,后端干前端的活,甚至前端和后端夹杂工作,导致了工作开发容易乱,需要相互依赖,不能完全并行工作,这导致了开发效率底的一个极大的原因,同时开发出来的东西体验也是很差。 前后端分离:职责分明,后端专注后端的开发,前端专注前端的开发;相互依赖关系很弱,后端可以先定义开发接口,前端页面及mock 接口对接,最后联调测试时间前后端打通过;前后端完全可以并行开发,开发周期缩短一倍时间;不过这也就会导致了一个致命的问题,大多开发者只管自己的那一部分,不会以全局考虑,导致的一个问题就是联调测试时间代价太大,遇到问题相互甩锅.
前后端都存在的问题,会再联调测试时间全部暴漏出来,这也是为什么联调测试时间会花费那么长时间,甚至晚上加班加点再处理问题的原因,总结如下:
3、空异常 。
1.1 不可信原则 。
作为开发者,你都可以把自己作为方法调用者的第三方,不需要去关注方法的实现,只需要关注调用方法我应该得到什么结果;然而作为调用者第三方,你都需要认为实现者的方法都是不可信状态,只需要秉承该原则,基本上你就跟空异常没有缘分了. 。
1.2 ?. (null条件运算符) 。
先来看一下以下代码:
1
2
3
4
5
6
7
8
9
10
11
|
[HttpGet]
public
async Task<DataResponse<bool>> GetTest()
{
var list = GetList();
//获取List 列表
if
(list?.Count <=
0
)
{
return
DataResponse<bool>.AsError(
"没有获取到数据"
);
}
//TODO 更新操作
return
DataResponse<bool>.AsSuccess(
true
);
}
|
上面代码很多人可能会这么写,实际上是存在问题的list?.Count <=0 实际上在list 为空的时候就成了null<=0 判断了,则也是false,不符合预期结果,正确的代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
[HttpGet]
public
async Task<DataResponse<bool>> GetTest()
{
var list = GetList();
//获取List 列表
if
((list?.Count??
0
) <=
0
)
{
return
DataResponse<bool>.AsError(
"没有获取到数据"
);
}
//TODO 更新操作
return
DataResponse<bool>.AsSuccess(
true
);
}
|
这里就引用了?? 运算符(空合并运算符) 。
1.3 ?? (空合并运算符) 。
MSDN上面的解释:?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果左操作数不为 null,则此返回左操作数;否则当左操作数为 null,返回右操作数.
1.4 如何远离空异常?
秉承原则:不可信原则,什么是不可信原则呢?你调用方法都任务改方法是不可信的,包括自己写的方法;这在敏捷快速开发中更明显,特别是调用团队中别人开发的微服务api ,你不需要关注方法的实现,只需要关注方法的结果即可,但是也不能太过于相信它;所有的返回结果你都需要判断是否是null 的结果数据,多结合?. 和?? 运算符进行合理的逻辑处理,可以让你的项目从此远离空异常.
2、If else 解套 。
先来看一看比较有趣的网络上的图片 。
2.1 取反原则 。
对于上面的if else 嵌套业务大家是不是经常遇到,看到这种代码会非常的头疼,难于维护,影响开发效率,同时也容易出现bug。 有经验的开发者必定会对上面这段代码进行优化,我的经验是取反原则。 什么是取反原则呢?把不符合的条件先 return 下去,到最后留下符合条件的逻辑,这就是取反原则,一眼看下来就只有一层嵌套,不会存在多层嵌套。 我们来看下我遇到的实际场景代码,源代码大体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
if
(condition)
{
if
(condition1)
{
if
(condition2)
{
if
(condition3)
{
if
(condition4)
{
// do something
}
else
{
// do something
}
}
else
{
// do something
}
}
else
{
// do something
}
}
else
{
// do something
}
}
else
{
// do something
}
|
取反原则优化后的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
if
(!condition)
{
// do someting
return
;
}
if
(!condition1)
{
// do someting
return
;
}
if
(!condition2)
{
// do someting
return
;
}
if
(!condition3)
{
// do someting
return
;
}
if
(!condition4)
{
// do someting
return
;
}
// do someting
|
3、必要的设计模式 。
开发过程中不要一个链路写到底,需要把某块业务先想好,定位明确,该业务是应该属于哪一块,哪一类业务,后续可能会出现哪些方面的业务变动,适当的引入设计模式,那么多的设计模式,总有一个适合你当时开发的场景; 设计模式的选取需要对该模块的作用及定义清晰,多思考,多归类,自然而然心中就有了合适的设计模式的考量.
4、必要的单元测试 。
做到每个方法单元测试,最好是全路径覆盖到每一条分支的单元测试,先从小的方法单元测试,底层的方法单元测试通过后,再通过postman或者其他工具来进行对外API接口层面的测试,做到全路径覆盖的测试,往往开发人员有一个思维就是测试正常的业务流程,异常流程往往一概不考虑测试;然而出问题的都是那些异常的流程,单元测试需要遵守的原则如下:
到此这篇关于遵守这些原则让你开发效率提高一倍的文章就介绍到这了,更多相关提高开发效率内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/jlion/p/13246527.html 。
最后此篇关于遵守这些原则让你开发效率提高一倍(收藏)的文章就讲到这里了,如果你想了解更多关于遵守这些原则让你开发效率提高一倍(收藏)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目录 1.通过多个键值将对象进行排序 2.数据类别 3.列表推导 4.检查对象的内存使用情况 5.查找最频繁出现的值 6.属性包
概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。
1 用户名正则 ? 1
正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了
用来循环容器的标签forEach,查看例子 foreach元素的属性主要有item,index,collection,open,separator,close。 item:集合中元素迭代时
JS的正则表达式 //校验是否全由数字组成 function isDigit(s) { var 
Docker 是一个基于Linux容器(LXC-linux container)的高级容器引擎,基于go语言开发,源代码托管在 Github 上, 遵从Apache2.0协议开源。Doc
整理了一下mysql基础命令,分享一下 ? 1
1、概述 在园子里面有很多关于各种技术细节的研究文章,都是比较牛逼的框架研究;但是一直没有看到关于怎么样提高开发效率的文章,大多提高开发效率的文章都是关于自动化等方面的辅助工具类型的,而不是开发
Python中的三角函数位于math模块内。 引入模块: import math 输出pi: import math print(math.pi) 得:3.141592653589793
网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。 这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,
1、Oracle的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 ?
我想在 Meteor 中设置一个在客户端和服务器之间同步的 session 绑定(bind)值。我认为这应该在 Collection 中完成,因为 Session 在客户端和服务器之间不同步,对吧?不
我想以编程方式将字符串资源添加到可执行文件。仅出于示例目的,假设我正在尝试添加一个名为“String SO”的字符串,它包含“stringVal”的值 如果这对任何人有帮助 - 如果我要通过 VS.n
我是 C# 的新手。在 ASP.NET 3.5 (C# 3.0) 中工作。为了开发有效的代码,我需要熟悉哪些集合类?像 IList,和对应的 IList , List , List够了吗? 非常感谢大
字符串中字符大小写的变换 1. str.lower() //小写 >>> 'SkatE'.lower() 'skate' 2. str.upper() //大写 >>
wtfPython是github上的一个项目,作者收集了一些奇妙的Python代码片段,这些代码的输出结果会和我们想象中的不太一样; 通过探寻产生这种结果的内部原因,可以让我们对Python里的一
1.连接数据库 普通用户连接数据库: conn scott/tiger –(默认的用户名/密码)、conn 即”connection”连接数据库的意思 超级管理员连接: Conn sys/s
通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个
我正在将一个 Swagger 规范文件导入 postman 以创建一个集合,这时,它可以按预期工作,并且该集合是随所有请求和子文件夹一起生成的,很好!但是,在更新api时,我需要更新 postman
我是一名优秀的程序员,十分优秀!