Thiết kế theo hợp đồng (DbC) có thể là một cách để lập trình phòng thủ?
Là một cách lập trình tốt hơn trong một số trường hợp so với cách khác?
Thiết kế theo hợp đồng (DbC) có thể là một cách để lập trình phòng thủ?
Là một cách lập trình tốt hơn trong một số trường hợp so với cách khác?
Câu trả lời:
Thiết kế theo Hợp đồng và lập trình phòng thủ theo một số ý nghĩa trái ngược nhau: trong DbC, bạn xác định hợp đồng giữa các cộng tác viên và bạn lập trình theo giả định rằng các cộng tác viên tôn trọng hợp đồng của họ. Trong lập trình phòng thủ, bạn lập trình theo giả định rằng các cộng tác viên của bạn vi phạm hợp đồng của họ.
Một thói quen căn bậc hai thực sự được viết theo kiểu DbC sẽ nêu trong hợp đồng của nó rằng bạn không được phép chuyển số âm và sau đó chỉ cần giả định rằng nó không bao giờ có thể gặp số âm. Một thói quen căn bậc hai thực sự được viết một cách phòng thủ sẽ cho rằng nó được thông qua một số âm và có biện pháp phòng ngừa thích hợp.
Lưu ý: tất nhiên có thể là trong DbC sẽ có người khác kiểm tra hợp đồng. Ví dụ, tại Eiffel, hệ thống hợp đồng sẽ kiểm tra số âm trong thời gian chạy và đưa ra một ngoại lệ thích hợp. Trong Spec #, người cung cấp định lý sẽ kiểm tra các số âm tại thời điểm biên dịch và không xây dựng được, nếu điều đó không thể chứng minh rằng thói quen sẽ không bao giờ vượt qua số âm. Sự khác biệt là lập trình viên không thực hiện kiểm tra này.
Thiết kế theo hợp đồng (DbC) có thể là một cách để lập trình phòng thủ?
Vâng.
"Lập trình phòng thủ" thường là một cái cớ để lãng phí thời gian. Nó thường lãng phí thời gian để kiểm tra những thứ sẽ gây ra ngoại lệ thông thường. Thay vì các trường hợp ngoại lệ, các câu lệnh IF bổ sung được viết thay vì các mệnh đề xử lý ngoại lệ.
Xác định hợp đồng và được thực hiện với nó.
Khi ai đó vi phạm hợp đồng, chương trình sẽ - trong quá trình bình thường của sự kiện - phá vỡ và đưa ra các ngoại lệ bình thường có thể được xử lý thông thường.
"Lập trình phòng thủ" và "Ngăn ngừa lỗi" có thể được hiển thị để thêm lỗi (vì bản thân các kiểm tra phòng ngừa lỗi là sai) thay vì ngăn ngừa lỗi.
Xử lý ngoại lệ có thể làm im lặng, ghi nhật ký và xử lý một ngoại lệ tốt hơn nhiều so với "Lập trình phòng thủ".