Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Tái cấu trúc cho mọi người docx
Nội dung xem thử
Mô tả chi tiết
Tái cấu trúc cho mọi người
Làm thế nào và tại sao lại sử dụng các tính năng tái cấu trúc được tự động hóa
của Eclipse
David Gallardo, Tư vấn phần mềm
Tóm tắt: Eclipse cung cấp tập các phép tái cấu trúc (refactoring) tự động mạnh
mẽ, so với những thứ khác, cho phép bạn đổi tên các phần tử Java™, di chuyển
các lớp và các gói, tạo các giao diện từ các lớp cụ thể, chuyển các lớp lồng nhau
vào các lớp mức cao nhất và lấy ra một phương thức mới từ các đoạn mã trong
một phương thức cũ. Việc trở nên quen thuộc với các công cụ tái cấu trúc của
Eclipse là một cách hay để cải thiện năng suất của bạn. Tổng quan về tính năng tái
cấu trúc của Eclipse này, kèm với các ví dụ, giải thích cách thức và lí do sử dụng
từng tính năng.
Lí do cần tái cấu trúc?
Tái cấu trúc (Refactoring) là thay đổi cấu trúc của một chương trình mà không làm
thay đổi chức năng của nó. Tái cấu trúc là một kỹ thuật mạnh, nhưng nó cần được
thực hiện cẩn thận. Mối nguy hiểm chính là các lỗi vô ý có thể được đưa vào, đặc
biệt là khi tái cấu trúc được thực hiện bằng tay. Mối nguy hiểm này dẫn đến một
sự chỉ trích thường xuyên về tái cấu trúc: tại sao lại sửa chữa mã nếu nó không bị
hỏng?
Có một vài lý do để bạn có thể muốn tái cấu trúc mã. Đầu tiên là bắt nguồn của
câu chuyện cổ tích: cơ sở mã rất cổ của sản phẩm đáng kính được kế thừa hoặc
nếu không thì xuất hiện bí ẩn. Nhóm phát triển ban đầu đã biến mất. Một phiên
bản mới, với các tính năng mới, phải được tạo ra, nhưng mã không còn hiểu được
nữa. Nhóm phát triển mới, làm việc cả đêm lẫn ngày, giải mã nó, vẽ bản đồ nó và
sau nhiều kế hoạch và thiết kế, phá hỏng mã hoàn toàn. Cuối cùng, cẩn thận, họ
đặt nó tất cả trở lại với nhau theo tầm nhìn mới. Đây là tái cấu trúc trên quy mô
khác thường và một ít vẫn còn hoạt động để nói về chuyện này.
Một kịch bản thực tế hơn là một yêu cầu mới được đưa vào cho dự án đòi hỏi thay
đổi thiết kế. Thật là vụn vặt cho dù yêu cầu này đã được đưa vào do sơ xuất trong
kế hoạch ban đầu hoặc do cách tiếp cận lặp lại (chẳng hạn như phát triển nhanh
nhẹn hoặc phát triển dựa vào thử nghiệm) đang được sử dụng để thận trọng đưa
vào các yêu cầu trong suốt quá trình phát triển. Đây là tái cấu trúc trên một quy
mô nhỏ hơn nhiều và nó thường yêu cầu thay đổi hệ thống phân cấp lớp, có lẽ do
đưa vào các giao diện hoặc lớp trừu tượng, chia tách các lớp, sắp xếp lại các lớp và
v.v.
Một lý do cuối cùng để tái cấu trúc, khi các công cụ tái cấu trúc tự động có sẵn,
chỉ đơn giản là một phím tắt để tạo mã ở vị trí đầu tiên -- một cái gì đó giống như
cách sử dụng một chương trình kiểm tra lỗi chính tả (spellchecker) để phân loại
một từ khi bạn không chắc cách đánh vần nó. Việc sử dụng tái cấu trúc nhàm chán
này -- chẳng hạn để tạo ra các phương thức getter và setter -- có thể là một bộ tiết
kiệm thời gian hiệu quả một khi bạn đã quen thuộc với các công cụ này.
Các công cụ tái cấu trúc của Eclipse không được dự kiến để sử dụng cho phép tái
cấu trúc tại một quy mô khác thường -- một vài công cụ có -- nhưng chúng là vô
giá để làm thay đổi mã trong quá trình diễn biến của một ngày làm việc của lập
trình viên trung bình, cho dù điều đó liên quan đến các kỹ thuật phát triển nhanh
nhẹn hay không. Cuối cùng, bất kỳ hoạt động phức tạp nào có thể được tự động
hóa đều là nhàm chán, cần tránh. Việc biết các công cụ tái cấu trúc Eclipse có sẵn
những gì và cách sử dụng đã dự kiến của chúng, sẽ cải thiện rất nhiều năng suất
của bạn.
Có hai cách quan trọng để bạn có thể làm giảm nguy cơ làm hỏng mã. Một cách là
phải có một bộ đầy đủ các bài thử nghiệm bộ phận cho mã đó: mã phải vượt qua
các bài thử nghiệm cả trước và sau khi tái cấu trúc. Cách thứ hai là sử dụng một
công cụ tự động hoá, chẳng hạn như các tính năng tái cấu trúc của Eclipse, để thực
hiện phép tái cấu trúc này.
Cách kết hợp thử nghiệm kỹ lưỡng và tái cấu trúc tự động đặc biệt mạnh mẽ và đã
chuyển nghệ thuật bí ẩn này thành một công cụ thường ngày, có ích. Khả năng
thay đổi cấu trúc mã của bạn mà không cần thay đổi chức năng của nó, theo cách
nhanh chóng và an toàn, thêm chức năng hoặc cải thiện việc bảo trì của nó có thể
ảnh hưởng đáng kể đến cách bạn thiết kế và phát triển mã, cho dù bạn kết hợp nó
vào một phương thức nhanh nhẹn chính thức hay không.
Các kiểu tái cấu trúc trong Eclipse
Các công cụ tái cấu trúc của Eclipse có thể được nhóm lại thành ba thể loại rõ ràng
(và đây là thứ tự mà chúng xuất hiện trong trình đơn Refactoring):
1. Thay đổi tên và tổ chức vật lý của mã, bao gồm đổi tên các trường, các
biến, các lớp và các giao diện và di chuyển các gói và các lớp.
2. Thay đổi tổ chức logic của mã ở mức lớp, gồm việc chuyển các lớp ẩn danh
thành các lớp lồng nhau, chuyển các lớp lồng nhau thành các lớp mức cao
nhất, tạo ra các giao diện từ các lớp cụ thể và di chuyển các phương thức
hoặc các trường từ một lớp đến lớp con hoặc siêu lớp.
3. Thay đổi mã trong một lớp, gồm chuyển các biến chuyển địa phương thành
các trường lớp, chuyển mã chọn trong phương thức thành một phương thức
tách biệt và tạo ra các phương thức getter và setter cho các trường.
Một số phép tái cấu trúc gần như không khớp với ba thể loại này, đặc biệt là Thay
đổi chữ kí phương thức (Change Method Signature), có trong thể loại thứ ba ở
đây. Ngoài những trường hợp ngoại lệ này, các phần theo sau sẽ thảo luận về các
công cụ tái cấu trúc của Eclipse theo thứ tự này.
Tổ chức lại và đổi tên lại vật lý
Bạn rõ ràng có thể đổi tên hoặc di chuyển các tệp xung quanh trong hệ thống tệp
mà không cần một công cụ đặc biệt, nhưng làm như vậy với các tệp mã nguồn
Java có thể đòi hỏi bạn phải chỉnh sửa nhiều tệp để cập nhật các câu lệnh import
(nhập khẩu) hoặc package (gói). Tương tự như vậy, bạn có thể dễ dàng đổi tên các
lớp, các phương thức và các biến bằng cách sử dụng một trình soạn thảo văn bản
để tìm kiếm và thay thế chức năng, nhưng bạn cần phải làm điều này cẩn thận, vì
các lớp khác nhau có thể có các phương thức hoặc các biến cùng tên; có thể rất
nhàm chán để duyệt qua tất cả các tệp trong một dự án để đảm bảo chắc chắn rằng
mọi cá thể được xác định và được thay đổi chính xác.
Di chuyển và Đổi tên (Rename and Move) của Eclipse có thể thực hiện các thay
đổi này một cách thông minh, trong suốt toàn bộ dự án, mà không có sự can thiệp
của người dùng, vì Eclipse hiểu mã theo ngữ nghĩa và có thể xác định các tham
chiếu đến một phương thức, biến cụ thể, hoặc các tên lớp. Việc thực hiện nhiệm
vụ này dễ dàng giúp đảm bảo rằng phương thức, biến và các tên lớp thể hiện rõ
ràng ý định của chúng.