Tôi đã muốn tìm một câu trả lời chắc chắn cho câu hỏi có hay không kiểm tra thời gian chạy để xác thực đầu vào cho các mục đích đảm bảo khách hàng đã bị mắc kẹt trong thỏa thuận thiết kế của họ theo hợp đồng. Ví dụ, hãy xem xét một hàm tạo lớp đơn giản:
class Foo
{
public:
Foo( BarHandle bar )
{
FooHandle handle = GetFooHandle( bar );
if( handle == NULL ) {
throw std::exception( "invalid FooHandle" );
}
}
};
Tôi sẽ tranh luận trong trường hợp này rằng người dùng không nên cố gắng xây dựng Foomà không có giá trị BarHandle. Có vẻ không đúng khi xác minh rằng barnó hợp lệ bên trong hàm tạo của Foonó. Nếu tôi chỉ đơn giản là tài liệu Foocủa hàm tạo đó yêu cầu một giá trị hợp lệ BarHandle , thì điều đó có đủ không? Đây có phải là một cách thích hợp để thực thi điều kiện tiên quyết của tôi trong thiết kế bằng hợp đồng?
Cho đến nay, mọi thứ tôi đọc đều có ý kiến trái chiều về điều này. Có vẻ như 50% mọi người sẽ nói để xác minh barlà hợp lệ, 50% còn lại sẽ nói rằng tôi không nên làm điều đó, ví dụ như xem xét trường hợp người dùng xác minh BarHandlelà đúng, nhưng kiểm tra lần thứ hai (và không cần thiết) cũng đang được thực hiện bên trong nhà Fooxây dựng của.