Lý do để chờ đến lần thứ ba trong Quy tắc ba?


16

Tôi vừa xem qua bài viết " Quy tắc ba " trong wikipedia

Quy tắc ba là quy tắc tái cấu trúc mã để quyết định khi nào một đoạn mã được sao chép sẽ được thay thế bằng một thủ tục mới. Nó nói rằng mã có thể được sao chép một lần, nhưng khi cùng một mã được sử dụng ba lần, nó sẽ được trích xuất thành một thủ tục mới. Quy tắc được Martin Fowler đưa ra trong Tái cấu trúc và quy cho Don Roberts.

Tôi biết rằng đây chỉ là một quy tắc, nhưng tại sao chỉ nên cấu trúc lại sau lần sao chép thứ hai? Có bất kỳ nhược điểm nào để tái cấu trúc khi chúng ta viết bản sao đầu tiên không?


2
See Two là một con số không thểquy tắc Zero-One-Infinity cho một tập hợp các quan điểm khác.
AakashM

Khi nói về phát triển phần mềm, Wiki gốc thường là một nguồn tốt hơn nhiều so với Wikipedia. Rốt cuộc, Ward Cickyham đã phát minh ra Wiki như một phương tiện để nói về phát triển phần mềm. Xem C2.Com/cgi/wiki?RuleOfThree
Jörg W Mittag

2
Nếu có 2 kịch bản để sử dụng lại, bạn có thể phân nhánh logic dễ dàng (nếu, khác). Một khi nó đạt đến ba đường dẫn có thể, nó trở nên dễ dàng hơn để nhân tố lại hơn là nhân rộng và duy trì.
Andrew Lewis


Tôi nghĩ rằng đó là một lý do thuận tiện cho việc sao chép-dán, khi người ta thực sự có thể cấu trúc lại và khái quát hóa. Khi bạn nhận được trường hợp thứ ba, bạn có thể khái quát hơn.
Alexey

Câu trả lời:


17

Tôi nghĩ rằng quy tắc này tồn tại bởi vì rất dễ bị bắt gặp khi chơi "Điều gì xảy ra nếu ..." khi thiết kế mã lần đầu tiên hoặc sau lần sao chép đầu tiên. Tôi đã gặp phải tình trạng tê liệt phân tích nghiêm trọng trong một số trường hợp vì mọi người bắt đầu thiết kế chức năng có thể cần thiết sau này. Nhưng không cần thiết cho vấn đề trước mắt.

Có một nghệ thuật để chỉ thiết kế / viết những gì bạn cần, trong khi vẫn giữ mã có thể tuân theo quy định lại trong tương lai.


8
Đó là một điểm hay. Theo kinh nghiệm của tôi, có một bản sao thứ ba cũng làm cho sự tương đồng và khác biệt giữa chúng sắc nét hơn một chút so với chỉ có hai.
Daniel B
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.