2013-02-12 52 views
8

我正在为我正在创建的API创建一个错误管理器。这个想法是它提供了一个可从API返回的错误代码库,确保以相同的方式处理不同调用中的相同错误(例如,请求中缺少所需的值)。避免幻数而不创建依赖关系

我最初的做法是沿着线:

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

然而,这造成的错误代码级的依赖的任何地方我想成立一​​个错误。

另一种方法是:

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

但现在我已经得到了一些坐在我的代码中间没什么意思。

虽然我可以想到解决这个特定问题的方法,但我还是会想要使用'枚举'的其他情况,我想不出一种不会紧密结合类的解决方案。

有没有更好的方法来做到这一点,或者我可以采取不同的方法来消除幻数?或者,我只是接受和考虑个案的紧密耦合?

+3

我不会真的叫这个“耦合”,因为'ErrorCodes'没有任何*行为*。这是一个很好的习惯,绝对不值得这个词的消极内涵。您可能想将其视为“一个逻辑实体实现为两个物理类”,而不是“两个逻辑实体耦合在一起”。 – Jon 2013-02-12 13:56:45

回答

4

这是所需的耦合。虽然这是一个好主意,但让应用程序和错误管理器松散耦合,没有理由将应用程序及其错误代码分开,它们属于

依赖关系:

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

我和你在一起... +1 – hek2mgl 2013-02-12 15:09:10

1

您可以清除这些障碍一些与 “预处理器” 宏和Makefile文件。预处理器宏由m4提供。

假设您维护这样的错误代码文件。

define(`ERR_REQUIRED_FIELD',`100')dnl 

然后,您可以编写英文错误“常量”的PHP代码。

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

并且在你的makefile中包含一行代码,通过m4运行这两个文件。有多种方法来管理它。 (为简便起见,我忽略makefile文件,并且刚刚经历M4运行我的测试文件。)

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

引进的依赖; PHP文件将全部取决于错误代码的文件。但这是一个简单的依赖关系,可以通过makefile轻松管理。在实践中,我可能会建立一个看起来像这样的错误代码文件。 。 。

ERR_DISK_FULL 
ERR_REQUIRED_FIELD 
ERR_MISSING_ARG 

并使用文字公用事业和make要么

  • 打造m4宏定义,或
  • 建立你的ErrorCode的模块定义。

数值等于行号;这保证你永远不会有重复的错误代码。