post-image

[Thực hành] Refactoring – đổi tên biến và tách hằng

Tổng quan

Mục tiêu

Luyện tập kỹ thuật đổi tên biến.

Điều kiện:

Biết cách sử dụng kỹ thuật tái cấu trúc được sử dụng là: Đổi tên biến và Tách hằng.

Mô tả

Trong phần này, chúng ta sẽ thực hiện thao tác tái cấu trúc mã nguồn của một ứng dụng có sẵn:

https://github.com/codegym-vn/php-cleancode-refactoring-renaming

Kỹ thuật tái cấu trúc được sử dụng: Đổi tên biến và Tách hằng.

Hướng dẫn

Bước 1: Chạy dự án có sẵn

Clone dự án từ địa chỉ: https://github.com/codegym-vn/php-cleancode-refactoring-renaming

Mở mã nguồn dự án trong file Calculator và CalculatorTest để tìm hiểu mã nguồn.

Bước 2: Đổi tên biến a, b và o trong lớp Calculator

Trong mã nguồn hiện tại, các tên biến a, b và o không diễn đạt được ý nghĩa của nó. Cần thực hiện việc đổi tên biến này.

  • Biến a: firstOperand – toán hạng đầu tiên
  • Biến b: secondOperand – toán hạng thứ hai
  • Biến o: operator – toán tử

Mã nguồn sau khi đổi tên:

class Calculator
{
public function calculate($firstOperand, $secondOperand, $operator) {
switch ($operator) {
case '+':
return $firstOperand + $secondOperand;
case '-':
return $firstOperand - $secondOperand;
case '*':
return $firstOperand * $secondOperand;
case '/':
if ($secondOperand != 0) {
return $firstOperand / $secondOperand;
} else {
echo("Can not divide by 0");
break;
}
default:
echo ("Unsupported operation");
}
}
}

Bước 3: Đổi tên biến a, b và o trong lớp CalculatorTest

Mã kiểm thử cũng cần đảm bảo tiêu chí “clean”, do đó chúng ta cần thực hiện thao tác đổi tên các biến a, b và o tương tự như trong lớp Calculator

Bước 4: Tách hằng

Trong mã nguồn hiện tại, các giá trị ‘+’, ‘-‘, ‘*’ và ‘/’ được coi là các giá trị “thần kỳ”. Chúng ta cần tách các giá trị này thành các hằng số để mã nguồn clean hơn.

  • Giá trị ‘+’: ADDITION – toán tử cộng
  • Giá trị ‘-‘: SUBTRACTION – toán tử trừ
  • Giá trị ‘*’: MULTIPLICATION – toán tử nhân
  • Giá trị ‘/’: DIVISION – toán tử chia

Mã nguồn sau khi tách hằng:

const ADDITION = '+';
const SUBTRACTION = '-';
const MULTIPLICATION = '*';
const DIVISION = '/';
class Calculator
{
public function calculate($firstOperand, $secondOperand, $operator) {
switch ($operator) {
case ADDITION:
return $firstOperand + $secondOperand;
case SUBTRACTION:
return $firstOperand - $secondOperand;
case MULTIPLICATION:
return $firstOperand * $secondOperand;
case DIVISION:
if ($secondOperand != 0) {
return $firstOperand / $secondOperand;
} else {
echo("Can not divide by 0");
break;
}
default:
echo ("Unsupported operation");
}
}
}

Lưu ý: Sau mỗi bước refactor thì cần chạy lại các test case để đảm bảo mã nguồn vẫn hoạt động tốt.

Với mã đã clean bên trên bạn hoàn toàn có thể suy nghĩ đến việc cần biến các thông báo lỗi thành hằng, thử suy nghĩ xem điều này sẽ có lợi gì nếu bạn đang xây dựng một ứng dụng lớn, triển khai đa quốc gia?

Trả lời

Email của bạn sẽ không được hiển thị công khai.