当前位置:网站首页>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]所创,转载请带上原文链接,感谢
边栏推荐
- Zero basis to build a web search engine of its own
- Qt音视频开发46-视频传输UDP版
- An article takes you to understand CSS3 picture border
- To teach you to easily understand the basic usage of Vue codemirror: mainly to achieve code editing, verification prompt, code formatting
- Hdu3974 assign the task segment tree DFS order
- Introduction to the development of small game cloud
- An article will introduce you to CSS3 background knowledge
- How to prepare for the system design interview
- The isolation level of transaction and its problems
- es创建新的索引库并拷贝旧的索引库 实践亲测有效!
猜你喜欢
Understanding formatting principles
Zero basis to build a web search engine of its own
Diamond standard
大数据处理黑科技:揭秘PB级数仓GaussDB(DWS) 并行计算技术
How about small and medium-sized enterprises choose shared office?
【涂鸦物联网足迹】物联网基础介绍篇
解决 WPF 绑定集合后数据变动界面却不更新的问题
What is alicloud's experience of sweeping goods for 100 yuan?
es创建新的索引库并拷贝旧的索引库 实践亲测有效!
What is the tensor in tensorflow?
随机推荐
IPFs rudder filecoin landing at the same time, fil currency price broke a thousand
迅为-iMX6ULL开发板上配置AP热点
Zero basis to build a web search engine of its own
EOS founder BM: what's the difference between UE, UBI and URI?
【学习】接口测试用例编写和测试关注点
With this artifact, quickly say goodbye to spam messages
Will blockchain be the antidote to the global epidemic accelerating the transformation of Internet enterprises?
非易失性MRAM存储器应用于各级高速缓存
jenkins安装部署过程简记
This project allows you to quickly learn about a programming language in a few minutes
The isolation level of transaction and its problems
Markdown tricks
GitHub: the foundation of the front end
2020-09-03:裸写算法:回形矩阵遍历。
The role of theme music in games
How to make characters move
小熊派开发板实践:智慧路灯沙箱实验之真实设备接入
面试官: ShardingSphere 学一下吧
Take you to learn the new methods in Es5
Stickinengine architecture 12 communication protocol