Decoupling — Tách Biệt Code Để Dễ Thay Đổi (Pragmatic Programmer #28)
Mở đầu
Ảnh: ThisisEngineering — Pexels
Mình đang đọc cuốn The Pragmatic Programmer (bản 20th Anniversary) và viết series cảm nhận từng topic. Hôm nay tới Topic 28 trong chương Bend, or Break. Mình thấy cuốn sách này hay ở chỗ nó không chỉ dạy code mà dạy cách nghĩ như một lập trình viên chuyên nghiệp. Series này mình viết theo kiểu chia sẻ thật lòng, dễ hiểu, hy vọng mấy bạn cũng thấy hữu ích.
Decoupling
Ảnh: Pixabay — Pexels
Decoupling là kỹ thuật tách biệt các phần code ra để chúng ít phụ thuộc vào nhau nhất có thể. Khi code của bạn coupling chặt chẽ (liên kết mạnh), thay đổi một chỗ sẽ kéo theo thay đổi hàng loạt chỗ khác, dễ gây bug và khó maintain. Ngược lại, decoupling giúp code linh hoạt, dễ mở rộng, dễ test.
Cuốn sách nói về Law of Demeter (hay Principle of Least Knowledge): một object chỉ nên nói chuyện với bạn bè gần gũi của nó, không nên "đi sâu" vào cấu trúc bên trong của object khác. Ví dụ thay vì gọi user.getAddress().getStreet(), thì nên có method user.getStreetAddress() để giấu implementation bên trong.
Trong thực tế lập trình, decoupling thể hiện qua việc dùng interface, dependency injection, event-driven architecture, microservices... Mình từng thấy project monolithic mà mọi class đều biết hết về nhau, sửa một feature là sợ hãi vì sợ ảnh hưởng toàn bộ hệ thống.
Cảm nhận của mình
Ảnh: Daniel — Pexels
Mình thấy topic này cực kỳ hay và thực tế. Hồi mới làm dự án, mình hay viết code theo kiểu "gọi thẳng" hết, dẫn đến code thành "spaghetti code" – rối như tơ vò. Sau này học được decoupling thì code sạch sẽ hơn nhiều, khi cần thay đổi database hay API thì chỉ sửa ở một lớp trung gian là xong, không đụng tới business logic.
Câu chuyện thật của mình là có lần team refactor một module payment. Vì coupling quá chặt nên mất cả tuần mới deploy được mà vẫn còn bug. Nếu áp dụng decoupling từ đầu thì chắc chỉ mất 2-3 ngày. Topic này nhắc mình luôn phải nghĩ đến "tương lai" khi viết code hôm nay.
Kết
Tóm lại, decoupling giúp code của chúng ta "bend, or break" – uốn cong được thay vì gãy đổ khi có thay đổi. Đây là một trong những kỹ năng quan trọng nhất để trở thành pragmatic programmer. Hẹn mấy bạn ở topic sau nha!