Saya bergumul dengan pertanyaan yang sangat sederhana:
Saya sekarang bekerja pada aplikasi server, dan saya perlu menciptakan hierarki untuk pengecualian (beberapa pengecualian sudah ada, tetapi kerangka kerja umum diperlukan). Bagaimana saya mulai melakukan ini?
Saya sedang berpikir untuk mengikuti strategi ini:
1) Apa yang salah?
- Ada yang bertanya, yang tidak diizinkan.
- Ada yang bertanya, diizinkan, tetapi tidak berfungsi, karena parameter yang salah.
- Ada yang bertanya, diizinkan, tetapi tidak berfungsi, karena kesalahan internal.
2) Siapa yang meluncurkan permintaan?
- Aplikasi klien
- Aplikasi server lain
3) Penyerahan pesan: karena kita berurusan dengan aplikasi server, ini semua tentang menerima dan mengirim pesan. Jadi bagaimana jika pengiriman pesan salah?
Karena itu, kami mungkin mendapatkan jenis pengecualian berikut:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (jika server tidak tahu dari mana permintaan itu berasal)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
Ini adalah pendekatan yang sangat umum untuk mendefinisikan hierarki pengecualian, tetapi saya khawatir bahwa saya mungkin kurang memiliki beberapa kasus yang jelas. Apakah Anda memiliki gagasan tentang bidang yang tidak saya bahas, apakah Anda mengetahui adanya kelemahan dari metode ini atau apakah ada pendekatan yang lebih umum untuk pertanyaan semacam ini (dalam kasus terakhir, di mana saya dapat menemukannya)?
Terima kasih sebelumnya
catch
blok yang saya gunakan, saya tidak menggunakan lebih banyak untuk pengecualian daripada pesan kesalahan apa yang dikandungnya. Saya tidak benar-benar memiliki sesuatu yang berbeda yang dapat saya lakukan untuk pengecualian yang terlibat dalam gagal membaca file sebagai salah satu gagal mengalokasikan memori selama proses membacanya, jadi saya cenderung hanya menangkap std::exception
dan melaporkan pesan kesalahan yang dikandungnya, mungkin dekorasi dengan "Failed to open file: %s", ex.what()
ke buffer tumpukan sebelum mencetaknya.
catch
blok berbeda dalam satu situs pemulihan, tetapi sering kali hanya mengabaikan pesan di dalam pengecualian dan mencetak pesan yang lebih lokal ...