2013-02-12 34 views
8

मैं एक एपीआई के लिए एक त्रुटि प्रबंधक बना रहा हूं जिस पर मैं काम कर रहा हूं। विचार यह है कि यह त्रुटि कोडों का एक ही स्टोर प्रदान करता है जिसे एपीआई से वापस किया जा सकता है, यह सुनिश्चित करना कि विभिन्न कॉलों में एक ही त्रुटि को उसी तरह से संभाला जा सके (जैसे अनुरोध से आवश्यक मूल्य अनुपलब्ध)।निर्भरता पैदा किए बिना जादू संख्याओं से बचें

मेरे प्रारंभिक दृष्टिकोण की तर्ज पर किया गया था:

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

हालांकि इस बनाता त्रुटि कोड वर्ग पर निर्भरता कहीं भी मैं एक त्रुटि सेट करना चाहते हैं।

विकल्प है:

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

लेकिन अब मैं एक नंबर मेरे कोड के बीच कुछ भी नहीं है इसका मतलब है कि में बैठे मिल गया है।

जबकि मैं इस विशिष्ट समस्या के समाधान के बारे में सोच सकता हूं, वहां अन्य स्थितियां होंगी जहां मैं 'एनम' का उपयोग करना चाहूंगा और मैं ऐसे समाधान के बारे में नहीं सोच सकता जो वर्गों को कसकर जोड़ता नहीं है।

क्या ऐसा करने का कोई बेहतर तरीका है या जादू संख्या को हटाने के लिए मैं एक अलग दृष्टिकोण ले सकता हूं? या क्या तंग युग्मन कुछ है जिसे मुझे स्वीकार करना है और मामले के आधार पर किसी मामले पर विचार करना है?

+3

मैं वास्तव में यह "युग्मन" नहीं कहूंगा, क्योंकि 'त्रुटि कोड' में कोई * व्यवहार * नहीं है। यह अच्छा अभ्यास है, और निश्चित रूप से इस शब्द के नकारात्मक अर्थों के लायक नहीं है। आप इसके बारे में "दो लॉजिकल इकाइयों को एक साथ जोड़कर" दो भौतिक वर्गों के रूप में लागू "के रूप में सोच सकते हैं। – Jon

उत्तर

4

यह वांछित युग्मन है। हालांकि यह एक अच्छा विचार है कि एप्लिकेशन और उसके त्रुटि प्रबंधक को कम से कम युग्मित करने के लिए, एप्लिकेशन और उसके त्रुटि कोड को अलग करने का कोई कारण नहीं है, वे एक साथ हैं।

निर्भरता:

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

मैं तुम्हारे साथ हूं ... +1 – hek2mgl

1

आप "Preprocessor" मैक्रो और एक makefile साथ कुछ इन बाधाओं का साफ कर सकते हैं। प्रीप्रोसेसर मैक्रोज़ m4 की सौजन्य आते हैं।

मान लें कि आप इस तरह के त्रुटि कोड की एक फ़ाइल बनाए रखते हैं।

define(`ERR_REQUIRED_FIELD',`100')dnl 

फिर आप अपना PHP कोड अंग्रेजी त्रुटि "स्थिर" के साथ लिख सकते हैं।

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

और अपनी मेकफ़ाइल में एक पंक्ति शामिल करें जो इन दो फ़ाइलों को एम 4 के माध्यम से चलाती है। इसे प्रबंधित करने के एक से अधिक तरीके हैं। (संक्षिप्तता के लिए, मैं makefile को छोड़ते हुए कर रहा हूँ, और बस m4 के माध्यम से अपने परीक्षण फ़ाइल चल रहा है।)

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

यह एक निर्भरता की स्थिति है; PHP फ़ाइलें सभी त्रुटि कोड की फ़ाइल पर निर्भर करती हैं। लेकिन यह एक छोटी निर्भरता है जिसे आसानी से मेकफ़ाइल के माध्यम से प्रबंधित किया जाता है। प्रैक्टिस में, मैं शायद इस तरह दिखने वाले त्रुटि कोड की एक फाइल तैयार करूंगा। । ।

ERR_DISK_FULL 
ERR_REQUIRED_FIELD 
ERR_MISSING_ARG 

और पाठ उपयोगिताओं का उपयोग करें और make या तो

  • को m4 मैक्रो परिभाषाओं का निर्माण, या
  • अपने ErrorCodes मॉड्यूल के लिए परिभाषाओं का निर्माण।

संख्यात्मक मान रेखा संख्याओं के बराबर हैं; यह गारंटी देता है कि आपके पास डुप्लिकेट त्रुटि कोड नहीं है।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^