Hỗn Độn
Vài hôm nay tôi hoàn thành một yêu cầu mới, đồng thời phải bảo trì đoạn mã do đồng nghiệp cũ viết. Cả ngày hôm trước tôi vật lộn với đống code, cuối cùng hiểu ra được thì cảm giác như vừa trải qua cơn ác mộng. Thiết kế giao diện cũ rối như canh hẹ, khiến tôi muốn phát điên.
Việc thêm chức năng mới vào kiến trúc cũ là điều hoàn toàn trái ngược với thẩm mỹ của tôi. Nếu tiếp tục chấp nhận hiện trạng, chắc chắn tôi sẽ mất ngủ vì ám ảnh. Quyết định mạo hiểm tái cấu trúc hệ thống khiến tôi cảm thấy như gánh thêm trọng trách. May mắn thay, đây là lớp code nền tảng, chỉ có tầng trung gian sử dụng mà không ảnh hưởng đến tầng trên.
Kết quả là tôi xoá đi hơn 2000 dòng code cũ, viết lại cùng chức năng mới chỉ với khoảng 900 dòng. Số lượng giao diện, kể cả những giao diện mới thêm, giảm xuống còn một nửa so với trước. Ngoài ra, tôi còn sửa đổi ở 30 file nguồn sử dụng các giao diện này. Đến tận khuya hôm qua, khi hoàn thành mọi thứ và biên dịch thành công toàn bộ dự án, tôi mờ mắt vì mỏi mệt.
Hôm nay tôi test cẩn thận từng chút một, bất ngờ là buổi sáng không phát hiện lỗi nào, khiến tôi lo lắng không yên. Đến chiều mới tìm thấy một bug nhỏ, giải quyết xong xuôi vào buổi tối. Cảm giác nhẹ nhõm lan tỏa trong tâm trí tôi.
Thiết kế tinh tế nhưng không cầu kỳ là điều vô cùng quan trọng. Đừng bao giờ nghĩ rằng mọi thành viên trong nhóm đều đủ giỏi để hiểu những “sáng tạo tinh vi” của bạn. Thậm chí khi cả nhóm đều là cao thủ, những thiết kế phức tạp kiểu này lại càng dễ bị bài trừ. Dù họ hoàn toàn có khả năng hiểu được.
Vì vậy, nếu không thể giải thích cho một người mới trong 10 phút hiểu cách sử dụng mã của bạn, hoặc một người bình thường không được hỗ trợ vẫn không thể hiểu trong 2 giờ, thì đó là dấu hiệu cho thấy bạn đã thiết kế sai. Dù bạn có kiểm tra bao nhiêu lần đi nữa, những thiết kế kiểu này rồi sẽ bị sử dụng sai cách vào một ngày không xa.
Mặt khác, cũng đừng dễ dàng từ bỏ việc thiết kế. Khi gặp yêu cầu khó thực hiện đơn giản, đừng vội vàng giải quyết qua loa. Điều đáng buồn là khi bạn có trong tay “cái búa” mạnh mẽ, bạn càng dễ gõ bừa. Ví dụ như khi dùng C++, bạn vội vã thêm vài lớp kế thừa, áp dụng đa hình, rồi lại chơi trội với template và nạp chồng toán tử. Sao chép nguyên mẫu thiết kế từ sách giáo khoa, cố gắng “giải quyết vấn đề” một cách hào nhoáng.
Hãy tự hỏi bản thân: Liệu thực sự cần thiết phải như vậy không?
Những vấn đề đòi hỏi phải dùng tính năng cao cấp của ngôn ngữ mới giải quyết được thường là dấu hiệu của thiết kế sai lầm. Ngược lại, nếu bạn dùng C, đừng than phiền vì thiếu lớp hay kế thừa. Hãy cảm thấy may mắn khi không có những thứ làm nhiễu tư duy, cản trở bạn tạo ra thiết kế thực sự tinh gọn.
Ít hơn chính là nhiều hơn.