Kodumuz, her yerde genel istisnayı yakalar.Genel İstisnanın kullanımını nasıl yeniden belirleyebilirim?
Genellikle bu hata, veritabanındaki bir günlük tablosuna yazar ve istenen işlemin başarısız olduğunu söylemek için kullanıcıya bir MessageBox gösterir. Veritabanı etkileşimi varsa, işlem geri alınır.
Bazı mantığı çözmek için bir iş mantığı katmanı ve bir veri erişim katmanı tanıttım. Veri erişim katmanında, hiçbir şey yakalamamayı seçtim ve aynı zamanda ArgümentNullExceptions ve ArgumentOutOfRangeExceptions'ı da atarım, böylece iletinin yığından iletilmesi veritabanından düz gelmez.
İş mantığı katmanında bir deneme yakalama koydu. Yakalamada işlemi geri alıyorum, kayıt ve geri alma işlemini yapın.
Sunum katmanında bir MessageBox görüntüleyen başka bir try catch var.
Şimdi kodun yalnızca bir veritabanına eriştiğini bildiğim bir Özel Durum yerine bir DataException ve bir ArgumentException yakalamayı düşünüyorum.
Kod bir web hizmetine eriştiğinde, bir HttpException, WebException veya SoapException oluşturulduğunda veri erişim katmanında oluşturulacak kendi "WebServiceException" ı oluşturabileceğimi düşündüm.
Şimdi, genellikle şu anda genel İstisnımı yakaladığım 2 veya 3 istisnayı yakalıyorum ve bence bu bana uygun görünüyor. İletiyi tanıtıcı katmana taşımak için herkes tekrar istisnalar sardı mı?
Sanırım Exception'ı yakalayan, oturum açmayı deneyen, "Uygulama bir hatayla karşılaştı" iletisini görüntüleyen ve uygulamadan çıktığı Main() 'e bir try catch'u eklemeliyim. Yani, sorum şu ki, planımda herhangi bir delik görüyor mu? Yakalamam gereken ya da bunları hemen hemen kapsayan bir istisna var mıdır (dosya erişimi dışında - bir yapılandırma dosyasına okuduğumuz sadece 1 yer olduğunu düşünüyorum).
nihayet veya deyim kullanarak hakkında mükemmel bir noktaya bağlı değildir. İşlemin DAL'de olduğu yerde zaten bunu yapıyorum, ancak bazı işlemlerim hala BLL'de olduğundan, bir MyDatabase.Dispose() yöntemini ortaya çıkarmam veya "using" deyimi için – Colin
ifadem için SqlCeTransaction'ı kaydırmam gerekecek Fiziksel bir sınırla ne demek istediğinden emin değilsin. BLL'den DAL'e her yöntemde bir sınır yok mu? Bu durumda, BLL'deki her çağrı, try/catch log/throw modeline sahip olmalıdır. Ancak uygulama ve veritabanı, uygulama ve web hizmeti veya uygulama ve dosya sistemi arasındaki fiziksel sınır anlamına gelirse, günlüğümü BLAN'a değil DAL'ye taşırdım. Ama DAL veya BLL'de neredeyse hiç yakalanmadığınızı söylüyorsunuz ve elbette avcıların tüm güncellemelerin eklendiği ve silmelerinin yapıldığı "MyDatabase" sınıfında oturacaklarını söyledim. Bu daha iyi geliyor. – Colin