当前位置:网站首页>Method of code refactoring -- Analysis of method refactoring
Method of code refactoring -- Analysis of method refactoring
2020-11-06 21:35:00 【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]所创,转载请带上原文链接,感谢
边栏推荐
- 意派Epub360丨你想要的H5模板都在这里,电子书、大转盘、红包雨、问卷调查……
- Can you do it with only six characters?
- What the hell is fastthreadlocal? The existence of ThreadLocal!!
- 谷歌浏览器实现视频播放加速功能
- IPFs rudder filecoin landing at the same time, fil currency price broke a thousand
- Description of phpshe SMS plug-in
- html+ vue.js Implementing paging compatible IE
- 上海巨微专用蓝牙广播芯片
- CCR coin frying robot: the boss of bitcoin digital currency, what you have to know
- list转换map(根据key来拆分list,相同key的value为一个list)
猜你喜欢
The native API of the future trend of the front end: web components
2020-08-15:什么情况下数据任务需要优化?
事务的本质和死锁的原理
CCR coin frying robot: the boss of bitcoin digital currency, what you have to know
Introduction to the development of small game cloud
A small goal in 2019 to become a blog expert of CSDN
ES6 learning notes (5): easy to understand ES6's built-in extension objects
An article takes you to understand CSS3 picture border
2020-09-04:函数调用约定了解么?
磁存储芯片STT-MRAM的特点
随机推荐
Axios learning notes (2): easy to understand the use of XHR and how to package simple Axios
STM32F030C6T6兼容替换MM32SPIN05PF
Flink's datasource Trilogy 2: built in connector
代码重构之法——方法重构分析
迅为-iMX6ULL开发板上配置AP热点
C language I blog assignment 03
STM32F030F4P6兼容灵动微MM32F031F4P6
Ronglian completed US $125 million f round financing
An article takes you to understand CSS pagination examples
An article will introduce you to CSS3 background knowledge
An article will introduce you to HTML tables and their main attributes
html+ vue.js Implementing paging compatible IE
2020-09-09:裸写算法:两个线程轮流打印数字1-100。
Hdu3974 assign the task segment tree DFS order
2020-08-15:什么情况下数据任务需要优化?
递归、回溯算法常用数学基础公式
[byte jumps, autumn recruitment Posts open] ohayoo! Don't leave after school, I want to ask you to play games!!!
ES中删除索引的mapping字段时应该考虑的点
Summary of common SQL statements
An article will take you to understand SVG gradient knowledge