İstisna katmanları ve durum kodları kullanımı yoluyla yeniden atma

1 Cevap php

Ben birçok php kodları okudum, (burada da) uzun bir süre için bu aradı, ama yine de tatmin edici bir cevap bulamadım. Bu çok geniş bir konu gibi görünebilir, ama gerçekten birlikte sopalarla - son benim için. Lütfen yardımcı olur?

Bir php web BLL nesneler tarafından kullanılan ne DAL, PDO var ve onlar UI denir. something olur şimdi, PDO bir PDOException atar. Tabii UI katmanı PDOExceptions hakkında hiçbir şey bilmek zorunda değildir, bu nedenle BLL nesnenin onu yakalar. Ama şimdi ne olacak?

Ben okudum

  1. istisnalar gerçekten olağanüstü durumlar için vardır ve
  2. bir üst tabakalarında düşük seviye durumlar almak için değil sırayla alt katmanlardan istisnalar yeniden atar.

Bana (fonksiyon args dikkat etmeyiniz) benim sorunum açıklayalım:

class User
{
 function signUp()
 {
  try
  {
   //executes a PDO query
   //returns a code/flag/string hinting the status of the sign up:
   //success, username taken, etc.
  }
  catch (PDOException $e)
  {
   //take the appropriate measure, e.g. a rollback

   //DataAccessException gets all the information (e.g. message, stack
   //trace) of PDOException, and maybe adds some other information too
   //if not, it is like a "conversion" from PDOException to DAE
   throw new DataAccessException();
  }
 }
}

//and in an upper layer
$user = new User();
try
{
 $status = $user->signUp();
 //display a message regarding the outcome of the operation
 //if it was technically successful
}
catch (DataAccessException $e)
{
 //a technical problem occurred
 //log it, and display a friendly error message
 //no other exception is thrown
}

Is this a right solution? When re-throwing the PDOException I don't think it would be appropriate to use exception chaining (as this would only make debugging information redundant; DataAccessException gets everything, including the full stack trace from PDOException).

Şimdiden teşekkürler.

1 Cevap

As I understood your post a good resource is this: Api design

Ben size ev ödevi yaptık (ben ifade kullanabilir) ama bu şey yapılıyor nedenini unuttum düşünüyorum. Sizin örnekte ben gibi bir şey yaratmak istiyorum

SignUpException

bir şey kaydolma hakkında yanlış gitti üst katmanlarını bilgilendirmek hangi. Burada ne yapmak aslında programlı doğru olsa da, why-s ilk etapta bunu yapmanın noktasını özlüyor şey, aslında aynı şey olduğu, bir adında farklı bir veritabanı özel maskeleme .