2012-01-30 25 views
11

Trước đây tôi đã thấy một luồng trên StackOverflow có một số thảo luận về điều này, tuy nhiên tôi không thể tìm thấy nó một lần nữa!Sử dụng System.Diagnostics.Contract in Release builds

Tôi quan tâm để biết các lớp System.Diagnostics.Contract có nên được sử dụng trong 'mã thực' hay không, tức là bản phát hành bản dựng mã sản xuất? Tôi hỏi điều này, bởi vì dựa trên mô tả không gian tên, nó xuất hiện Hợp đồng nhằm mục đích gỡ lỗi, hoặc các mục đích phân tích. Nó có vẻ giống như một thư viện hữu ích, nơi điều kiện trước/sau cho chức năng là quan trọng, và có thể tránh một số nỗ lực trong việc viết rất nhiều nếu/sau đó/kiểm tra khác, vì vậy nếu đây là trường hợp, là có một thay thế trong các thư viện cốt lõi?

+1

Vui lòng không thêm tiền tố vào tiêu đề của bạn bằng "C#" và như vậy. Đó là những gì các thẻ cho. –

Trả lời

11

Mục 5.1 (Đối số Validation và Hợp đồng) của documentation chi tiết ba chế độ sử dụng chính bạn có thể cân nhắc cho việc sử dụng hợp đồng: xác nhận

  1. Luận qua Hợp đồng chỉ trong Debug xây dựng, chứ không phải trong phiên bản xây dựng.
  2. Xác thực cũng trong Bản phát hành bản phát hành.
  3. Xác thực đối số tùy chỉnh trong Bản dựng bản phát hành, Chỉ hợp đồng trong các bản dựng Gỡ lỗi.

Vì vậy, có ít nhất một chế độ sử dụng nơi bạn muốn sử dụng Hợp đồng xây dựng bản phát hành, ít nhất là tài liệu chính thức có liên quan.

Trích:

Trước khi bạn bắt đầu sử dụng các hợp đồng trong mã của riêng bạn, bạn cần phải thực hiện một vài quyết định rằng các hình thức ảnh hưởng gì hợp đồng sử dụng để xác nhận lập luận và ở đâu (xem Hình 2). Lưu ý rằng bạn có thể đưa ra các quyết định này một cách độc lập cho mỗi hội đồng quản lý mà bạn sản xuất (mỗi dự án):

Việc sử dụng dễ dàng nhất các công cụ hợp đồng là bạn quyết định không thực hiện xác thực đối số khi chạy trong bản phát hành. Cách sử dụng 1). Trong trường hợp đó, bạn sử dụng các công cụ hợp đồng trong quá trình phát triển, nhưng không sử dụng các bit được vận chuyển. Hãy nhớ rằng, bạn có thể gửi một hợp đồng tham chiếu hợp đồng cùng với các bit phát hành của bạn để khách hàng có thể kiểm tra thời gian chạy các xác thực tham số của bạn trên các bản dựng lỗi của họ thông qua cuộc gọi yêu cầu kiểm tra.

Cách tiếp cận dễ dàng thứ hai nếu bạn cần xác thực đối số trong bản phát hành bản phát hành là bật kiểm tra hợp đồng trong tất cả các bản dựng (Cách sử dụng 2). Do đó, bạn tận dụng lợi thế của các công cụ để tạo ra các chuỗi thời gian chạy của các điều kiện của bạn và để thực hiện kế thừa hợp đồng cho bạn. Bạn có thể chọn để tạo ra các ngoại lệ cụ thể cho các xác nhận tham số của mình hoặc có ContractException mặc định. Nguy cơ sử dụng các công cụ hợp đồng trong bản phát hành bản phát hành của bạn là bạn phụ thuộc vào các công cụ chưa đạt đến mức chất lượng sản xuất.

Sự kết hợp khó nhất là khi bạn muốn xác thực đối số trong bản phát hành, nhưng bạn đang sử dụng công cụ hợp đồng để kiểm tra thời gian chạy trong bản dựng gỡ lỗi, nhưng không phải trong bản phát hành (Cách sử dụng 3). Trong trường hợp đó, bạn phải tiếp tục viết xác nhận đối số theo cách bạn đã làm, cụ thể là sử dụng câu lệnh if-then-throw (chúng tôi gọi chúng là yêu cầu kế thừa). Nếu bạn muốn những công cụ này có thể được phát hiện, hãy thêm các hợp đồng khác (như Đảm bảo) sau chúng, hoặc sử dụng Contract.EndContractBlock(), nếu không có hợp đồng nào khác. Lưu ý rằng vì bạn không sử dụng các công cụ kiểm tra thời gian chạy trong bản phát hành bản phát hành, bạn sẽ không nhận được bất kỳ kế thừa hợp đồng nào và bạn phải lặp lại yêu cầu thừa kế của mình trên ghi đè và triển khai giao diện theo cách thủ công.Đối với các phương thức trừu tượng và giao diện, bạn vẫn nhận được nhiều lợi ích nhất nếu bạn viết các lớp hợp đồng với yêu cầu bình thường và đảm bảo các biểu mẫu để bạn kiểm tra các bản dựng lỗi và chúng xuất hiện trong các hội đồng tham chiếu hợp đồng và do đó có thể nhìn thấy các dự án phụ thuộc và các bộ kiểm tra tĩnh.

Điều này cũng gợi ý những gì thay thế bằng cách sử dụng chỉ các phần khác của khung là: Cách thông thường khi sử dụng if-then-throw.

Các vấn đề liên quan