我正在为我正在处理的API创建一个错误管理器。这个想法是它提供了一个可以从API返回的错误代码存储,确保以相同的方式处理不同调用中的相同错误(例如,请求中缺少所需的值)。
我的初步方法是:
$this->_errorManager->setError(ErrorCodes::REQUIRED_FIELD);
但是,这会在我想要设置错误的任何地方创建对错误代码类的依赖。
替代方案是:
$this->_errorManager->setError(100);
但现在我的代码中间有一个数字,但没有任何意义。
虽然我可以想到这个特定问题的解决方案,但是在其他情况下我会想要使用'枚举'而我想不出一个没有紧密结合类的解决方案。
有没有更好的方法可以采取这种方法或采取不同的方法来消除幻数?或者是我必须接受并根据具体情况考虑的紧密耦合?
答案 0 :(得分:4)
这是理想的耦合。虽然最好让应用程序及其错误管理器松散耦合,但没有理由将应用程序及其错误代码分开,它们属于。
<强>依赖关系:强>
+-----------------------+
|Application error codes|<------------+
+-----------------------+ |
^ |
| |
+----------+----------+ |
|Application component| |
+----------+----------+ |
| |
v |
+-----------------------+ +-------+-----+
|Error handler interface|<|---+Error handler|
+-----------------------+ +-------------+
答案 1 :(得分: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
来
数值等于行号;这可以保证您永远不会有重复的错误代码。