当前位置:网站首页>Method of code refactoring -- Analysis of method refactoring
Method of code refactoring -- Analysis of method refactoring
2020-11-06 21:35:08 【Irving the procedural ape】
The method of code refactoring —— Method reconstruction analysis
Intro
Want to write better code , You need to be alert to bad smells in your code , Today I want to write an article about how to analyze whether your method needs to consider refactoring
A method usually consists of three parts , Input (Input), Output (Output), Method body (Method Body), We will analyze whether a method should consider refactoring from these three aspects
Input
Method input is the parameter of the method , Generally speaking, the parameters of a method can be basically controlled in 7 Within a ( For reference only , You can measure it by yourself ,SonarQube
The default method has up to seven parameters ), If your method has too many parameters , You may need to consider refactoring a method parameter , The usual practice is to encapsulate a separate model, Parameters as model Properties of .
Take a common example , Like a news list API, It can be very simple at first , Just one lastId
, One count
Two parameters , But as business needs increase , Many other parameters may be added , For example, the front end provides a keyword Full text search , Provide a sortBy Sort , Match the news headlines , Author name matches , Classification matching , Filter according to the release time and so on , In the end, there may be many parameters for this method
Usually I add a new one XxxRequest
Of model, Then replace the method parameter with this model, Then designate [FromQuery]
That's all right. , You can compare the difference before and after a modification , Is the latter way more refreshing
Task<IActionResult> List(int lastId, int count, string title, string author, string keyword, int categoryId, string sortBy, DateTime? beginTime, DateTime? endTime)
Task<IActionResult> List([FromQuery]NewsListQueryRequest request)
Output
Output Is the return value of the method , Return as many specific types as possible , Try to avoid using Tuple
Other types , The return value of the method should have a clear meaning
Use specific Model Instead of Tuple Return value , Especially some public Of , Methods to be accessed externally should return specific types , although C# 7.2 Started to support named tuple, It's going to be a lot more friendly than before , Support to tuple Specify a name , But it's just compiler level , Actually, it's still Item1,Item2 ..., It is recommended to use specific ones model, More clearly
Body
Usually a method is not too long , I saw a group of friends make complaints about more than 2000 ways in the group , This is a disaster to maintain , Don't make a method too long , Keep the cube simple , Some general logic goes through Filter Or combine AOP To achieve
Sonar There is a way to analyze the complexity of a method , Officially called Cognitive Complexity
A brief introduction , In code if
/switch
/for
/foreach
/try
...catch
/while
Will increase the complexity of the method , If there is a layer of nesting, the complexity will be increased 1, Sonar The default complexity of a method cannot exceed 15
Here are a few simple examples :
The complexity of the following method is 3, There are three if(else) Branch
版权声明
本文为[Irving the procedural ape]所创,转载请带上原文链接,感谢
边栏推荐
- C++ 数字、string和char*的转换
- C++学习——centos7上部署C++开发环境
- C++学习——一步步学会写Makefile
- C++学习——临时对象的产生与优化
- C++学习——对象的引用的用法
- C++编程经验(6):使用C++风格的类型转换
- Won the CKA + CKS certificate with the highest gold content in kubernetes in 31 days!
- C + + number, string and char * conversion
- C + + Learning -- capacity() and resize() in C + +
- C + + Learning -- about code performance optimization
猜你喜欢
-
C + + programming experience (6): using C + + style type conversion
-
Latest party and government work report ppt - Park ppt
-
在线身份证号码提取生日工具
-
Online ID number extraction birthday tool
-
️野指针?悬空指针?️ 一文带你搞懂!
-
Field pointer? Dangling pointer? This article will help you understand!
-
HCNA Routing&Switching之GVRP
-
GVRP of hcna Routing & Switching
-
Seq2Seq实现闲聊机器人
-
【闲聊机器人】seq2seq模型的原理
随机推荐
- LeetCode 91. 解码方法
- Seq2seq implements chat robot
- [chat robot] principle of seq2seq model
- Leetcode 91. Decoding method
- HCNA Routing&Switching之GVRP
- GVRP of hcna Routing & Switching
- HDU7016 Random Walk 2
- [Code+#1]Yazid 的新生舞会
- CF1548C The Three Little Pigs
- HDU7033 Typing Contest
- HDU7016 Random Walk 2
- [code + 1] Yazid's freshman ball
- CF1548C The Three Little Pigs
- HDU7033 Typing Contest
- Qt Creator 自动补齐变慢的解决
- HALCON 20.11:如何处理标定助手品质问题
- HALCON 20.11:标定助手使用注意事项
- Solution of QT creator's automatic replenishment slowing down
- Halcon 20.11: how to deal with the quality problem of calibration assistant
- Halcon 20.11: precautions for use of calibration assistant
- “十大科学技术问题”揭晓!|青年科学家50²论坛
- "Top ten scientific and technological issues" announced| Young scientists 50 ² forum
- 求反转链表
- Reverse linked list
- js的数据类型
- JS data type
- 记一次文件读写遇到的bug
- Remember the bug encountered in reading and writing a file
- 单例模式
- Singleton mode
- 在这个 N 多编程语言争霸的世界,C++ 究竟还有没有未来?
- In this world of N programming languages, is there a future for C + +?
- es6模板字符
- js Promise
- js 数组方法 回顾
- ES6 template characters
- js Promise
- JS array method review
- 【Golang】️走进 Go 语言️ 第一课 Hello World
- [golang] go into go language lesson 1 Hello World