- C# and .NET Core Test Driven Development
- Ayobami Adewole
- 302字
- 2021-06-25 22:00:26
Code smell
Code smell is a term that was first used by Kent Beck, which indicates deeper issues in the source code. Code smell in a code base can come from having replications in the source code, use of inconsistent or vague naming conventions and coding styles, creating methods with a long list of parameters, and having monster methods and classes, that is methods or classes that know and do too much thereby violating the single responsibility principle. The list goes on and on.
A common code smell in the source code is when a developer creates two or more methods that perform the same action with little or no variation or with program details or facts that ought to be implemented in a single point replicated in several methods or classes, leading to a code base that is not easy to maintain.
The following two ASP.NET MVC action methods have lines of code that create a strongly-typed list of strings of years and months. These lines of code, that could easily have been refactored into a third method and called by both methods, have been replicated in these two methods:
[HttpGet]
public ActionResult GetAllTransactions()
{
List<string> years = new List<string>();
for (int i = DateTime.Now.Year; i >= 2015; i--)
years.Add(i.ToString());
List<string> months = new List<string>();
for (int j = 1; j <= 12; j++)
months.Add(j.ToString());
ViewBag.Transactions= GetTransactions(years,months);
return View();
}
[HttpGet]
public ActionResult SearchTransactions()
{
List<string> years = new List<string>();
for (int i = DateTime.Now.Year; i >= 2015; i--)
years.Add(i.ToString());
List<string> months = new List<string>();
for (int j = 1; j <= 12; j++)
months.Add(j.ToString());
ViewBag.Years = years;
ViewBag.Months = months;
return View();
}
Another common code smell occurs when developers create methods with a long list of parameters, as in the following method:
public void ProcessTransaction(string username, string password, float transactionAmount, string transactionType, DateTime time, bool canProcess, bool retryOnfailure)
{
//Do something
}
- Vue.js設計與實現
- LabVIEW 2018 虛擬儀器程序設計
- Building a RESTful Web Service with Spring
- Visual Basic程序設計(第3版):學習指導與練習
- Clojure for Domain:specific Languages
- BIM概論及Revit精講
- 微服務從小白到專家:Spring Cloud和Kubernetes實戰
- 深入淺出React和Redux
- HTML5 APP開發從入門到精通(微課精編版)
- 大話Java:程序設計從入門到精通
- SQL Server 2016 從入門到實戰(視頻教學版)
- Mastering SciPy
- Applied Deep Learning with Python
- Qt 5.12實戰
- Effective C++:改善程序與設計的55個具體做法(第三版)中文版(雙色)