Tennis-Refactoring-Kata 教程
项目介绍
Tennis-Refactoring-Kata 是一个基于网球规则的重构练习项目。该项目旨在帮助开发者通过实际的代码重构练习,提升他们的重构技能和代码质量。项目提供了初始代码和测试用例,开发者需要在不改变程序行为的前提下,对代码进行重构,使其更加简洁、可读和可维护。
项目快速启动
克隆项目
首先,克隆项目到本地:
git clone https://github.com/emilybache/Tennis-Refactoring-Kata.git
cd Tennis-Refactoring-Kata
安装依赖
根据项目使用的编程语言,安装相应的依赖。例如,如果是 Java 项目,可以使用 Maven 安装依赖:
mvn install
运行测试
运行测试用例以确保初始代码功能正常:
mvn test
开始重构
打开项目中的 TennisGame1.java
文件,开始进行重构。以下是一个简单的重构示例:
// 原始代码
public class TennisGame1 implements TennisGame {
private int m_score1 = 0;
private int m_score2 = 0;
private String player1Name;
private String player2Name;
public TennisGame1(String player1Name, String player2Name) {
this.player1Name = player1Name;
this.player2Name = player2Name;
}
public void wonPoint(String playerName) {
if (playerName.equals("player1"))
m_score1 += 1;
else
m_score2 += 1;
}
public String getScore() {
String score = "";
int tempScore = 0;
if (m_score1 == m_score2) {
switch (m_score1) {
case 0:
score = "Love-All";
break;
case 1:
score = "Fifteen-All";
break;
case 2:
score = "Thirty-All";
break;
default:
score = "Deuce";
break;
}
} else if (m_score1 >= 4 || m_score2 >= 4) {
int minusResult = m_score1 - m_score2;
if (minusResult == 1) score = "Advantage player1";
else if (minusResult == -1) score = "Advantage player2";
else if (minusResult >= 2) score = "Win for player1";
else score = "Win for player2";
} else {
for (int i = 1; i < 3; i++) {
if (i == 1) tempScore = m_score1;
else { score += "-"; tempScore = m_score2; }
switch (tempScore) {
case 0:
score += "Love";
break;
case 1:
score += "Fifteen";
break;
case 2:
score += "Thirty";
break;
case 3:
score += "Forty";
break;
}
}
}
return score;
}
}
// 重构后的代码
public class TennisGame1 implements TennisGame {
private int player1Score = 0;
private int player2Score = 0;
private String player1Name;
private String player2Name;
public TennisGame1(String player1Name, String player2Name) {
this.player1Name = player1Name;
this.player2Name = player2Name;
}
public void wonPoint(String playerName) {
if (playerName.equals("player1"))
player1Score += 1;
else
player2Score += 1;
}
public String getScore() {
if (player1Score == player2Score) {
return getEqualScore(player1Score);
} else if (player1Score >= 4 || player2Score >= 4) {
return getAdvantageOrWinScore(player1Score, player2Score