当前位置: 首页 > news >正文

做招聘网站的客户想退钱wordpress建站属于前端

做招聘网站的客户想退钱,wordpress建站属于前端,营销型网站郭老师案例分享,网络推广的策略代码重构之法——方法重构分析Intro想要写出比较优秀的代码#xff0c;需要时刻警惕代码中的坏味道#xff0c;今天想写一篇文章介绍一下如何分析你的方法是不是需要考虑重构一个方法通常有三个部分组成#xff0c;输入(Input)#xff0c;输出(Output)#xff0c;方法体(M… 代码重构之法——方法重构分析Intro想要写出比较优秀的代码需要时刻警惕代码中的坏味道今天想写一篇文章介绍一下如何分析你的方法是不是需要考虑重构一个方法通常有三个部分组成输入(Input)输出(Output)方法体(Method Body)我们就从这三个方面来分析一个方法是否该考虑重构Input方法输入也就是方法的参数通常来说一个方法的参数基本可以控制在7个以内仅作参考可以自己衡量SonarQube 默认方法最多七个参数如果你的方法参数过多的话可能就需要考虑重构一个方法参数了通常的做法是封装一个独立的 model参数作为 model 的属性。举一个常见的例子比如一个新闻列表的API起初可能很简单就只需要一个 lastId一个 count 两个参数但是随着业务需求的增加可能会增加很多别的参数比如前端提供一个 keyword 进行全文检索提供一个 sortBy 进行排序根据新闻标题匹配作者名称匹配分类匹配根据发布时间筛选等等最后可能会导致这个方法的参数有很多通常我会新增一个 XxxRequest 的 model然后方法参数替换成这个 model然后指定 [FromQuery] 就可以了可以对比一个修改前后的差异是不是后面的方式更清爽一些呢TaskIActionResult List(int lastId, int count, string title, string author, string keyword, int categoryId, string sortBy, DateTime? beginTime, DateTime? endTime) TaskIActionResult List([FromQuery]NewsListQueryRequest request) OutputOutput 就是方法的返回值尽可能返回具体的类型尽可能避免使用 Tuple 等类型方法的返回值应该具有明确的意义使用具体的 Model 代替 Tuple 返回值尤其是一些 public 的要被外部访问的方法更应该返回具体的类型虽然 C# 7.2 开始支持了 named tuple会比之前友好很多支持给 tuple 指定名称但是这只是编译器级别的实际还是 Item1,Item2 ...,还是比较推荐使用具体的 model更加明了Body通常一个方法不要太长曾经在群里看到群友吐槽一个方法两千多行这样的方法维护起来简直就是灾难不要让一个方法太长保持方体体的简单一些通用的逻辑通过 Filter 或结合 AOP 来实现Sonar 有一个分析方法复杂度的一个方法官方称之为 Cognitive Complexity简单介绍一下代码里的 if/switch/for/foreach/try...catch/while 都会增加方法的复杂度出现一层嵌套则复杂度再加1 Sonar 默认的一个方法的复杂度不能超过 15来几个简单的示例下面这个方法的复杂度是 3有三个 if(else) 分支void Method1(int num) {if(num 0){} else if(num 0){} else{} } 下面这个方法的复杂度是 3foreach 带来了 1 的复杂度if 也是1的复杂度但是因为 if 是嵌套在 foreach 内部的一层嵌套会导致复杂度增加1void Method1(int[] nums) {foreach(var num in nums){if(num 0){}} } 下面这个方法的复杂度在上面的基础上增加了两个 catch这使得复杂度会加 2从而变成 5void Method1(int[] nums) {try{foreach(var num in nums){if(num 0){}}}catch(InvalidOperationException e){}catch(Exception e){} } 更多示例可以参考官方介绍https://www.sonarsource.com/docs/CognitiveComplexity.pdfReduce Complexity前面我们介绍了一些复杂度的分析如何能够切实有效的降低方法的复杂度呢方法参数不宜过多参数过多考虑重构输入参数通常可以新建一个 model 来管理输入参数方法返回值不宜使用意义不明的返回值尽量不用 Tuple 作为返回值方法的行数不要太多利用新语法减少行数减少 if 判断比如使用 null 传播符代替一系列的 iflist?.FirstOrDefault()?.Name, a ??test多个方法的相同逻辑使用切面逻辑处理比如每个方法里都有 try...catch那我们就可以使用一个复杂 try...catch 的切面逻辑如果是 mvc/webapi 也可以借助 ExceptionFilter 来实现参数校验使用微软的 ModelValidator 或者使用 FluentValidation 进行校验在代码里尽量避免使用大量的 if 判断导致复杂度的增加仔细 review 代码有些逻辑是否合并在一起避免在多个 if 里嵌套相同遍历逻辑and more...等你来补充More除了自己主动感知方法的复杂度之外我们也可以借助一些第三方的静态代码分析工具来分析我们的代码从而获得一些修改建议进而保证代码的高质量。SonarQube 是目前使用较多的工具可以方便的和 CI 集成有一个 SonarCloud 网站提供云服务可以轻松为你的开源项目集成静态代码分析有兴趣可以看看地址是 https://sonarcloud.io/之前还用过 codacy似乎不太流行推荐 SonarQubeReferencehttps://sonarcloud.io/https://www.sonarsource.com/docs/CognitiveComplexity.pdf
http://wiki.neutronadmin.com/news/2646/

相关文章: