Tag Archives: thiết kế đơn giản

[XP] Tính đơn giản là chìa khóa

Việc thiết kế đơn giản luôn mất thời gian hơn việc thiết kế phức tạp. Vì vậy, hãy làm những việc đơn giản nhất mà trước mắt hoạt động. Nếu bạn thấy có chỗ nào đó phức tạp thì hãy thay thế nó bằng thứ đơn giản. Lúc này, việc thay thế mã phức tạp của bạn sẽ luôn nhanh và rẻ hơn so với khi bạn lãng phí nhiều thời gian vào nó.

Rất nhiều người cố gắng đo lường sự đơn giản. Sự đơn giản thách thức sự đo lường bởi vì nó là một phẩm chất rất chủ quan. Sự đơn giản của người này là phức tạp của người khác. Thêm một công nghệ tiên tiến có thể đơn giản hóa một ứng dụng và tạo ra một mớ hoàn toàn hỗn độn cho mọi thứ khác.

Trong dự án cả đội quyết định điều gì là đơn giản. Cùng nhau bạn đánh giá mã nguồn của mình một cách chủ quan. Tôi khuyên bạn 4 giá trị chủ quan : kiểm thử được (Testable), dễ hiểu ( Understandable), tìm kiếm được (Browsable) và dễ giải thích (Explainable).

Kiểm thử được nghĩa là bạn có thể viết các kiểm thử đơn vị và các kiểm thử chấp nhận để kiểm thử lỗi tự động. Điều này ảnh hưởng đến thiết kế tổng thể và tính phụ thuộc của các đối tượng trong ứng dụng của bạn. Hãy xé nhỏ,hệ thống của bạn thành các đơn vị nhỏ có thể kiểm thử được.

Tìm kiếm được tức là khả năng tìm những gì bạn muốn.Tên tốt giúp bạn tìm kiếm. Sử dụng tính đa hình (polymorphism), ủy thác (delegation), và thừa kế (inheritance) một cách đúng đắn giúp bạn tìm kiếm chính xác mọi thứ.

Dễ hiều là hiển nhiên, nhưng rất chủ quan. Một nhóm đã làm việc lâu với một hệ thống sẽ hiểu được những thứ mà nhiều người mới hoàn toàn bị rối. Vì vậy, tôi cho rằng một thiết kế đơn giản là dễ giải thích khi dễ dàng chỉ cách làm việc của mọi thứ cho người mới làm thế nào tất cả mọi thứ hoạt động.

Nhiều người đề nghị một thức đo độ đơn giản là : một lần và chỉ một lần. Để nhớ được điều này ta phải quan tâm tới hai phần sau: Mọi người dường như hiểu phần “chỉ một lần”nhưng không phải “một lần và”. Phần đầu thể hiện tất cả ý đồ trong đoạn mã của bạn ngay cả khi nó mang nghĩa là lặp.

Hãy xét một ví dụ đơn giản sau: Bạn nhân với 100 để chuyển phân số thành phần àyăm và nhân với 100 để chuyển mét thành centimet. Ta có nên làm một hàm đơn giản nhân với 100 gọi là converToPercentOrMeters(x)? KHÔNG! Ngay cả khi điều này loại bỏ vài sự trùng lặp. Bạn sẽ muốn 2 phương thức sau: đó là convertToPercent(aFraction), và convertMetersToCentimeters(aLength). Bạn muốn cả hai bởi vì chúng cho bạn biết 2 thứ khác biệt. Không chỉ là bạn sẽ nhân với 100 mà còn là lý do nhân với 100 và loại số đầu vào hợp lệ.

Một điều về thiết kế đơn giản là chúng đòi hỏi kiến thức để nhận ra. Kiến thức này khác với thông tin, bạn có thể có rất nhiều thông tin mà không có kiến thức nào cả. Kiến thức là hiểu biết về miền vấn đề của bạn, nó phát triển theo thời gian.

Thiết kế đơn giản thường tới khi dự án chạy được một thời gian. Cách tiếp cận tốt nhất là chỉ viết mã cho những tính năng mà bạn đang cài đặt trong khi bạn tìm kiếm đủ kiến thức để phát lộ ra thiết kế đơn giản nhất. Sau đó hãy tái cấu trúc một cách tăng dần để cài đặt những hiểu biết và thiết kế mới của bạn.

Hãy giứ mọi thứ đơn giản nhất có thể bằng cách không bao giờ bổ sung thêm chức năng trước khi nó được lên kế hoạch. Hãy cẩn thận, vì giữ vững một thiết kế đơn giản thực sự là một công việc vất vả!

Nguồn XP

Người dịch: Nguyễn Văn TèoBiên tập:Phạm Anh Đới