Ne kadar hataları kontrol ve istisnalar atmak için?

2 Cevap php

Benim web sitesinin arka uç üzerinde çalışıyorum ve ben hataları için test olacak ve buna göre özel durumlar atma gerektiğini ne kadar merak ediyorum? Testing in the sense of improper usage of methods and functions. Not errors under correct usage.

Benim en büyük endişe kodu kabartmak ve birinin / eğer tip kontrolleri bir grup ile o kadar uglying, ve diğer bu tür testler olduğunu.

Eğer şimdiye kadar mümkün olan her şekilde birisi tüm yanlış kullanımları yakalamak, bir nesne kullanmak, ve geliştirici net onlar yanlış yaptığımı bunu kullanarak yapmak için istisnalar atmak dikkate olarak gitmeli?

Yoksa kod mola doğal (obviously catching and checking for things that would be a big deal, but not for every contingency) izin daha iyi bir yaklaşım olduğunu ve mevcut belgeleri okumak ve ona göre kullanmak için kodu kullanan herkes bağımlı?

Bu tür konuları işlerken takip için herhangi bir genel en iyi uygulamalar ve kurallar vardır? Bu konu geniş genellikle dili olsa da ben PHP çalışıyorum, PHP özgü bir şey var mı?

Konuda herhangi bir yardım için teşekkür ederiz.

2 Cevap

En azından, uygulama "kırmak" olmamalı: Bir hata tespit edildiğinde (be it because you detected a problem could happen and avoided it, or because a problem did happen), bazı güzel hata mesajı görüntülenmesi gerekir, ve, sonunda, hata teknik bilgileri log.

Benim kod too much testleri ve tüm bu koymak olmaz: - önemli olan bunu anlamak zor bir şey sonuna kadar ve korumak istiyorsunuz kodu şişkinlik Hakkında!


What I generally try to do is :

  • Test for errors in the user-supplied data
    • Örneğin, belirli bir sınıfı kullanarak, böylece bu çek veritabanı ve iş kuralları ile uğraşan kod ortasında değildir.
    • Those tests are relatively precise, in order to generate useful error messages for the user
      • Örneğin: "You should not input more than 20 characters"
      • Veya "there is already a user with that e-mail address"
    • Temelde, burada önemli olan kullanıcı.
  • When user-supplied data seems OK, I work with it.
    • Bazı hata olur ve orada, büyük olasılıkla teknik bir hata olacak
    • Yapman gereken
    • Ve sadece "oops, an error occured" kullanıcıya görüntülenen edilmelidir.
    • - Ille büyük Ayrıntılar biz sadece eğer o inşaat ya da değil biliyorum gerekir: Hangi burada testleri kadar kesin değildir, demektir.

Tabii ki, sonunda, DB veri doğru olduğundan emin olun, ve verinin yalnızca yarısını tasarruf olmadığını gerekir.


A common way of dealing with technical errors is using exceptions ; here is a very basic idea :

try {
    // Begin transaction to the DB

    // Some code that might fail and throw an Exception

    // Some other code that might fail and throw an Exception

    // Code here will not be executed if an Exception has been thrown

    // Commit DB transaction
} catch (Exception $e) {
    // Rollback transaction (cancels the queries that were sent to the DB)
    // Log technical informations to a file
    // Display a nice message
}

Müthiş bir şey bu tek bir tek bir yerde tüm hata işleme kodunu yerleştirin ve önemli şeyler ortasında daha az, test kodu koymak için izin olduğunu; yani, "{[(0)"}]

Emin bir yöntem giriş parametreleri ve / veya ortak üye dolu ve uygun türü olan (vb dize, int ..) yapma gibi ben genellikle sadece kadar gidin. Bunun dışında ben sadece doğal kırılsın. (Insanlar belgeleri okuma rahatsız edecek değilseniz, onlar tür şeyler biraz kırmak için hak ediyor.)

Gördüğüm kadarıyla, sadece amacı co-workers/clients/random-developers bir tembellik desteklemek olacaktır bulunuyor hata kontrolleri, kodunuzu kabartmak yok.