Gần đây tôi đang đọc một trang web về phát triển mã sạch (tôi không đặt liên kết ở đây vì nó không phải bằng tiếng Anh).
Một trong những nguyên tắc được quảng cáo bởi trang web này là Nguyên tắc đóng mở : mỗi thành phần phần mềm nên được mở để mở rộng và đóng để sửa đổi. Ví dụ, khi chúng tôi đã triển khai và thử nghiệm một lớp, chúng tôi chỉ nên sửa đổi nó để sửa lỗi hoặc thêm chức năng mới (ví dụ: các phương thức mới không ảnh hưởng đến các lớp hiện có). Các chức năng hiện có và thực hiện không nên được thay đổi.
Tôi thường áp dụng nguyên tắc này bằng cách định nghĩa một giao diện I
và một lớp thực hiện tương ứng A
. Khi lớp A
đã ổn định (được triển khai và thử nghiệm), tôi thường không sửa đổi nó quá nhiều (có thể, hoàn toàn không), tức là
- Nếu các yêu cầu mới xuất hiện (ví dụ hiệu năng hoặc triển khai giao diện hoàn toàn mới) yêu cầu thay đổi lớn đối với mã, tôi viết một triển khai mới
B
và tiếp tục sử dụngA
miễnB
là chưa hoàn thiện. KhiB
trưởng thành, tất cả những gì cần thiết là thay đổi cáchI
khởi tạo. - Nếu các yêu cầu mới cũng đề xuất thay đổi giao diện, tôi xác định giao diện mới
I'
và cách triển khai mớiA'
. Vì vậyI
,A
rất đông lạnh và duy trì việc thực hiện cho hệ thống sản xuất chừng nàoI'
vàA'
không đủ ổn định để thay thế chúng.
Vì vậy, theo quan sát của những quan sát này, tôi hơi ngạc nhiên khi trang web sau đó đề xuất sử dụng các phép tái cấu trúc phức tạp , "... bởi vì không thể viết mã trực tiếp ở dạng cuối cùng."
Không có mâu thuẫn / xung đột giữa việc thực thi Nguyên tắc Mở / Đóng và đề xuất sử dụng các phép tái cấu trúc phức tạp như một cách thực hành tốt nhất? Hoặc ý tưởng ở đây là người ta có thể sử dụng các phép tái cấu trúc phức tạp trong quá trình phát triển một lớp A
, nhưng khi lớp đó đã được thử nghiệm thành công thì nó có nên bị đóng băng không?