SORU
20 ŞUBAT 2013, ÇARŞAMBA


Nasıl kullanarak özel durum işleme için en iyi yöntem try

üst düzey bir geliştirici olduğunu iddia eden biri bile benim meslektaşım kodu korurken, ben genellikle aşağıdaki kodu bakın:

try
{
  //do something
}
catch
{
  //Do nothing
}

ya da bazen try catch blok aşağıdaki gibi günlük dosyaları için günlük bilgilerini yazıyorlar

try
{
  //do some work
}
catch(Exception exception)
{
   WriteException2LogFile(exception);
}

Sadece yaptıkları en iyi yöntem olup olmadığını merak ediyorum? Düşüncemi kullanıcıların sistem ile neler bilmeli çünkü beni karıştırır.

Bana biraz tavsiye verin lütfen.

CEVAP
20 ŞUBAT 2013, ÇARŞAMBA


Özel durum işleme stratejimi

  • Yakalamak içintüm işlenmemiş özel durumlarApplication.ThreadException event, sonra karar verin: çengel tarafından

    • UI bir uygulama için bir özür mesajı (win) . kullanıcıya pop
    • Bir Hizmetin veya bir Konsol uygulaması: bir dosyaya (servis veya konsol) oturum açın

O zaman ben her zaman alındışarıdan çalışan bir kod her parçatry/catch :

  • Tüm olayları Win altyapısı tarafından (Yük, Tıklayın, SelectedChanged...) ateş etti
  • Tüm olaylar üçüncü parti bileşenleri tarafından kovuldu

O zaman ben de alın '/try'

  • Tümişlemleri benbilmek her zaman işe yaramayabilir(IO işlemleri, potansiyel sıfır bir bölümü ile bir hesap...). Böyle bir durumda, gerçekte neler olduğunu takip etmek ApplicationException("custom message", innerException) yeni atıyorum

Ayrıca, elimden gelenin en iyisini yapmaya çalışıyorumistisnalar doğru sıralayın. Hangi istisnalar vardır:

  • kullanıcıların hemen göstermek gerekir
  • sorunları (örn: koyun .basamaklı önlemek için ne zaman onlar bazı ekstra işlem şeyi bir arada gerektirirTreeView dolgu sırasında finally bölümünde EndUpdate)
  • kullanıcı dikkat etmez, ama önemli olanları. Ben her zaman onları günlük bu kadar:

    • Olay günlüğüne
    • ya da bir .disk üzerinde günlük dosyası

İçin iyi bir uygulamadırbazı statik yöntemleri özel durumlar işlemek için tasarımuygulama üst düzey hata işleyicileri.

Ben de kendimi denemek için güç:

  • UnutmayınTÜM özel durumları üst seviyeye kabarmış. Özel durum işleyicileri her yere koymak için gerekli değildir.
  • Yeniden kullanılabilir ya da derin adlı fonksiyonları veya özel durum günlüğünü görüntüleme zorunluluğu yoktur, ya da otomatik olarak kabarmış veya özel durum işleyicileri. bazı özel mesajlar ile rethrown onlar

Nihayet :

Kötü:

// DON'T DO THIS, ITS BAD
try
{
    ...
}
catch 
{
   // only air...
}

İşe yaramaz:

// DONT'T DO THIS, ITS USELESS
try
{
    ...
}
catch(Exception ex)
{
    throw ex;
}

Sonunda bir yakalama olmadan bir deneyin olması son derece geçerli

try
{
    listView1.BeginUpdate();

    // If an exception occurs in the following code, then the finally will be executed
    // and the exception will be thrown
    ...
}
finally
{
    // I WANT THIS CODE TO RUN EVENTUALLY REGARDLESS AN EXCEPTION OCCURED OR NOT
    listView1.EndUpdate();
}

Ne ben üst düzeyde

// i.e When the user clicks on a button
try
{
    ...
}
catch(Exception ex)
{
    ex.Log(ex); // Log exception
    // ex.LogAndDisplay(ex); // Log exception, then show it to the user with apologies...
}

Hep fırsat aradı fonksiyonları:

// Calculation module
try
{
    ...
}
catch(Exception ex)
{
    // Add useful information to the exception
    throw new ApplicationException("Something wrong happened in the calculation module :", ex);
}

// IO module
try
{
    ...
}
catch(Exception ex)
{
    throw new ApplicationException(string.Format("I cannot write the file {0} to {1}", fileName, directoryName), ex);
}

Özel durum işleme (Özel Durumlar) ile yapmak için bir çok şey var ama aklımda tutmaya çalışırım kurallar basit uygulamalar için yeterli thoses.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • magnum33563

    magnum33563

    8 NİSAN 2011
  • Mark Hyder

    Mark Hyder

    6 EKİM 2011
  • NextKsa

    NextKsa

    7 EKİM 2009