2013-02-12 16 views
8

Çalıştığım bir API için hata yöneticisi oluşturuyorum. Buradaki fikir, farklı çağrılardaki aynı hatanın aynı şekilde ele alınmasını (örn. Talepte eksik olan değer) sağlayarak, API'den döndürülebilen tek bir hata kodları deposu sağlamasıdır. Ancak bu hata kodları sınıfı bir bağımlılık yerde bir hata ayarlamak istediğiniz oluştururBağımlılık yaratmadan sihir numaralarından kaçınmak

$this->_errorManager->setError(ErrorCodes::REQUIRED_FIELD); 

:

Benim ilk yaklaşım çizgisinde oldu.

$this->_errorManager->setError(100); 

Ama şimdi hiçbir şey ifade benim kodunun ortasında oturan bir numarası var:

alternatiftir.

Orada bir 'enum' kullanmak isteyeceğiniz diğer durumlar olacak ve ben sıkıca çift sınıfları kaldıran bir çözüm düşünemiyorum bu özel sorunun çözüm düşünmek çıkarabilirler.

Bunu yapmak veya büyü numaralarını kaldırmak için yapabileceğim farklı bir yaklaşımın daha iyi bir yolu var mı? Ya da sadece dava bazında bir davayı kabul etmek ve düşünmek zorunda olduğum sıkı bir bağlantı mıdır?

+3

Bu "bağlantı" adını vermem, çünkü "ErrorCodes" herhangi bir * davranışı yoktur *. Bu iyi bir uygulama ve kesinlikle terimin olumsuz çağrışımlarını hak etmiyor. Bunu, "birbirine bağlı iki mantıksal varlık" yerine "iki fiziksel sınıf olarak uygulanan bir mantıksal varlık" olarak düşünmek isteyebilirsiniz. – Jon

cevap

4

Bu, istenen birleştirme işlemidir. bunun iyi bir fikir olsa da, uygulama ve hata yöneticisi gevşek bağlı olması, uygulama ve hata kodlarını ayırmak için hiçbir neden yoktur, birlikte ait .

Bağımlılıklar: Sen "önişlemci" makrolar ve makefile ile bu engellerden bazı temizleyebilirsiniz

+-----------------------+ 
|Application error codes|<------------+ 
+-----------------------+    | 
     ^      | 
      |       | 
+----------+----------+    | 
|Application component|    | 
+----------+----------+    | 
      |       | 
      v       | 
+-----------------------+  +-------+-----+ 
|Error handler interface|<|---+Error handler| 
+-----------------------+  +-------------+ 
+0

Seninleyim ... +1 – hek2mgl

1

. Önişlemci makroları m4 nezaketiyle gelir.

böyle hata kodlarının bir dosyayı korumak varsayalım.

define(`ERR_REQUIRED_FIELD',`100')dnl 

PHP kodunuzu "sabit" hata ile yazabilirsiniz.

$this->_errorManager->setError(ERR_REQUIRED_FIELD); 

Ve makefile içinde bu iki dosyayı m4 aracılığıyla çalıştıran bir satır ekleyin. Bunu yönetmenin birden fazla yolu var. (Kısa tutmak için, ben makefile ihmal ediyorum ve sadece m4 ile benim test dosyasını çalıştırarak.)

$ m4 test.php.m4 > test.php 
$ cat test.php 
$this->_errorManager->setError(100); 

Bu bir bağımlılık tanıtmak gelmez; php dosyaları, hata kodlarının dosyalarına bağlı olacaktır. Ancak makefile ile kolayca yönetilen önemsiz bir bağımlılıktır. Pratikte, muhtemelen böyle görünen bir hata kodu dosyası yapıyorum. . . Ya

  • için

    ERR_DISK_FULL 
    ERR_REQUIRED_FIELD 
    ERR_MISSING_ARG 
    

    ve metin araçları kullanabilir ve make m4 makro tanımlarını oluşturmak veya

  • sizin ErrorCodes modül için tanımlarını oluşturmak.

Sayısal değerler, satır numaralarına eşittir; Bu, asla çift hata kodunuz olmadığını garanti eder.

İlgili konular