Tuesday, August 16, 2005

What is a design?

Design (verb) là hoạt động gì?
Vấn đề này phức tạp quá :D. Để dành lại.

Design (noun) là cái gì ?
Một bản design thì phải như thế nào ? Nói cách khác, kết quả của hành động design như thế nào ? Lấy ví dụ một kỹ sư chế tạo mạch điện tử, bản thiết kế mạch điện của anh ta là gì?

Theo tôi hiểu, một bản design là một góc nhìn khác của mã nguồn. Một bản design phải là một "cái gì" đó mà nhìn vào, các coder phải hiểu cùng một cách và code được.

Không nên phân biệt bản design ở "high level" và bản dành cho "low level". Design là một quá trình tinh chỉnh từ high xuống low level, và kết quả là bản design cuối cùng, và nên gọi những bản đầu tiên là các bản draft.

Design có nhiều góc độ: nhìn tổng quan hệ thống (overview), nhìn theo góc độ phân phối vật lý, nhìn từ góc độ đóng gói v.v... Tất cả đều có thể cài đặt được.

Như vậy, cố gắng tinh giản nó đi. Chọn cách đơn giản nhất mà làm. Nhận xét thực tế như sau:

* Designer thiết kế bằng cách tiên đoán các lớp/hàm/thuộc tính v.v... Nhưng gần như trên 50% là tiên đoán dư, coder nghĩ rằng dư cũng không sao và tiếp tục code cả phần dư. Cho đến một lúc nhận thấy design có những lớp/hàm/thuộc tính quá khó cài đặt. Họ có 2 chọn lựa:
* Thêm những class/method/thuộc tính mới, và từ đây về sau dùng class mới này, còn những code đã rồi thì cứ để đấy
* Điều chỉnh "một tí xíu" trong code, design đâu phải lúc nào cũng tiên đoán đúng, phải biết linh hoạt v.v...

* Trong 100% các trường hợp, nếu bản design đưa ra đầy đủ các API (class/method/attribute), coder sẽ gặp khó khăn trong cài đặt; feed back này là đúng, và bản thân designer cũng không cài đặt nổi và dẫn đến điều chỉnh thiết kế.

Vì sao không xem code là design ? Cách nói này ít nhiều mang tính thậm xưng. Hiểu thoáng đi nên là:
1. Coder và designer cùng thực hiện một module
2. Quyết định overview của module
3. Thực hiện draf design
4. Code dựa trên bản draft
5. Refine lại design
6. Refactoring lại code cho phù hợp
7. Tiếp tục code trên bản design vừa refine
8. Quay lại bước 5.

Kết quả cuối cùng là một bản overview + code + các diagram vừa vặn với code.

No comments: