Tôi đang vật lộn với một câu hỏi rất đơn giản:
Tôi hiện đang làm việc trên một ứng dụng máy chủ và tôi cần phát minh ra một hệ thống phân cấp cho các ngoại lệ (một số trường hợp ngoại lệ đã tồn tại, nhưng cần có khung chung). Làm thế nào để tôi thậm chí bắt đầu làm điều này?
Tôi đang nghĩ đến việc làm theo chiến lược này:
1) Điều gì đang xảy ra?
- Một cái gì đó được hỏi, mà không được phép.
- Một cái gì đó được hỏi, nó được cho phép, nhưng nó không hoạt động, do tham số sai.
- Một cái gì đó được yêu cầu, nó được cho phép, nhưng nó không hoạt động, vì lỗi nội bộ.
2) Ai là người đưa ra yêu cầu?
- Ứng dụng khách
- Một ứng dụng máy chủ khác
3) Xử lý tin nhắn: như chúng ta đang xử lý một ứng dụng máy chủ, tất cả chỉ là về việc nhận và gửi tin nhắn. Vậy điều gì sẽ xảy ra nếu việc gửi tin nhắn bị trục trặc?
Như vậy, chúng ta có thể nhận được các loại ngoại lệ sau:
- ServerNot ALLowedException
- ClientNot ALLowedException
- ServerParameterException
- ClientParameterException
- InternalException (trong trường hợp máy chủ không biết yêu cầu đến từ đâu)
- ServerI InternalalException
- ClientI InternalalException
- MessageHandlingException
Đây là một cách tiếp cận rất chung để xác định thứ bậc ngoại lệ, nhưng tôi sợ rằng tôi có thể thiếu một số trường hợp rõ ràng. Bạn có ý tưởng về lĩnh vực nào tôi không đề cập đến, bạn có biết về bất kỳ nhược điểm nào của phương pháp này không hoặc có cách tiếp cận tổng quát hơn cho loại câu hỏi này (trong trường hợp sau, tôi có thể tìm thấy nó ở đâu)?
Cảm ơn trước
catch
các khối tôi sử dụng, tôi không sử dụng ngoại lệ nhiều hơn so với thông báo lỗi mà nó chứa. Tôi thực sự không có gì khác tôi có thể làm cho một ngoại lệ liên quan đến việc không đọc tệp vì một người không cấp phát bộ nhớ trong quá trình đọc, vì vậy tôi có xu hướng chỉ bắt std::exception
và báo cáo thông báo lỗi có trong đó, có thể là trang trí nó với "Failed to open file: %s", ex.what()
một bộ đệm ngăn xếp trước khi in nó.
catch
khối khác nhau trong một trang khôi phục, nhưng thường thì chỉ cần bỏ qua thông báo bên trong ngoại lệ và in một tin nhắn được bản địa hóa hơn ...