Giới thiệu

Thế giới phần mềm luôn thay đổi với tốc độ chóng mặt và những người gia nhập thế giới lập trình có một danh sách dài các việc cần làm để trở thành một nhà lập trình thực dụng.

Mô hình hướng đối tượng là một trong những mô hình hiệu quả nhất trong việc xây dựng và phát triển phần mềm. Nhiều kỹ thuật được các chuyên gia tạo ra nhằm cải thiện các chương trình được thiết kế hướng đối tượng để chúng trở nên đơn giản và dễ bảo trì hơn.

Chuyên gia Martin Fowler cùng các cộng sự của mình đã cho ra đời cuốn sách Reafactoring: Improving the Design of Existing Code (hiện có hai bản trên Amazon, phiên bản đầu tiên minh họa bằng ngôn ngữ Java, phiên bản thứ hai dùng JavaScript – Tôi đang đọc bản thứ nhất) như một nỗ lực giúp các lập trình viên có thể tạo ra các phần mềm hiệu quả với ít công sức và kinh phí nhất có thể. Nếu bạn đã quen thuộc với các ngôn ngữ hướng đối tượng như Java hay C#, các công cụ như UML, thì đây là cuốn sách cần đọc.

Refactoring là gì?

Bạn có thể hình dung một chương trình ứng dụng như sau:

Bản chất của Refactoring là cải thiện chương trình sau khi nó đã hoàn thành (tức là gồm đủ 3 công đoạn như hình). Đó cũng là tiêu đề cuốn sách Improving the Design of Existing Code hay một cách diễn đạt khác là Improving the design after it has been written. Vậy cụ thể là công đoạn nào của chương trình sẽ được can thiệp bởi Refactoring? Chính là Process. Vì sao? Chúng ta xem định nghĩa Refactoring từ cuốn sách (hay trang refactoring.com của tác giả Martin Fowler):

Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.

Để dễ hiểu tôi sẽ lấy một ví dụ đơn giản (các ví dụ về thiết kế hướng đối tượng có thể tham khảo từ cuốn sách hay các bài viết tiếp theo ) về chương trình tính tổng hai số nguyên a và b. Khi thực thi chương trình với a = 2, b = 3 thì kết quả đầu ra phải là 5

Chúng ta có thể viết vài dòng mã cho chương trình này trong Java:


Scanner console = new Scanner(System.in);

System.out.print("Enter a = ");

int a = console.nextInt();

System.out.print("Enter b = ");

int b = console.nextInt();

System.out.println();

int c = a + b;

System.out.printf("a + b = %d", c);

Theo yêu cầu chương trình, a và b là hai số nguyên (Input – không đổi), tổng hai số nguyên chắc chắn là số nguyên (Output – không đổi). Như vậy, chúng ta chỉ có thể thay đổi cách tính tổng ví dụ dùng toán tử + (như đoạn mã trên) hay một phương thức từ một lớp do bạn định nghĩa.

Refactoring là một tập hợp các kỹ thuật sử dụng trong công đoạn Process – cấu trúc bên trong (internal structure) và không thay đổi yêu cầu từ Input hay Output – các ứng xử bên ngoài (external behavior) giúp chương trình dễ đọc, dễ bảo trì và phát triển.

Với tư cách là người mới học lập trình, viết một chương trình (ví dụ tính tổng hai số nguyên) chỉ hi vọng trình biên dịch có thể hiểu và cho ra kết quả như mong đợi. Nhưng khi tham gia vào ngành công nghiệp phần mềm thì câu chuyện lại không đơn giản như vậy. Các đoạn mã bạn viết ra ngoài việc đáp ứng đúng yêu cầu, thời gian, kinh phí, chúng cũng được kiểm thử (testing), bảo trì (maintaining), sử dụng lại (re -using), v.v. bởi các lập trình viên khác. Refactoring thật sự cần thiết cho những ai đang học hay làm việc phát triển phần mềm (theo hướng đối tượng).

Các bài tiếp theo sẽ khám phá nhiều hơn về các kỹ thuật Refactoring và xem xét các tính năng hỗ trợ Refactoring trong các môi trường lập trình phổ biến phục vụ học tập, phát triển phần mềm như Visual Studio, Eclipse.