33. Những lớp tối giản (minimal classes) vẫn hơn những lớp nguyên khối (monolithic classes)

Estimated reading: 5 minutes 265 views

Tóm tắt

“Chia để trị”: Các lớp nhỏ thì dễ viết hơn, dễ làm đúng hơn, dễ kiểm thử và dễ sử dụng hơn. Chúng cũng có khả năng được tái sử dụng trong nhiều tình huống hơn. Hãy ưu tiên những lớp nhỏ thực hiện những khái niệm/ công việc đơn giản, thay vì những lớp “tạp nham” (kitchen-sink classes) cố gắng hiện thực nhiều khái niệm và/hoặc phức tạp (Mục 5 và 6).

Thảo luận

Việc thiết kế những lớp lớn, cầu kỳ là một sai lầm điển hình khi mới bắt đầu thiết kế hướng đối tượng. Viễn cảnh có một lớp cung cấp đầy đủ chức năng phức tạp trong một lần duy nhất có thể rất hấp dẫn. Tuy nhiên, trên thực tế, cách tiếp cận thiết kế những lớp nhỏ, tối giản, có thể dễ dàng kết hợp lại với nhau thường thành công hơn nhiều trong các hệ thống ở bất kỳ quy mô nào, vì nhiều lý do:

  • Một lớp tối giản thể hiện một khái niệm ở mức độ chi tiết phù hợp.
    Một lớp nguyên khối thường sẽ gộp nhiều khái niệm riêng biệt, và việc dùng một khái niệm kéo theo gánh nặng phải mang cả những khái niệm khác. (Mục 5 và 11.)

  • Một lớp tối giản dễ hiểu hơn, và có nhiều khả năng được sử dụng và tái sử dụng hơn.

  • Một lớp tối giản dễ triển khai hơn.
    Lớp nguyên khối thường phải được triển khai như một khối cồng kềnh, không thể chia tách. Ví dụ, một lớp Matrix nguyên khối có thể cố gắng hiện thực cả những chức năng phức tạp như tính toán giá trị riêng (eigenvalues) của ma trận — trong khi đa số người dùng chỉ cần những phép toán đại số tuyến tính cơ bản.
    Một cách đóng gói tốt hơn là hiện thực từng phần chức năng khác nhau thành hàm phi thành viên (non-member functions) hoạt động trên một lớp Matrix tối giản. Khi đó, các phần chức năng có thể được kiểm thử và triển khai riêng biệt cho từng nhóm người dùng cần chúng. (Mục 44.)

  • Các lớp nguyên khối làm loãng tính bao đóng (encapsulation).
    Khi một lớp có quá nhiều hàm thành viên vốn không cần phải là thành viên nhưng lại được thêm vào — và vì thế được cấp quyền truy cập thừa thãi đến phần cài đặt riêng tư (private) của lớp — thì dữ liệu private của lớp chẳng khác gì dữ liệu public.

  • Các lớp nguyên khối thường xuất phát từ nỗ lực dự đoán và cung cấp một giải pháp “hoàn chỉnh” cho vấn đề.
    Nhưng trong thực tế, chúng hầu như không bao giờ thành công. Luôn luôn sẽ có những tính năng mà người dùng muốn thêm vào — và cũng có những thứ họ thấy thừa thãi.

  • Các lớp nguyên khối khó làm cho đúng và an toàn hơn, vì chúng thường phải xử lý nhiều trách nhiệm cùng lúc. (Mục 5 và 44.)

Tham khảo

[Cargill92] pp. 85-86, 152, 174-177 • [Lakos96] §0.2.1-2, §1.8, §8.1-2 • [Meyers97] §18 • [StroustrupOO] §16.2.2, §23.4.3.2, §24.4.3 • [SutterO4] §37-40

Link

Leave a Comment

Chia sẻ:

33. Những lớp tối giản (minimal classes) vẫn hơn những lớp nguyên khối (monolithic classes)

Or copy link

CONTENTS