Çok basit bir soru ile mücadele ediyorum:
Şimdi bir sunucu uygulaması üzerinde çalışıyorum ve istisnalar için bir hiyerarşi icat etmeliyim (bazı istisnalar zaten var, ancak genel bir çerçeve gerekli). Bunu yapmaya nasıl başlayabilirim?
Bu stratejiyi takip etmeyi düşünüyorum:
1) Sorun nedir?
- İzin verilmeyen bir şey sorulur.
- Bir şey sorulur, buna izin verilir, ancak yanlış parametreler nedeniyle çalışmaz.
- Bir şey sorulur, buna izin verilir, ancak dahili hatalar nedeniyle çalışmaz.
2) Talebi kim başlatıyor?
- İstemci uygulaması
- Başka bir sunucu uygulaması
3) Mesaj teslimi: Bir sunucu uygulamasıyla uğraşırken, her şey mesaj almak ve göndermekle ilgilidir. Peki ya mesaj göndermek yanlış giderse?
Bu nedenle, aşağıdaki istisna türlerini alabiliriz:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (sunucunun isteğin nereden geldiğini bilmemesi durumunda)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
Bu, istisna hiyerarşisini tanımlamak için çok genel bir yaklaşımdır, ancak korkarım bazı bariz durumlardan yoksun olabilirim. Hangi alanları kapsamadığım konusunda fikirleriniz var mı, bu yöntemin herhangi bir dezavantajı var mı veya bu tür bir soruya daha genel bir yaklaşım var mı (ikinci durumda, nerede bulabilirim)?
Şimdiden teşekkürler
catch
blok için, istisna için içerdiği hata mesajından daha fazla kullanmıyorum. Gerçekten bir dosya okuma işlemi sırasında bellek tahsis başarısız olarak bir dosya okumak için başarısız bir istisna için yapabileceğim farklı bir şey yok, bu yüzden sadece std::exception
içerdiği hata mesajını yakalamak ve rapor, belki de dekorasyon eğilimindedir ile bu "Failed to open file: %s", ex.what()
yazdırmadan önce yığın tampon.
catch
Tek bir kurtarma sitesinde çok sayıda farklı blok kullanan kişilerin örneklerini gördüm , ancak genellikle istisna içindeki mesajı görmezden gelmek ve daha yerel bir mesaj yazdırmak ...