Gần đây tôi đã phát hiện ra Thiết kế theo Hợp đồng (DbC) và tôi thấy đó là một cách cực kỳ thú vị để viết mã. Trong số những thứ khác, nó dường như sẽ cung cấp:
- Tài liệu tốt hơn. Vì hợp đồng là tài liệu, nên không thể hết hạn. Ngoài ra, vì hợp đồng chỉ định chính xác những gì một thói quen làm, nó giúp hỗ trợ tái sử dụng.
- Gỡ lỗi đơn giản hơn. Vì việc thực hiện chương trình dừng thời điểm hợp đồng thất bại, lỗi không thể lan truyền và xác nhận cụ thể bị vi phạm có lẽ sẽ được nêu bật. Điều này cung cấp hỗ trợ trong quá trình phát triển và trong quá trình bảo trì.
- Phân tích tĩnh tốt hơn. DbC về cơ bản chỉ là một triển khai logic Hoare, và các nguyên tắc tương tự nên được áp dụng.
Các chi phí, so với dường như là khá nhỏ:
- Gõ thêm ngón tay. Vì các hợp đồng phải được đánh vần.
- Có một số lượng đào tạo để có được thoải mái với các hợp đồng bằng văn bản.
Bây giờ, quen thuộc với Python chủ yếu, tôi nhận ra rằng trên thực tế có thể viết ra các điều kiện tiên quyết (chỉ cần đưa ra các ngoại lệ cho đầu vào không phù hợp) và thậm chí có thể sử dụng các xác nhận để kiểm tra lại các điều kiện hậu kỳ nhất định. Nhưng không thể mô phỏng một số tính năng nhất định như 'cũ' hoặc 'kết quả' mà không có một số phép thuật bổ sung mà cuối cùng sẽ được coi là không phải là Pythonic. (Ngoài ra, có một vài thư viện cung cấp hỗ trợ, nhưng cuối cùng tôi cảm thấy rung cảm khi sử dụng chúng, vì hầu hết các nhà phát triển thì không.) Tôi cho rằng đó là một vấn đề tương tự đối với tất cả các ngôn ngữ khác (tất nhiên ngoại trừ , Eiffel).
Trực giác của tôi nói với tôi rằng việc thiếu sự hỗ trợ phải là kết quả của một số loại từ chối thực hành, nhưng tìm kiếm trực tuyến đã không có kết quả. Tôi đang tự hỏi nếu ai đó có thể làm rõ tại sao hầu hết các ngôn ngữ hiện đại dường như cung cấp rất ít sự hỗ trợ? Là DbC thiếu sót hoặc quá đắt? Hay nó chỉ là lỗi thời do Lập trình cực đoan và các phương pháp khác?