9

私が取り組んでいる API のエラー マネージャーを作成しています。これは、API から返されるエラー コードの単一のストアを提供し、異なる呼び出しで同じエラーが同じ方法で処理されるようにするという考え方です (たとえば、要求から欠落している必要な値)。

私の最初のアプローチは、次のようなものでした。

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

ただし、これにより、エラーを設定したい場所のエラーコードクラスへの依存が作成されます。

代替手段は次のとおりです。

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

しかし今、コードの途中に何の意味もない数字が置かれています。

この特定の問題の解決策を考えることができますが、「列挙型」を使用したい他の状況があり、クラスを密結合しない解決策を思いつきません。

これを行うためのより良い方法や、マジック ナンバーを削除するための別のアプローチはありますか? それとも、ケースバイケースで受け入れて検討する必要があるのは密結合ですか?

4

2 に答える 2

4

これは望ましいカップリングです。アプリケーションとそのエラー マネージャーを疎結合にすることは良い考えですが、アプリケーションとそのエラー コードを分離する理由はなく、それらは一緒に属します

依存関係:

+-----------------------+
|Application error codes|<------------+
+-----------------------+             |
           ^                          |
           |                          |
+----------+----------+               |
|Application component|               |
+----------+----------+               |
           |                          |
           v                          |
+-----------------------+     +-------+-----+
|Error handler interface|<|---+Error handler|
+-----------------------+     +-------------+
于 2013-02-12T13:56:59.300 に答える
1

これらのハードルのいくつかは、「プリプロセッサ」マクロとメイクファイルでクリアできます。プリプロセッサ マクロはm4の厚意によるものです。

このようなエラー コードのファイルを保持しているとします。

   define(`ERR_REQUIRED_FIELD',`100')dnl

次に、英語のエラー "constant" を使用して PHP コードを記述できます。

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

そして、これら 2 つのファイルを m4 で実行する行を makefile に含めます。それを管理する方法は複数あります。(簡潔にするために、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 マクロ定義をビルドする、または
  • ErrorCodes モジュールの定義を作成します。

数値は行番号と同じです。これにより、エラー コードが重複しないことが保証されます。

于 2013-02-12T15:35:08.080 に答える