当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- 2020-08-14:数据任务的执行引擎用的哪些?
- Using an example to understand the underlying processing mechanism of JS function
- Road to simple HTML + JS to achieve the most simple game Tetris
- 意外的元素..所需元素..
- What are the highlights of Huawei mate 40 series with HMS?
- git远程库回退指定版本
- 非易失性MRAM存储器应用于各级高速缓存
- What kind of music do you need to make for a complete game?
- 2020-08-30:裸写算法:二叉树两个节点的最近公共祖先。
- Will blockchain be the antidote to the global epidemic accelerating the transformation of Internet enterprises?
猜你喜欢
What is the tensor in tensorflow?
Look! Internet, e-commerce offline big data analysis best practice! (Internet disk link attached)
Filecoin has completed a major upgrade and achieved four major project progress!
Description of phpshe SMS plug-in
2020-08-19:TCP是通过什么机制保障可靠性的?
C and C / C + + mixed programming series 5 - GC collaboration of memory management
ES6 learning notes (5): easy to understand ES6's built-in extension objects
Flink's datasource Trilogy 2: built in connector
Can you do it with only six characters?
2020-08-24:什么是小文件?很多小文件会有什么问题?很多小文件怎么解决?(大数据)
随机推荐
Common syntax corresponding table of mongodb and SQL
Top 5 Chinese cloud manufacturers in 2018: Alibaba cloud, Tencent cloud, AWS, telecom, Unicom
image operating system windows cannot be used on this platform
[forward] how to view UserData in Lua
Zhou Jie: database system of East China Normal University
Hdu3974 assign the task segment tree DFS order
细数软件工程----各阶段必不可少的那些图
Code generator plug-in and creator preform file analysis
Contract trading system development | construction of smart contract trading platform
迅为iMX6开发板-设备树内核-menuconfig的使用
An article will take you to understand CSS3 fillet knowledge
The method of realizing high SLO on large scale kubernetes cluster
Look! Internet, e-commerce offline big data analysis best practice! (Internet disk link attached)
GitHub: the foundation of the front end
面试官: ShardingSphere 学一下吧
Unity performance optimization
[self taught unity2d legendary game development] map editor
Countdown | 2020 PostgreSQL Asia Conference - agenda arrangement of Chinese sub Forum
【涂鸦物联网足迹】物联网基础介绍篇
Kubernetes and OAM to build a unified, standardized application management platform knowledge! (Internet disk link attached)