14

Tôi đang trang trí mã C# của mình với các nhận xét để tôi có thể tạo các tệp trợ giúp HTML.Tài liệu giao diện và cách triển khai của chúng

Tôi thường tuyên bố và ghi lại giao diện. Nhưng các lớp thực hiện các giao diện đó có thể ném các ngoại lệ cụ thể tùy thuộc vào việc thực hiện.

Đôi khi, khách hàng chỉ biết về các giao diện mà anh ấy đang sử dụng. Tôi có nên ghi lại các giao diện của mình bằng cách thêm các ngoại lệ có thể có được các trình triển khai của nó ném ra không?

Tôi có nên tạo/ghi lại các ngoại lệ tùy chỉnh để các trình triển khai giao diện thực hiện việc này thay vì các khung công tác không?

Tôi hy vọng điều này là rõ ràng!

Cảm ơn

EDIT 04 Tháng Một 2010: Tôi quyết định viết một bài đăng blog về vấn đề này và các ngoại lệ tùy chỉnh trong .NET tại http://blog.mikecouturier.com/2010/01/creating-custom-exceptions-in-net-right.html

+0

Bạn có thể trả lời câu hỏi của riêng bạn – Jodrell

Trả lời

14

Tôi không chắc chắn tôi hoàn toàn hiểu câu hỏi của bạn (và tôi là một Java, không phải nhà phát triển C#), nhưng có vẻ như bạn đang hỏi về vấn đề đa hình là gì: nếu ai đó sử dụng phương thức trên giao diện được khai báo để ném X và Y, điều gì sẽ xảy ra nếu triển khai ném Z?

Một điều cần làm theo là nguyên tắc phù hợp, về cơ bản nói rằng một loại phụ phải phù hợp với hành vi của siêu kiểu. Tức là, nếu bạn đang ghi lại rằng phương thức của bạn trong giao diện chỉ có thể ném ngoại lệ của một loại (ví dụ: ngoại lệ con trỏ rỗng), thì hợp đồng của bạn với người gọi là điều duy nhất họ nên xem. Nếu bạn ném cái gì khác, bạn có thể làm họ ngạc nhiên.

Ghi lại mọi thứ về một loại phụ cụ thể trong siêu kiểu không phải là ý tưởng hay vì nó tạo ra sự ghép nối không cần thiết. Tôi sẽ quan tâm nhiều hơn đến thực tế rằng việc thực hiện có thể hành xử khác với tuyên bố vì điều đó có thể gợi ý rằng tuyên bố không đủ xác thịt.

Hãy thử nghĩ rằng tất cả các loại ngoại lệ mà phương pháp của bạn có thể ném. Tạo siêu kiểu cho chúng và sau đó khai báo rõ ràng trong phương thức giao diện của bạn (ví dụ: phương pháp này có thể ném một số "ngoại lệ tính toán"). Sau đó, trong quá trình triển khai của bạn, hãy ném ngoại lệ tính toán với nhiều chi tiết hơn hoặc ném một số loại phụ của ngoại lệ tính toán cụ thể cho việc triển khai, bạn vẫn sẽ tuân thủ.

+0

câu trả lời hay. Chỉ là những gì tôi định nói. –

+0

Tuyệt vời bạn đóng đinh nó. Tôi sẽ tạo các ngoại lệ tùy chỉnh để các kiểu con sẽ ném chúng.Tôi sẽ làm cho mọi thứ đủ chung để nếu các kiểu con không thể đọc một phản hồi trong XML hoặc trong JSON (tùy thuộc vào việc thực hiện), chúng sẽ có thể ném một ParseException ví dụ (và không phải là một XmlException cho cái cũ). Cảm ơn! –

6

Tôi đồng ý với mọi thứ mà Uri nói - bạn nên tạo ra các ngoại lệ tùy chỉnh hợp lý có thể được mở rộng nếu được yêu cầu sau đó một phương pháp sử dụng tham số được nhập vào giao diện của bạn có thể bắt ngoại lệ đó và nó cũng sẽ loại trừ ngoại lệ.

Đừng tạo ra chúng không cần thiết tuy nhiên, nếu có một ngoại lệ .Net Framework hiện có mô tả lỗi của bạn tình trạng sử dụng mà

Về tài liệu cho cơ quan thực hiện, bạn có thể sử dụng những nhận xét phần của các ý kiến ​​(giả sử bạn' đang sử dụng nhận xét XML) để mô tả những thứ như cách bạn mong đợi người triển khai thực hiện những việc. Rõ ràng đây không phải là cách thực thi nhưng nó có thể phục vụ như các nguyên tắc hữu ích khi nhà phát triển sử dụng API của bạn

+0

Có, tôi cố gắng bao quát mọi thứ mà người triển khai nên tìm kiếm trong phần nhận xét! Bạn cũng đúng khi cố gắng sử dụng các ngoại lệ hiện có càng nhiều càng tốt. Cảm ơn sự giúp đỡ của bạn –

+0

cũng +1 để biết thêm chi tiết –

+3

Tôi đồng ý với Rob. Tôi cũng nói rằng theo kinh nghiệm của tôi, có quá nhiều kiểu phụ ngoại lệ không thực sự thêm nhiều. Hầu hết mọi người sẽ thích một đối tượng ngoại lệ được khởi tạo với dữ liệu trạng thái có ý nghĩa hơn, thậm chí là một thông báo lỗi tốt hơn. Tôi sử dụng ngoại lệ đã nhập nếu tôi muốn làm rõ rằng tôi mong đợi một người nào đó khôi phục từ một số lỗi nhất định. – Uri

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