遵守这些原则让你开发效率提高一倍

一、概述

在园子里面有很多关于各种技术细节的研究文章,都是比较牛逼的框架研究;但是一直没有看到关于怎么样提高开发效率的文章,大多提高开发效率的文章都是关于自动化等方面的辅助工具类型的,而不是开发中的一些小技巧;今天从编码规范、编码技巧、开发思想、设计模式等各方面的经验来分享如何提高开发效率。

二、实际场景

在这个前后端分离盛行的开发年代,分工比较明确,开发者分前端开发者和后端开发者,然而感到欣慰的是.net 开发者大多是担任着全栈开发的职责,有经验的开发者都是从前端走过来的,说白了前端业务代码对后端开发者来说那都不是事。前后端分离前:几年前前后端还未分离的时候,各种前端框架还未流行的时候,开发者的效率算是比较低下,后端干前端的活,甚至前端和后端夹杂工作,导致了工作开发容易乱,需要相互依赖,不能完全并行工作,这导致了开发效率底的一个极大的原因,同时开发出来的东西体验也是很差。前后端分离:职责分明,后端专注后端的开发,前端专注前端的开发;相互依赖关系很弱,后端可以先定义开发接口,前端页面及mock 接口对接,最后联调测试时间前后端打通过;前后端完全可以并行开发,开发周期缩短一倍时间;不过这也就会导致了一个致命的问题,大多开发者只管自己的那一部分,不会以全局考虑,导致的一个问题就是联调测试时间代价太大,遇到问题相互甩锅。

前后端都存在的问题,会再联调测试时间全部暴漏出来,这也是为什么联调测试时间会花费那么长时间,甚至晚上加班加点再处理问题的原因,总结如下:

  • 开发过程中不够谨慎,全是空异常问题

  • 代码不规范,代码逻辑嵌套层次太深,牵一发而动全身,以至于修改这里,爆露出那边的问题出来,不会适当的解耦

  • 后端接口返回的字段含义不明确,不清晰,甚至完全跟字段含义违背,比如数据库中有一个int 类型的Type字段,而前端需要类型的中文名称,后端开发者偷懒直接用Type 字段返回字段中文名称,后面前端需要int 类型的Type 有不知道加什么字段为好,导致修修改改,影响效率,下面我会具体分享细节。

  • 眼观不足,不会考虑后续的需求变更扩展

  • 没有设计模式思想,导致维护成本变大 下面从几个方面点来具体分析

三、空异常

1.1 不可信原则

作为开发者,你都可以把自己作为方法调用者的第三方,不需要去关注方法的实现,只需要关注调用方法我应该得到什么结果;然而作为调用者第三方,你都需要认为实现者的方法都是不可信状态,只需要秉承该原则,基本上你就跟空异常没有缘分了.

1.2 ?. (null条件运算符)

先来看一下以下代码:

  [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,不符合预期结果,正确的代码如下:

 [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 的结果数据,多结合?. 和?? 运算符进行合理的逻辑处理,可以让你的项目从此远离空异常。

二、If else 解套

先来看一看比较有趣的网络上的图片

2.1 取反原则

对于上面的if else 嵌套业务大家是不是经常遇到,看到这种代码会非常的头疼,难于维护,影响开发效率,同时也容易出现bug。有经验的开发者必定会对上面这段代码进行优化,我的经验是取反原则。什么是取反原则呢?把不符合的条件先 return 下去,到最后留下符合条件的逻辑,这就是取反原则,一眼看下来就只有一层嵌套,不会存在多层嵌套。我们来看下我遇到的实际场景代码,源代码大体如下:

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
}

取反原则优化后的代码如下:

 if (!condition){// do sometingreturn;}if (!condition1){// do sometingreturn;}if (!condition2){// do sometingreturn;}if(!condition3){// do sometingreturn;}if(!condition4){// do sometingreturn;}// do someting

三、必要的设计模式 开发过程中不要一个链路写到底,需要把某块业务先想好,定位明确,该业务是应该属于哪一块,哪一类业务,后续可能会出现哪些方面的业务变动,适当的引入设计模式,那么多的设计模式,总有一个适合你当时开发的场景;设计模式的选取需要对该模块的作用及定义清晰,多思考,多归类,自然而然心中就有了合适的设计模式的考量。

四、必要的单元测试 做到每个方法单元测试,最好是全路径覆盖到每一条分支的单元测试,先从小的方法单元测试,底层的方法单元测试通过后,再通过postman或者其他工具来进行对外API接口层面的测试,做到全路径覆盖的测试,往往开发人员有一个思维就是测试正常的业务流程,异常流程往往一概不考虑测试;然而出问题的都是那些异常的流程,单元测试需要遵守的原则如下:

  • 尽可能的全路径覆盖测试

  • 抛弃自己写的代码思维,当一个小白进行单元测试

  • 关注异常路径的单元测试

  • 摒弃依赖思想,不要依赖联调测试时间来进行测试,往往你开发只管开发,不管正确率,到后续测试联调时间那就的疯狂加班加点去赶进度了,还不能保证最佳的产品质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【复杂系统迁移 .NET Core平台系列】之调度服务改造

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

C++实现AOE网中的关键路径算法及机动时间计算算法(邻接表存储)

代码如下: #include <iostream> #include <stack> using namespace std; const int N 100;typedef struct Node {int adj;int w;Node *next;}Node;typedef struct VNode {int in;int v;Node *first;VNode(){first nullptr;} }VNode;class AOE { private:VNode a…

.NET 开源项目 StreamJsonRpc 介绍[中篇]

阅读本文大概需要 11 分钟。上一篇介绍了一些预备知识&#xff0c;包括 JSON-RPC 介绍和实现了 JSON-RPC 的 StreamJsonRpc 介绍&#xff0c;讲到了 StreamJsonRpc 可以通过 .NET 的 Stream 类和 WebSocket 类实现 JSON-RPC 协议的通信。本篇就先选择其中的 Stream 类来讲解&am…

Istio 中的多集群部署与管理

本文节选自ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实战》&#xff0c;作者钟华&#xff0c;来自腾讯云。Istio 在 1.1 后提供了两类多集群的连通的部署模式&#xff1a;1. 多控制面2. 单控制面&#xff0c;也称为 “共享控制面” 模式多控制…

认证授权方案之授权初识

1.前言回顾&#xff1a;认证授权方案之JwtBearer认证在上一篇中&#xff0c;我们通过JwtBearer的方式认证&#xff0c;了解在认证时&#xff0c;都是基于Claim的&#xff0c;因此我们可以通过用户令牌获取到用户的Claims&#xff0c;在授权过程中对这些Claims进行验证&#xff…

[数据结构]树、森林与二叉树之间的相互转换方法

树、二叉树与森林的相互转换 本文只给出树、森林与二叉树之间的转换方法&#xff0c;而详细的证明过程不在本文讨论范围之内。 树 → 二叉树 在所有兄弟结点之间加一连线。 对每个结点&#xff0c;除了保留与其长子的连线外&#xff0c;去掉该结点与其它孩子的连线。 二叉树 …

Blazor.Server以正确的方式集成Ids4

&#xff08;一个真正的以后端形式来集成认证中心的方案&#xff09;❤本文导读首先特别感谢张善友老师提供技术指导&#xff0c;源于上周我发了一篇文章《[Mvp.Blazor] 集成Ids4&#xff0c;实现统一授权认证》&#xff0c;我本来是想通过像vue框架那样&#xff0c;通过引oidc…

作为一个有理想的程序员,必读的书都有哪些?

很多程序员朋友问我&#xff1a;“哪本最具影响力的书&#xff0c;是每个程序员都应该读的&#xff1f;” 笔者从事软件开发15年&#xff0c;看过的计算机相关的书籍不下百本了&#xff0c;如果非要推荐的话&#xff0c;给大家精选以下10本&#xff0c;希望对大家有所帮助&…

认证授权方案之JwtBearer认证

1.前言回顾&#xff1a;认证方案之初步认识JWT在现代Web应用程序中&#xff0c;即分为前端与后端两大部分。当前前后端的趋势日益剧增&#xff0c;前端设备&#xff08;手机、平板、电脑、及其他设备&#xff09;层出不穷。因此&#xff0c;为了方便满足前端设备与后端进行通讯…

使用过滤器模式,让客户关怀中的代码更加干净整洁

一&#xff1a;实际场景介绍我们在给用户做订单催付通知的时候&#xff0c;会有这样的一种场景&#xff0c;用户在系统后台设置一组可以催付的规则&#xff0c;比如说订单金额大于xx元&#xff0c;非黑名单用户&#xff0c;来自哪个地区&#xff0c;已购买过某个商品&#xff0…

C++实现各种排序以及复杂度,稳定性分析

代码如下: #include<iostream> using namespace std;void Bubble_Sort(int *a, int n) {bool flag;int tmp 0;for (int i n - 1; i > 0; i--){flag false;for (int j 0; j < i; j){if (a[j] > a[j 1]){swap(a[j], a[j 1]);flag true;}}if (!flag) break…

Webapi管理和性能测试工具WebBenchmark

WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具&#xff0c;在传统工具中一般管理工具缺乏性能压测能力或有性能压测的缺少管理功能&#xff1b;WebBenchmark的设计目标是就管理和性能测试能力同时具备。接下来介绍一下工具的功能和使用&#xff1a…

Abstract Factory(抽象工厂)--对象创建模式

Abstract Factory &#xff08;抽象工厂&#xff09;–对象创建模式 一、意图 提供一个创建一系列相关或者相互依赖的接口&#xff0c;而无需指定它们具体的类。 二、动机 1.在软件系统中&#xff0c;经常面临着“一系列相互依赖的对象”的创建工 作;同时&#xff0c;由于需求…

Builder(生成器)--对象创建型模式

Builder&#xff08;生成器&#xff09;–对象创建型模式 一、意图 将一个复杂的对象构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 二、动机 1.在软件系统中&#xff0c;有时候面临着“一个复杂对象”的创建工作&#xff0c;其通常由各个部分的子对…

Gartner:缺乏技术人才将影响企业数字化转型

导语大多数公司在数字化转型的阶段对所需的技能方面都处于“盲目”状态。正文随着COVID-19响应加快了数字化转型的速度和规模&#xff0c;缺乏数字化技能可能会危害人才计划不统一的公司。甚至在冠状病毒大流行之前&#xff0c;董事会就将数字/技术中断列为2020年的头等大事&am…

DEBUG org.springframework.web.servlet.DispatcherServlet - Error rendering view [org.thymeleaf.spring

报错信息如下: 报错原因: thymeleaf有一些限制&#xff0c;使用th语言&#xff0c;内容为空就会报错 改成这样解决问题:

Factory Method(工厂方法)--对象创建型模式

Factory Method&#xff08;工厂方法&#xff09;–对象创建型模式 一、意图 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。 二、动机 1.在软件系统中&#xff0c;经常面临着创建对象的工作;由于需求的变化…